Sunday, October 12, 2014

The Magic Touch

The HT231 and my TV stick seems to be born for each other. There is a recessed space in the back of the HT231 monitor for connectors. And it has just enough space for the TV stick. The stick can plug directly into the HDMI port without extension cord and it is secure enough to not disconnect.

I then hook up the USB A/B cable between the monitor and TV stick. Not surprisingly, there is no touch being recognized. I have also heard from previous discussion from freaktab that if I put all 10 fingers (the HT231 is a 10-point multitouch panel). A touch cursor will show up. Indeed. And I can sort of move it around by moving one of my hand. But it jumps around and completely not useable. 

Now it is time for some digging. The freaktab forum has a lot of information scattered around. There is a thread dedicated to touchscreen; however the only success reported so far was those monitors with 2-point multi-touch. I have read the entire thread before I started the project but I am confident that there will eventually be a way to make it work with 10-point multi-touch. Especially since all these new touch monitors are natively supported by Windows 8. There must be some standard which they are all following.

And then, someone reported that with another Android TV box and some custom firmware running kernel 3.10, the touchscreen works automatically. This is a huge encouragement for me.

I have basically 2 options. Try moving to 3.10 kernel (from current 3.0.36+) or try to get touchscreen working with my current 3.0.36+ kernel. The former is a step too big for me. I also recall seeing another interesting thread that is very useful. I decided that I will go making my own kernel.

There are several useful threads related to building kernels. I ended up returning to a thread specific for my TV Stick. Where an experienced forum member who had built custom kernel for the stick. There were reports of working Wi-Fi but Bluetooth does not work.

I decided to just replace my current kernel with the custom kernel. And it worked! Not only Wi-Fi worked. BT also worked! If it was a week ago, that alone would not be too useful for me because my rooted stock firmware is just as good. 

However, I learned about 1 thing. I can also build my own kernel. The member also wrote a thread about beginner's guide to building kernel. Which is perfect for me.

After switching between the 2 threads. I figured out the right source tree and git cloned the source. It didn't took too long to build the kernel. I also found some tool online to extract the kconfig from kernel.img. So I can build a kernel that is as close to the working one as possible. I bring out the flash tool and overwrite just the kernel.img.

And surprisingly, my kernel boots up! I can confirm that my kernel is being used from "About device" page. The Wi-Fi works. But BT does not. Exactly like many has reported. Although with me, the custom kernel works just fine. BT is nice to have but not a deal breaker. I proceed to touchscreen driver.

I see kernel config has several options for touch input and USB touchscreen. I enabled them and build. My stick won't even boot! Complaining No Command. No big deal. I can always revert back. Later I think it was likely because I tried to make certain drivers as loadable modules.

I restart the kernel config and followed the instructions from the thread I mentioned earlier. I carefully created entries for the USB device of my H231, which has Vendor ID of 0457 and Device ID 1057. The only thing not clear was what device type to pick within usbtouchscreen.c since I am using a different touch monitor as the author. I picked one that looks close to my vendor and build my kernel.

When the stick boot up, I immediately notice something different. Although the touchscreen is not working, I see a touch cursor jumping all over the screen. This is a good indication that my stick is now seeing the touchscreen differently. It means I am on the right track.

After some trial and errors, I landed on using the same device type as the author - 3M. Although Hannspree and 3M appears to bare no relationship, it worked! The touchscreen works perfectly! Every point, every corner. My touch is perfectly recognized. My plan is executing exceptionally well. 

I have a Giant Tablet in front of me!



