Okay, to follow up with modifying the kernel... It works, mostly. Let me explain:
So using the ArmTvTech's tutorial gave me the cross compile environment I needed, I am running all this in a VirtualBox machine running Ubuntu 12.04 LTS that is hosted on a Win7 machine with a quad core and 8GB memory. I dedicated 2 GB of memory to the VirtualBox. Not that it matters, but the whole setup has taken me 5 months to figure out. Very frustrating, but now I got it setup. I will do a complete tutorial if someone wants me too. Anyway, I digress...
So I added the following diff to the kernel code before compiling:
Code:
--- hid-input.c 2011-11-28 18:27:46.237516103 +0100
+++ hid-input.c.ori 2011-11-11 11:45:38.000000000 +0100
@@ -782,18 +782,6 @@
if (usage->type == EV_KEY && !!test_bit(usage->code, input->key) !=
value)
input_event(input, EV_MSC, MSC_SCAN, usage->hid);
-//+RDG: patch for eGalax touchscreen: swap X and Y, invert X
direction
-if (usage->type == EV_ABS)
-{
- if (usage->hid == HID_GD_X) {
- usage->code = 1; // vs 0 (X becomes Y)
- value = 4096 - value;
- } else if (usage->hid == HID_GD_Y) {
- usage->code = 0; // vs 1 (Y becomes X)
- }
-//printk("RDG: hidinput_hid_event: type = %d, code = %d, value = %d
(hid = 0x%x)\n", usage->type, usage->code, value, usage->hid);
-}
-//-RDG
input_event(input, usage->type, usage->code, value);
if ((field->flags & HID_MAIN_ITEM_RELATIVE) && (usage->type ==
EV_KEY))
I actually don't know how to use the diff or patch commands, and for fear of messing the code up, I just found the input-hid.c file and made the changes manually that looked like the difference. Which worked.
I compiled successfully (again, follow the ArmTvTech's instructions and while setting up the configuration in the menu, I made sure I went into the input drivers section and selected all the eGalax drivers to be included), and was able to flash the new kernel I build by replacing the "uncompressed_kernel.img" that I built with the "kernel.img" file that came with the finless 1.6 zip archive (just renamed it and put it in place of the other file).
The problem I then had was after flashing the device, I could not get it back into flash mode. I tried everything that the ArmTvTech tutorial said, but for the life of me, the driver would not work. I'd turn on USB mode in the Android USB settings, then I'd go into Developer options in settings and uncheck the "USB debugging" to try to get it the switch and the driver would not work!. So I prayed, and the inspiration just poured into my brain...
Duh, all you need to do to get the device into flash mode is to (first off make sure you are rooted, then if you are) open your favorite terminal on the device. (My favorite is "Better Terminal Emulator Pro" with bash as the default shell.) then type in:
That's it! That rebooted my UG802 into flash mode, I was then able to flash the device with the new kernel, and the added code fixed my touchscreen x-y coordinates.
I then, as a final step, I needed to add my idc file to /system/urs/idc directory on my device. The file is named "Vendor_0eef_Product_0001.idc".
Here is the contents of the file:
Code:
# Copyright (C) 2010 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# Emulator keyboard configuration file #1.
#
touch.deviceType = touchScreen
touch.orientationAware = 1
device.internal = 1
keyboard.layout = qwerty
keyboard.characterMap = qwerty2
keyboard.orientationAware = 1
keyboard.builtIn = 1
cursor.mode = navigation
cursor.orientationAware = 1
After changing this file you must reboot the device. I just do it in the terminal app:
The only issue I have now is that the cursor is still on the screen while touching it, and the input point is slightly off to the right of where my finger is actually touching the screen.
Does anyone know how to add calibration coordinates to the idc file? Is that possible? I've looked everywhere and cannot find any real comprehensive definition of the idc file. There are some small example files hosted on Google, but that's a joke. Thanks for any help in helping me understanding the idc file a bit more.