[PATCH] This is my first commit
From: kevin --- gtserio.c | 188 ++ 1 file changed, 188 insertions(+) create mode 100755 gtserio.c diff --git a/gtserio.c b/gtserio.c new file mode 100755 index 000..24f1e00 --- /dev/null +++ b/gtserio.c @@ -0,0 +1,188 @@ +/* + * gtserio.c - Create an input/output character device for GeneralTouch serial screen + */ +#include +#include +#include +#include +#include +#include +#include +//#include + +#define MAJOR_NUM 100 +#define MAJOR_MIN 0 +#define SUCCESS0 +#define DEVICE_NAME"general_touch_serial" +#define BUF_LEN80 +MODULE_AUTHOR("GeneralTouch "); +MODULE_DESCRIPTION(DEVICE_NAME); +MODULE_LICENSE("GPL"); +static int Device_Open = 0; +struct input_dev *devq; +char Message[BUF_LEN]; +dev_t gts_t; +unsigned char val[10]; +int gtsdata[4]; +unsigned long min_x = 0; +unsigned long max_x = 32767; +unsigned long min_y = 0; +unsigned long max_y = 32767; + +char *Message_Ptr; +struct class *gts_class; + +static int device_open(struct inode *inode, struct file *file) +{ + printk("GTS device_open(%p)\n", file); + +#ifdef DEBUG + printk("device_open(%p)\n", file); +#endif + + /* +* We don't want to talk to two processes at the same time +*/ + if (Device_Open) + return -EBUSY; + + Device_Open++; + /* +* Initialize the message +*/ + Message_Ptr = Message; + return SUCCESS; +} + +static int device_release(struct inode *inode, struct file *file) +{ +#ifdef DEBUG + printk("device_release(%p,%p)\n", inode, file); +#endif + + /* +* We're now ready for our next caller +*/ + Device_Open--; + + module_put(THIS_MODULE); + return SUCCESS; +} + +/* + * This function is called whenever a process which has already opened the + * device file attempts to read from it. + */ +static ssize_t device_read(struct file *file, + char __user * buffer, size_t length, loff_t * offset) +{ + + return 0; +} + +static ssize_t +device_write(struct file *file, +const char __user * buffer, size_t length, loff_t * offset) +{ +#ifdef DEBUG + printk("device_write(%p,%s,%d)", file, buffer, length); +#endif + + if (copy_from_user(, buffer, length)) { + length = -EFAULT; + } + + printk("val[3] = %x,val[4] = %x\nval[5] = %x,val[6] = %x\n", val[3], + val[4], val[5], val[6]); + gtsdata[0] = val[2]; + gtsdata[1] = (val[4] << 8) | (val[3]); + gtsdata[2] = (val[6] << 8) | (val[5]); + gtsdata[3] = val[9]; + printk("gtsdata[1] = %x\ngtsdata[2] = %x\n", gtsdata[1], gtsdata[2]); + input_report_abs(devq, ABS_X, gtsdata[1]); + input_report_abs(devq, ABS_Y, gtsdata[2]); + if (gtsdata[0] == 0x81) { + + input_report_key(devq, BTN_TOUCH, 1); + input_report_abs(devq, ABS_PRESSURE, 1); + input_sync(devq); + } + if (gtsdata[0] == 0x84) { + input_report_key(devq, BTN_TOUCH, 0); + input_report_abs(devq, ABS_PRESSURE, 0); + input_sync(devq); + } + input_sync(devq); + + return length; +} + +struct file_operations Fops = { + .read = device_read, + .write = device_write, + .open = device_open, + .release = device_release, /* a.k.a. close */ +}; + +/* + * Initialize the module - Register the character device + */ +static int __init gts_init(void) +{ + int ret_val; + struct input_dev *gts_dev; + int err1; + gts_t = MKDEV(MAJOR_NUM, MAJOR_MIN); + + gts_class = class_create(THIS_MODULE, "gts_class"); + device_create(gts_class, NULL, gts_t, NULL, DEVICE_NAME); + ret_val = register_chrdev(MAJOR_NUM, DEVICE_NAME, ); + + if (ret_val < 0) { + printk("%s failed with %d\n", + "Sorry, registering the character device ", ret_val); + return ret_val; + } + + gts_dev = input_allocate_device(); + if (!gts_dev) { + err1 = -ENOMEM; + goto fail1; + } + gts_dev->name = "GeneralTouch Serial TouchScreen"; + gts_dev->phys = "generaltouch/input0"; + gts_dev->id.bustype = BUS_RS232; + gts_dev->id.vendor = (int)("GT_SERIAL"); + gts_dev->id.product = (int)("GT_SERIAL"); + gts_dev->id.version = 0x0100; + gts_dev->evbit[0] = + BIT_MASK(EV_SYN) | BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS); + gts_dev->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH); + + input_set_abs_params(gts_dev, ABS_X, min_x, max_x, 0, 0); + input_set_abs_params(gts_dev, ABS_Y, min_y, max_y, 0, 0); + + err1 = input_register_device(gts_dev); + devq = gts_dev; +fail1: input_free_device(gts_dev); + return err1; +} + +static void __exit
[PATCH] This is my first commit
From: kevin hnnne...@gmail.com --- gtserio.c | 188 ++ 1 file changed, 188 insertions(+) create mode 100755 gtserio.c diff --git a/gtserio.c b/gtserio.c new file mode 100755 index 000..24f1e00 --- /dev/null +++ b/gtserio.c @@ -0,0 +1,188 @@ +/* + * gtserio.c - Create an input/output character device for GeneralTouch serial screen + */ +#include linux/kernel.h +#include linux/module.h +#include linux/fs.h +#include asm/uaccess.h +#include linux/device.h +#include linux/input.h +#include linux/kd.h +//#include linux/ioctl.h + +#define MAJOR_NUM 100 +#define MAJOR_MIN 0 +#define SUCCESS0 +#define DEVICE_NAMEgeneral_touch_serial +#define BUF_LEN80 +MODULE_AUTHOR(GeneralTouch supp...@generaltouch.com); +MODULE_DESCRIPTION(DEVICE_NAME); +MODULE_LICENSE(GPL); +static int Device_Open = 0; +struct input_dev *devq; +char Message[BUF_LEN]; +dev_t gts_t; +unsigned char val[10]; +int gtsdata[4]; +unsigned long min_x = 0; +unsigned long max_x = 32767; +unsigned long min_y = 0; +unsigned long max_y = 32767; + +char *Message_Ptr; +struct class *gts_class; + +static int device_open(struct inode *inode, struct file *file) +{ + printk(GTS device_open(%p)\n, file); + +#ifdef DEBUG + printk(device_open(%p)\n, file); +#endif + + /* +* We don't want to talk to two processes at the same time +*/ + if (Device_Open) + return -EBUSY; + + Device_Open++; + /* +* Initialize the message +*/ + Message_Ptr = Message; + return SUCCESS; +} + +static int device_release(struct inode *inode, struct file *file) +{ +#ifdef DEBUG + printk(device_release(%p,%p)\n, inode, file); +#endif + + /* +* We're now ready for our next caller +*/ + Device_Open--; + + module_put(THIS_MODULE); + return SUCCESS; +} + +/* + * This function is called whenever a process which has already opened the + * device file attempts to read from it. + */ +static ssize_t device_read(struct file *file, + char __user * buffer, size_t length, loff_t * offset) +{ + + return 0; +} + +static ssize_t +device_write(struct file *file, +const char __user * buffer, size_t length, loff_t * offset) +{ +#ifdef DEBUG + printk(device_write(%p,%s,%d), file, buffer, length); +#endif + + if (copy_from_user(val, buffer, length)) { + length = -EFAULT; + } + + printk(val[3] = %x,val[4] = %x\nval[5] = %x,val[6] = %x\n, val[3], + val[4], val[5], val[6]); + gtsdata[0] = val[2]; + gtsdata[1] = (val[4] 8) | (val[3]); + gtsdata[2] = (val[6] 8) | (val[5]); + gtsdata[3] = val[9]; + printk(gtsdata[1] = %x\ngtsdata[2] = %x\n, gtsdata[1], gtsdata[2]); + input_report_abs(devq, ABS_X, gtsdata[1]); + input_report_abs(devq, ABS_Y, gtsdata[2]); + if (gtsdata[0] == 0x81) { + + input_report_key(devq, BTN_TOUCH, 1); + input_report_abs(devq, ABS_PRESSURE, 1); + input_sync(devq); + } + if (gtsdata[0] == 0x84) { + input_report_key(devq, BTN_TOUCH, 0); + input_report_abs(devq, ABS_PRESSURE, 0); + input_sync(devq); + } + input_sync(devq); + + return length; +} + +struct file_operations Fops = { + .read = device_read, + .write = device_write, + .open = device_open, + .release = device_release, /* a.k.a. close */ +}; + +/* + * Initialize the module - Register the character device + */ +static int __init gts_init(void) +{ + int ret_val; + struct input_dev *gts_dev; + int err1; + gts_t = MKDEV(MAJOR_NUM, MAJOR_MIN); + + gts_class = class_create(THIS_MODULE, gts_class); + device_create(gts_class, NULL, gts_t, NULL, DEVICE_NAME); + ret_val = register_chrdev(MAJOR_NUM, DEVICE_NAME, Fops); + + if (ret_val 0) { + printk(%s failed with %d\n, + Sorry, registering the character device , ret_val); + return ret_val; + } + + gts_dev = input_allocate_device(); + if (!gts_dev) { + err1 = -ENOMEM; + goto fail1; + } + gts_dev-name = GeneralTouch Serial TouchScreen; + gts_dev-phys = generaltouch/input0; + gts_dev-id.bustype = BUS_RS232; + gts_dev-id.vendor = (int)(GT_SERIAL); + gts_dev-id.product = (int)(GT_SERIAL); + gts_dev-id.version = 0x0100; + gts_dev-evbit[0] = + BIT_MASK(EV_SYN) | BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS); + gts_dev-keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH); + + input_set_abs_params(gts_dev, ABS_X, min_x, max_x, 0, 0); + input_set_abs_params(gts_dev, ABS_Y, min_y, max_y, 0, 0); + + err1 = input_register_device(gts_dev); +
[PATCH] This is my first commit
From: kevin --- gtserio.c | 188 ++ 1 file changed, 188 insertions(+) create mode 100755 gtserio.c diff --git a/gtserio.c b/gtserio.c new file mode 100755 index 000..24f1e00 --- /dev/null +++ b/gtserio.c @@ -0,0 +1,188 @@ +/* + * gtserio.c - Create an input/output character device for GeneralTouch serial screen + */ +#include +#include +#include +#include +#include +#include +#include +//#include + +#define MAJOR_NUM 100 +#define MAJOR_MIN 0 +#define SUCCESS0 +#define DEVICE_NAME"general_touch_serial" +#define BUF_LEN80 +MODULE_AUTHOR("GeneralTouch "); +MODULE_DESCRIPTION(DEVICE_NAME); +MODULE_LICENSE("GPL"); +static int Device_Open = 0; +struct input_dev *devq; +char Message[BUF_LEN]; +dev_t gts_t; +unsigned char val[10]; +int gtsdata[4]; +unsigned long min_x = 0; +unsigned long max_x = 32767; +unsigned long min_y = 0; +unsigned long max_y = 32767; + +char *Message_Ptr; +struct class *gts_class; + +static int device_open(struct inode *inode, struct file *file) +{ + printk("GTS device_open(%p)\n", file); + +#ifdef DEBUG + printk("device_open(%p)\n", file); +#endif + + /* +* We don't want to talk to two processes at the same time +*/ + if (Device_Open) + return -EBUSY; + + Device_Open++; + /* +* Initialize the message +*/ + Message_Ptr = Message; + return SUCCESS; +} + +static int device_release(struct inode *inode, struct file *file) +{ +#ifdef DEBUG + printk("device_release(%p,%p)\n", inode, file); +#endif + + /* +* We're now ready for our next caller +*/ + Device_Open--; + + module_put(THIS_MODULE); + return SUCCESS; +} + +/* + * This function is called whenever a process which has already opened the + * device file attempts to read from it. + */ +static ssize_t device_read(struct file *file, + char __user * buffer, size_t length, loff_t * offset) +{ + + return 0; +} + +static ssize_t +device_write(struct file *file, +const char __user * buffer, size_t length, loff_t * offset) +{ +#ifdef DEBUG + printk("device_write(%p,%s,%d)", file, buffer, length); +#endif + + if (copy_from_user(, buffer, length)) { + length = -EFAULT; + } + + printk("val[3] = %x,val[4] = %x\nval[5] = %x,val[6] = %x\n", val[3], + val[4], val[5], val[6]); + gtsdata[0] = val[2]; + gtsdata[1] = (val[4] << 8) | (val[3]); + gtsdata[2] = (val[6] << 8) | (val[5]); + gtsdata[3] = val[9]; + printk("gtsdata[1] = %x\ngtsdata[2] = %x\n", gtsdata[1], gtsdata[2]); + input_report_abs(devq, ABS_X, gtsdata[1]); + input_report_abs(devq, ABS_Y, gtsdata[2]); + if (gtsdata[0] == 0x81) { + + input_report_key(devq, BTN_TOUCH, 1); + input_report_abs(devq, ABS_PRESSURE, 1); + input_sync(devq); + } + if (gtsdata[0] == 0x84) { + input_report_key(devq, BTN_TOUCH, 0); + input_report_abs(devq, ABS_PRESSURE, 0); + input_sync(devq); + } + input_sync(devq); + + return length; +} + +struct file_operations Fops = { + .read = device_read, + .write = device_write, + .open = device_open, + .release = device_release, /* a.k.a. close */ +}; + +/* + * Initialize the module - Register the character device + */ +static int __init gts_init(void) +{ + int ret_val; + struct input_dev *gts_dev; + int err1; + gts_t = MKDEV(MAJOR_NUM, MAJOR_MIN); + + gts_class = class_create(THIS_MODULE, "gts_class"); + device_create(gts_class, NULL, gts_t, NULL, DEVICE_NAME); + ret_val = register_chrdev(MAJOR_NUM, DEVICE_NAME, ); + + if (ret_val < 0) { + printk("%s failed with %d\n", + "Sorry, registering the character device ", ret_val); + return ret_val; + } + + gts_dev = input_allocate_device(); + if (!gts_dev) { + err1 = -ENOMEM; + goto fail1; + } + gts_dev->name = "GeneralTouch Serial TouchScreen"; + gts_dev->phys = "generaltouch/input0"; + gts_dev->id.bustype = BUS_RS232; + gts_dev->id.vendor = (int)("GT_SERIAL"); + gts_dev->id.product = (int)("GT_SERIAL"); + gts_dev->id.version = 0x0100; + gts_dev->evbit[0] = + BIT_MASK(EV_SYN) | BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS); + gts_dev->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH); + + input_set_abs_params(gts_dev, ABS_X, min_x, max_x, 0, 0); + input_set_abs_params(gts_dev, ABS_Y, min_y, max_y, 0, 0); + + err1 = input_register_device(gts_dev); + devq = gts_dev; +fail1: input_free_device(gts_dev); + return err1; +} + +static void __exit
[PATCH] This is my first commit
From: kevin hnnne...@gmail.com --- gtserio.c | 188 ++ 1 file changed, 188 insertions(+) create mode 100755 gtserio.c diff --git a/gtserio.c b/gtserio.c new file mode 100755 index 000..24f1e00 --- /dev/null +++ b/gtserio.c @@ -0,0 +1,188 @@ +/* + * gtserio.c - Create an input/output character device for GeneralTouch serial screen + */ +#include linux/kernel.h +#include linux/module.h +#include linux/fs.h +#include asm/uaccess.h +#include linux/device.h +#include linux/input.h +#include linux/kd.h +//#include linux/ioctl.h + +#define MAJOR_NUM 100 +#define MAJOR_MIN 0 +#define SUCCESS0 +#define DEVICE_NAMEgeneral_touch_serial +#define BUF_LEN80 +MODULE_AUTHOR(GeneralTouch supp...@generaltouch.com); +MODULE_DESCRIPTION(DEVICE_NAME); +MODULE_LICENSE(GPL); +static int Device_Open = 0; +struct input_dev *devq; +char Message[BUF_LEN]; +dev_t gts_t; +unsigned char val[10]; +int gtsdata[4]; +unsigned long min_x = 0; +unsigned long max_x = 32767; +unsigned long min_y = 0; +unsigned long max_y = 32767; + +char *Message_Ptr; +struct class *gts_class; + +static int device_open(struct inode *inode, struct file *file) +{ + printk(GTS device_open(%p)\n, file); + +#ifdef DEBUG + printk(device_open(%p)\n, file); +#endif + + /* +* We don't want to talk to two processes at the same time +*/ + if (Device_Open) + return -EBUSY; + + Device_Open++; + /* +* Initialize the message +*/ + Message_Ptr = Message; + return SUCCESS; +} + +static int device_release(struct inode *inode, struct file *file) +{ +#ifdef DEBUG + printk(device_release(%p,%p)\n, inode, file); +#endif + + /* +* We're now ready for our next caller +*/ + Device_Open--; + + module_put(THIS_MODULE); + return SUCCESS; +} + +/* + * This function is called whenever a process which has already opened the + * device file attempts to read from it. + */ +static ssize_t device_read(struct file *file, + char __user * buffer, size_t length, loff_t * offset) +{ + + return 0; +} + +static ssize_t +device_write(struct file *file, +const char __user * buffer, size_t length, loff_t * offset) +{ +#ifdef DEBUG + printk(device_write(%p,%s,%d), file, buffer, length); +#endif + + if (copy_from_user(val, buffer, length)) { + length = -EFAULT; + } + + printk(val[3] = %x,val[4] = %x\nval[5] = %x,val[6] = %x\n, val[3], + val[4], val[5], val[6]); + gtsdata[0] = val[2]; + gtsdata[1] = (val[4] 8) | (val[3]); + gtsdata[2] = (val[6] 8) | (val[5]); + gtsdata[3] = val[9]; + printk(gtsdata[1] = %x\ngtsdata[2] = %x\n, gtsdata[1], gtsdata[2]); + input_report_abs(devq, ABS_X, gtsdata[1]); + input_report_abs(devq, ABS_Y, gtsdata[2]); + if (gtsdata[0] == 0x81) { + + input_report_key(devq, BTN_TOUCH, 1); + input_report_abs(devq, ABS_PRESSURE, 1); + input_sync(devq); + } + if (gtsdata[0] == 0x84) { + input_report_key(devq, BTN_TOUCH, 0); + input_report_abs(devq, ABS_PRESSURE, 0); + input_sync(devq); + } + input_sync(devq); + + return length; +} + +struct file_operations Fops = { + .read = device_read, + .write = device_write, + .open = device_open, + .release = device_release, /* a.k.a. close */ +}; + +/* + * Initialize the module - Register the character device + */ +static int __init gts_init(void) +{ + int ret_val; + struct input_dev *gts_dev; + int err1; + gts_t = MKDEV(MAJOR_NUM, MAJOR_MIN); + + gts_class = class_create(THIS_MODULE, gts_class); + device_create(gts_class, NULL, gts_t, NULL, DEVICE_NAME); + ret_val = register_chrdev(MAJOR_NUM, DEVICE_NAME, Fops); + + if (ret_val 0) { + printk(%s failed with %d\n, + Sorry, registering the character device , ret_val); + return ret_val; + } + + gts_dev = input_allocate_device(); + if (!gts_dev) { + err1 = -ENOMEM; + goto fail1; + } + gts_dev-name = GeneralTouch Serial TouchScreen; + gts_dev-phys = generaltouch/input0; + gts_dev-id.bustype = BUS_RS232; + gts_dev-id.vendor = (int)(GT_SERIAL); + gts_dev-id.product = (int)(GT_SERIAL); + gts_dev-id.version = 0x0100; + gts_dev-evbit[0] = + BIT_MASK(EV_SYN) | BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS); + gts_dev-keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH); + + input_set_abs_params(gts_dev, ABS_X, min_x, max_x, 0, 0); + input_set_abs_params(gts_dev, ABS_Y, min_y, max_y, 0, 0); + + err1 = input_register_device(gts_dev); +