23 comments:

  1. For those interested in doing something similar with a different monitor, here is my kernel patch for your reference:

    http://www.freaktab.com/attachment.php?attachmentid=8427&d=1413479867

    ReplyDelete
  2. hi
    I'm also looking solution for my touchscreen capacitive my big problem 'that not using linux I have big problems in building the kernel
    I have a minix neo 7 and I would use it in the car with a monitor thouch but I stopped on this problem
    and can try your kernel maybe if I'm lucky can 'work
    my touch uses chip dellla goodix precisely gt9113 gtm802 with i2c interface is that usb
    if you can help me I would be very grateful

    ReplyDelete
  3. My kernel can be downloaded here.

    http://www.freaktab.com/attachment.php?attachmentid=9286&d=1418793881

    However, I don't believe it will work because it is specific to my HT231. I don't use a Linux PC either, I just used an Ubuntu VM. And I have only 4GB on my host. 1 to 1.5GB is enough for running the Ubuntu VM.

    If you want to use it in your car, there may be other ways if your car is AppRadio compatible. Check out ARUnchained.

    ReplyDelete
  4. Hi
    i Have MK809II Stick and HT231 Monitor, i did tried to update your kernal and that did not work, creating file in /system also does not do any thing, i have 3.0.6+ kernel, do you know how i can get this monitor working for my stick Please?

    ReplyDelete
  5. What firmware are you running right now? I'm not familiar with the MK809II as it is using RK3066 instead of RK3188. The kernel I built is for RK3188 only. I recommend you get a newer stick as it is at least 2 generations behind and may have problem driving the 1080p panel.

    ReplyDelete
  6. yes i know stick is bit old :) but i have kitkat 4.4.2 with 1080p working on it i am using following firmware.

    what is the model name of your TV Stick model do you have? if nothing works i will get one exactley you have which at least i know it works with this screen.

    Thanks

    ReplyDelete
  7. Firmware Link i am using
    http://www.freaktab.com/showthread.php?14765-Kit-Kat-4-4-2-RK3066-%28Fully-Working%29

    ReplyDelete
  8. I can't find the source for the kernel. If you can find a buildable kernel, you can follow my footstep and build the touch capability into the kernel.

    ReplyDelete
  9. Hi Thanks for looking, i followed you guide and did tried to build 2 kernel form different sources but they hang at boot screen, going to try the omegamoon kernel for RK30XX, i have seen youtube video somebody using same kernal for stick i have and touch screen.

    one question i want to ask how did you pulled the Kconfig from kernel.img, i have looked into my device and there is no config under /proc/config.gz and not sure how to get it from image?

    ReplyDelete
  10. I believe I used the following script:

    https://stuff.mit.edu/afs/sipb/contrib/linux/scripts/extract-ikconfig

    And then it generated the .config file that was used to build kernel. You can refer to the patch I uploaded in first comment for my config.

    ReplyDelete
  11. Hi
    Thanks for your help, i tried ikconfig tool before but was not able to pull any config from ROM, after trying multiple ROMs and different kernel source i manage to get it working, AVION from freaktab provided the working config and now i have working MK809II running 4.4.2 ROM with 1080P, MTK5931 WIFI+BT & Touchscreen HT231 all working with full 10 point touch.

    Thanks again for your help

    ReplyDelete
  12. That's great! I saw your post and the kernel source in the 4.2.2 RK3066 thread. I am happy for you!

    ReplyDelete
  13. Hi,
    I tried your modified kernel on my MK809III and the HT231 touch is not recognized.
    Is there any other step to do in order to make the touch work ?
    Regards

    ReplyDelete
  14. Can you confirm that you are running my kernel using "About ..." within Settings?

    Before using my kernel, were you able to get a pointer by laying down 10 fingers?

    ReplyDelete
  15. Here is the kernel version (looks old) I am getting after flashing your kernel.img :

    3.0.36+
    ant@adminroot-X9DRL-3F-iF #813
    Mon Dec 23 09:24:01 CST 2013

    I am indeed getting a pointer by laying down 10 fingers, but nothing else. :(

    ReplyDelete
  16. That is not my kernel for sure. You should double check your flash procedure to make sure you are using the right kernel.

    ReplyDelete
  17. I flashed kernel.img from the following archive downloaded on freaktab: 8723bs-kernel-ht231.zip using rkflashtool both under OSX and Debian. Is this your kernel ?

    MD5 (kernel.img) = b5ec3f3ec3f4d907217988683f0b58d8

    ReplyDelete
  18. The archive name and MD5 checksum are correct. But here is the signature inside the kernel.img:

    "Linux version 3.0.36+ (mongkok@ubuntu) (gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5) ) #19 SMP PREEMPT Tue Nov 4 20:35:27 PST 2014"

    Make sure you are indeed flashing this kernel into your MK809III.

    ReplyDelete
  19. Still no luck, I try to flash your kernel on a windows machine and now it won't boot anymore...

    Do you know where I could find a full image for the MK809III to revive it ?

    ReplyDelete
  20. There are many flavors of MK809III. Your best bet is head over to freaktab.com forums. You can find stock firmware for just about every flavor. While you are there, you can also identify the flavor and get another custom firmware to play around.

    There are also many reasons of MK809III not booting. I would first try holding the reset when powering up the MK809III and let it try to enter a recovery mode. You will most likely lose all your user data and settings.

    The proper way of flashing a kernel is to first do a backup of your existing firmware. The original partition layout is most important as it ensures you know where the kernel is on your stick and only overwrite the kernel and nothing else.

    ReplyDelete
  21. I did a backup of the built-in kernel but unfortunately not the full firmware.

    I found out that the built-in BT-WiFi chipset is from Mediatek, which I believe is different from yours, so that might be an issue.

    ReplyDelete
  22. In my experience, kernels with incompatible wireless will still boot. You just won't get the wireless. It should allow you to confirm if the touch screen driver works.

    And if you backed up the kernel, you should be able to recover by flashing your old kernel. The question is whether you had successfully flashed the kernel or something else is corrupted.

    ReplyDelete
  23. I was able to revive my MK809III using ncr_mk809III_mtk_0_9 rom.
    However I confirm it does not boot at all with your kernel.
    I guess I will have to find a new MK809III with Realtek chipset or rebuild a kernel myself.

    ReplyDelete