Announcement

Collapse
No announcement yet.

Announcement

Collapse
No announcement yet.

Which rom is best for using touch screen(s) with the X7?

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

    Which rom is best for using touch screen(s) with the X7?

    Hi,

    I have a minix X7 and i can't get any of the touchscreens i have here working with it.

    For the X5, the minix customer service made a firmware that works with the touchscreen, but they can't do it for the X7 for some reason.

    I already tried the .idc file solution on the Finless rom: http://www.freaktab.com/showthread.php?1802-Touchscreen
    But it doesn't seem to do anything. The pointer stays in the top left corner.

    Is there a rom that supports touch screens by default? Or can someone point me in the direction of a possible sollution?
    I have a big touch-enabled TV screen and a HP Pavilion 23tm Touch Monitor (not an all in one pc).

    Thanks

    #2
    IIYAMA T2735MSC USB touch screen with Neo X7

    It would be nice if there was generic support for all touch screens in Android indeed. Being a newbie on the subject, I also experienced problems in making my touch screen work with the X7. The IDC file approach did not do the trick for me either... I found a lot of information on freaktab though and I finally decided to try some 'kernel building' myself. Perhaps there is an easier way to do it, but it worked for me. Some feedback...

    My baseline (thanks to all those great ROM developers!):
    My screen:
    • IIYAMA T2735MSC touchscreen monitor, 27 inch 10-touch
    • 3M MicroTouch USB Controller, VendorId = 0596, ProductId = 053f, rev = 01.06

    Additional background:
    The default 'Kernel-3188-X7' as provided by phjanderson did not seem to have USB driver support included, so I changed the kernel options in the following way (kernel menuconfig):
    • navigate to 'device drivers' / 'input devices' / 'usb touch screen' => include all available drivers (I compiled it in the kernel, rather than selecting it as a module.)
    • exclude Game controller drivers from the kernel config (I did not need them and read somewhere that they could give conflicts with USB touch screen driver)
    • Some other, non USB touch screen related options (neox7, ddr667, cpu1800h, 1080p, gpu600h, vsfsam) => for more information see phjanderson documentation

    I was particularly interested in support for 3M panels in the multitouch USB driver. Having a working kernel did not solve the problem completely yet. I moved to the source code to extend it for the support of my particular USB controller (vendor / product id):
    • Kernel-3188-X7/drivers/hid/hid-ids.h
      • added '#define USB_DEVICE_ID_3M2735 0x053f' to USB_VENDOR_ID_3M section, adding new device-id
    • Kernel-3188-X7/drivers/hid/hid-core.c
      • added ' { HID_USB_DEVICE(USB_VENDOR_ID_3M, USB_DEVICE_ID_3M2735) }, ' to USB_VENDOR_ID_3M section
    • Kernel-3188-X7/drivers/hid/hid-multitouch.c
      • added the following entry in 'mt_devices', list of supported devices by the multitouch driver (in the 3M section)
    { .driver_data = MT_CLS_3M, HID_USB_DEVICE(USB_VENDOR_ID_3M, USB_DEVICE_ID_3M2735) },
    • Kernel-3188-X7/drivers/input/touchscreen/usbtouchscreen.c
      • added ' {USB_DEVICE(0x0596, 0x053f), .driver_info = DEVTYPE_3M}, ' in CONFIG_TOUCHSCREEN_USB_3M section

    After compiling the kernel and flashing it with the Finless 1.8 provided toolchain, the USB touch screen was recognized immediately and worked perfectly in multi-touch mode (tested 10 fingers touch with Multi-touch tester app). My 27-inch tablet on the wall is a fact now.

    As I said, there may be easier ways to get to the same result (why could I not get the IDC file to work...). I guess I was lucky that 3M panels were already supported in the multi-touch driver, I only had to add my 'deviceId' for a proper registration.

    Perhaps a more experienced ROM developer can pick this up if there is a need for it? The solution provided here is targeting my specific touch screen, so it is not generic. For those that want to use it as a blue-print, good luck! Also many thanks to Finless and phjanderson!

    Regards,
    Arro.

    Comment


      #3
      Arro, Finless, anybody can you please give me some more information about how you compiled phjanderson's kernel with the Finless rom?

      I've modified the kernel files like you did (adding the device information) and ran menuconfig to compile the kernel. Then I get an error about USB Gadget Drivers when I run make.

      What do I do next? I don't know how to combine the kernel and the rom together.

      Why does the Finless rom not have a system folder and where do I get one? Kitchen told me it was missing a system folder.

      I'm trying to do the same thing as Arro -- adding support for my touch screens. I have a Hannspree HT231 and an Acer FT220HQL.

      Sorry for so many questions. I really appreciate any help you can give me! Thanks.

      Comment


        #4
        I am not sure what type of problem you have with the kernel building, but I had to remove some game controller drivers from the kernel config to avoid crashes. Since I did not need them, this was the easiest way to move forward.


        I tried to attach the kernel I have built for my screen. You can simply unzip it and move it to the 'FinlessROM' folder that you may have when you use his ROM. When you actually move to flashing with his tools, you will see a list of files that will be used. The kernel is identified separately from the rest of the Android distribution (actual 'system'). When clicking on the right blank field of the 'kernel' line, you can select the actual kernel you want to use. Select you own or any other one. Make sure it is consistent with what you want to do (load 720p image or 1080p image). The kernel I attached is 1080p.

        Good luck!
        Arro.
        Attached Files

        Comment


          #5
          Originally posted by Arro View Post
          I am not sure what type of problem you have with the kernel building, but I had to remove some game controller drivers from the kernel config to avoid crashes. Since I did not need them, this was the easiest way to move forward.


          I tried to attach the kernel I have built for my screen. You can simply unzip it and move it to the 'FinlessROM' folder that you may have when you use his ROM. When you actually move to flashing with his tools, you will see a list of files that will be used. The kernel is identified separately from the rest of the Android distribution (actual 'system'). When clicking on the right blank field of the 'kernel' line, you can select the actual kernel you want to use. Select you own or any other one. Make sure it is consistent with what you want to do (load 720p image or 1080p image). The kernel I attached is 1080p.

          Good luck!
          Arro.
          I can boot with your kernel but when i flash with my own, android never starts (i just get a blank screen). Do you have the kernel config file? It says here (http://forum.xda-developers.com/show....php?t=1711643) that the config file allows you to see all of the options that were selected in menuconfig. If I could see your config file, maybe I could set the same options as you and then add a couple more for my specific touchscreen.

          Thanks for all of the help.

          Comment


            #6
            I attached the kernel config file I am using and my latest kernel, supporting some additional multi-touch screens.

            Based on information I received from skiman, this kernel now supports:
            • HP multi-touch screen (VendorIdeviceId = 1926:033c)
            • A large set of multi-touch panels based on CVTouch technology (http://www.cvtouch.com/)


            Multi-touch screens (supporting more than 2 touch points) do not always seem to be recognized automatically by the kernel. As long as the HID protocol, however, can be handled by a generic or existing multi-touch kernel driver, it is not that difficult to add proper device registration in a specific kernel build.

            Hope this one works for you, otherwise dive into the kernel config!
            Arro.
            Attached Files

            Comment


              #7
              Nice job Arro!

              I may send people to you that want multi-touch support.

              I assume the screen your using had Android drivers available?

              Bob
              "Pzebacz im, bo nie wiedzą, co czynią"
              "Прости им, они не ведают, что творят"
              "Perdona loro perché non sanno quello che fanno"
              "Vergib ihnen, denn sie wissen nicht, was sie tun"
              "Vergeef hen want ze weten niet wat ze doen"
              "Pardonne-leur car ils ne savent pas ce qu'ils font"
              "Perdónalos porque no saben que lo que hacen"
              "Oprosti im, jer ne znaju što čine"
              "Forgive them as they know not what they do"





              Comment


                #8
                kernel with touchscreen support for Hannspree HT231

                Hi,

                I also have a Hannspree HT231 10-point multitouch monitor and it responds only when I have all my 10 fingers on the screen.I have a mk908ii can use a Finless 1.5a or a Finless KK 2.0 with d33 kernels on them.
                I do not know how to compile my own Android kernel but I want to help test in any way I can. If any of you guys have a kernel I could test with support for HT231 I would greatly appreciate it.

                Thanks in advance!

                Comment


                  #9
                  Originally posted by Finless View Post
                  Nice job Arro!

                  I may send people to you that want multi-touch support.

                  I assume the screen your using had Android drivers available?

                  Bob
                  Hi Bob, thanks for your feedback!

                  There is indeed already good support for multi-touch panels in the kernel. They are categorized in different behavioral 'classes', depending on how they interpret 'multi-touch' events. These classes, for screens supporting more than 2 touch points, are mainly handled by one and the same driver (hid-multitouch.c). If there is already a 'class' defined and implemented for your screen, you're in good shape! The screen I use follows the '3M' class of behavior which was indeed already supported (3M vendor specific). The screens of skiman could be supported by the 'default' class.


                  One could argue, what is the problem with all these screens if kernel support is most probably already there? From what I see, it has to do with 'event routing' associated with USB. Since a lot of functionality can be added to a computer via USB connectivity, events need to be classified properly and forwarded to a driver that can handle them. The evolution from dual touch to multi-(more than dual)touch seems to give rise to some interpretation problems. Classification is done wrongly, events get routed to the wrong portion of driver code and the touchscreens are not working. The IDC file does not provide sufficient information to get this right.


                  The fallback solution is to hard code event routing in the kernel for each combination of VendorID / DeviceID, once you know which 'behavioral class' needs to be used for that screen. Not very flexible, but efficient. Although it is very simple to do in the end, each time a new kernel is needed...
                  I was lucky so far that the screens I included already had an associated class.


                  The main concept is (3 files and you're done):
                  • define your screen in 'hid-ids.h'
                  • define that your screen needs specific event routing in 'hid-core.c'
                  • register the vendorId / deviceId in 'hid-multitouch.c' for the correct 'class'
                  • Compile the kernel with the proper 'config'


                  If you have bad luck, and the class is not really supported yet due to vendor specific, non-supported event handling, a lot more work needs to be done. I guess than you're into some USB event tracing and debugging to find the 'quirks' that need to be applied. On the other hand, none of this is Minix X7 specific!

                  Arro.

                  Comment


                    #10
                    Originally posted by zerologicxxx View Post
                    Hi,

                    I also have a Hannspree HT231 10-point multitouch monitor and it responds only when I have all my 10 fingers on the screen.I have a mk908ii can use a Finless 1.5a or a Finless KK 2.0 with d33 kernels on them.
                    I do not know how to compile my own Android kernel but I want to help test in any way I can. If any of you guys have a kernel I could test with support for HT231 I would greatly appreciate it.

                    Thanks in advance!
                    I do not have a build environment or kernel source code for the mk908ii device, but I assume the same approach that I documented in this thread could work if the screen is default 10-touch.


                    Checking the following discussion: http://www.freaktab.com/showthread.php?1802-Touchscreen
                    Your screen has: Vendor_0457 and Product_1057


                    Important NOTE: The approach I describe is applicable for kernel version 3.0.36+. Later Linux kernel versions like the one used in Ubuntu 13.10 have different USB event routing mechanisms (not sure from which version onwards it changed). Copying kernel driver files (like hid-multitouch.c) can not easily be done. I assume attaching USB touch screens will become more plug-and-play.


                    If your mk908ii has a similar kernel as mine, perhaps someone with a build environment can add the proper event routing for you to verify if the default 10-touch behavior is OK.

                    Arro.

                    Comment


                      #11
                      FYI I have helped some folks with touch screen where the kernel did not have multitouch.c in the kernel.
                      In those cases I have a multitouch.ko that I insmod at boot (edited init.rc in boot.img to inject it early on).

                      But it doesn't fix all of them. e.g. it maybe a 10" touch screen but registers as a 4" or something. e.g. not all the touch screen are is seen. Also some act simply as a mouse and not a touch screen. Probably has something to do with the class type your talking about.

                      FYI you may also need the android.hardware.touchscreen.multitouch.distinct.x ml
                      file in /etc/permissions in the ROM.

                      Thanks for the info! Learn something new all the time!

                      Bob
                      "Pzebacz im, bo nie wiedzą, co czynią"
                      "Прости им, они не ведают, что творят"
                      "Perdona loro perché non sanno quello che fanno"
                      "Vergib ihnen, denn sie wissen nicht, was sie tun"
                      "Vergeef hen want ze weten niet wat ze doen"
                      "Pardonne-leur car ils ne savent pas ce qu'ils font"
                      "Perdónalos porque no saben que lo que hacen"
                      "Oprosti im, jer ne znaju što čine"
                      "Forgive them as they know not what they do"





                      Comment


                        #12
                        Originally posted by Finless View Post
                        FYI I have helped some folks with touch screen where the kernel did not have multitouch.c in the kernel.
                        In those cases I have a multitouch.ko that I insmod at boot (edited init.rc in boot.img to inject it early on).

                        But it doesn't fix all of them. e.g. it maybe a 10" touch screen but registers as a 4" or something. e.g. not all the touch screen are is seen. Also some act simply as a mouse and not a touch screen. Probably has something to do with the class type your talking about.

                        FYI you may also need the android.hardware.touchscreen.multitouch.distinct.x ml
                        file in /etc/permissions in the ROM.

                        Thanks for the info! Learn something new all the time!

                        Bob
                        It was indeed a choice of me to have the driver compiled into the kernel, rather than having it dynamically loaded as a module (common practice in embedded Linux). I wanted to avoid loading issues (no insmod needed) and focus on the problem at hand. As mentioned earlier, I also removed support for some USB game controllers as I was expecting interaction.


                        I am not aware of the XML file you mention though. Is that being used in the Android system itself, to control user / app permissions? Do you put it by default on your ROMs (I am using your 1.8 ROM for the X7)?

                        Thanks! Arro.

                        Comment


                          #13
                          Originally posted by Arro View Post
                          It was indeed a choice of me to have the driver compiled into the kernel, rather than having it dynamically loaded as a module (common practice in embedded Linux). I wanted to avoid loading issues (no insmod needed) and focus on the problem at hand. As mentioned earlier, I also removed support for some USB game controllers as I was expecting interaction.


                          I am not aware of the XML file you mention though. Is that being used in the Android system itself, to control user / app permissions? Do you put it by default on your ROMs (I am using your 1.8 ROM for the X7)?

                          Thanks! Arro.
                          Yes it is in my ROMs. When I do other ROM that don't have it, I add it.

                          That file is in /system/etc/permissions/

                          Bob
                          "Pzebacz im, bo nie wiedzą, co czynią"
                          "Прости им, они не ведают, что творят"
                          "Perdona loro perché non sanno quello che fanno"
                          "Vergib ihnen, denn sie wissen nicht, was sie tun"
                          "Vergeef hen want ze weten niet wat ze doen"
                          "Pardonne-leur car ils ne savent pas ce qu'ils font"
                          "Perdónalos porque no saben que lo que hacen"
                          "Oprosti im, jer ne znaju što čine"
                          "Forgive them as they know not what they do"





                          Comment


                            #14
                            Can't get this working

                            Edit: I've realised that the kernel wasn't being compiled correctly which was causing it not to include the driver. Hopefully once I've managed to build a stable kernel it should now work.

                            Hi,

                            I'm trying to get the same touchscreen working on a similar device. Details as below:

                            Touchscreen: Iiyama T2735MSC-B1
                            Panel: 3M 3M MultiTouch USB controller (Vendor=0596 ProdID=053F Rev= 1.06)
                            MiniPC: JUSTOP K10A (mk802iv with ap6210)
                            Kernel: phjanderson's kernel (https://github.com/phjanderson/Kernel-3188) using the marvin build tool
                            Patches: 3M provided patches from http://solutions.3m.com/wps/portal/3...pport/Support/ which look identical to above plus change in above post to usbtouchscreen.c that 3M doesn't include
                            Base ROM: JUSTOP provided ROM for K10A (http://forums.justop.com/topic8323.html)
                            Kitchen: RK3XXX mod tool from http://www.rockchipfirmware.com/developer-tools

                            Kernel is configured with multitouch support, and all the USB multitouch drivers.

                            When I boot, the touchscreen only really response to input with four or more fingers on the screen. Four fingers illuminates a circle where the mouse pointer is, five fingers does a touch. There seems to be no way to move the pointer, and if you do a five-finger touch the whole device starts opening all sorts of things at random.

                            Running evtest, I'm getting all sorts of weird output. I've attached a sample (
                            evtest.txt.zip) based on drawing a large 'Z' on the screen with one finger. For example, the value of ABS_MT_POSITION_X seems to indicate the length of time the screen has been touched for!

                            Any ideas much appreciated.

                            Last edited by indigo; 03 April 2014, 07:49.

                            Comment


                              #15
                              Originally posted by indigo View Post
                              Edit: I've realised that the kernel wasn't being compiled correctly which was causing it not to include the driver. Hopefully once I've managed to build a stable kernel it should now work.


                              I hope you got it working by now. Since I have the same screen, I am pretty sure it should work on Android with 10-touch capability. I assume the driver was not automatically loaded or not included?

                              When running 'make menuconfig', the following options for the USB driver are possible:
                              • <M> => include the driver as a separate module (you may need to load it a Bob stated in his contribution), you can check proper loading with 'lsmod' when the screen is attached
                              • <*> => no separate module, the driver will be included in the kernel image (which is what I did)

                              I would recommend the last option if you are sure you need your touchscreen in all circumstances. You avoid problems in case the driver does not get loaded automatically.

                              If you would still encounter problems, attach your modifications and kernel config to a post. The event behavior you documented indicates that the wrong driver is interpreting your screen.

                              Arro.

                              Comment

                              Working...
                              X