linux-input.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] Add support for the egalax serial touchscreen driver
@ 2015-12-15  9:40 Böszörményi Zoltán
  0 siblings, 0 replies; 4+ messages in thread
From: Böszörményi Zoltán @ 2015-12-15  9:40 UTC (permalink / raw)
  To: Vojtech Pavlik
  Cc: Böszörményi Zoltán, linuxconsole-dev,
	linux-input

From: Böszörményi Zoltán <zboszor@pr.hu>

Add inputattach support for the egalax serial touchscreen driver.

Signed-off-by: Böszörményi Zoltán <zboszor@pr.hu>

---
 utils/inputattach.c | 72 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 72 insertions(+)

diff --git a/utils/inputattach.c b/utils/inputattach.c
index bdaafa3..720a0b5 100644
--- a/utils/inputattach.c
+++ b/utils/inputattach.c
@@ -615,20 +615,82 @@ static int wacom_iv_init(int fd, unsigned long *id, unsigned long *extra)
 	if (write(fd, WACOM_IV_RESET, WACOM_IV_RESET_LEN) != WACOM_IV_RESET_LEN)
 		return -1;
 	usleep(75 * 1000);
 	if (write(fd, WACOM_IV_STOP, WACOM_IV_STOP_LEN) != WACOM_IV_STOP_LEN)
 		return -1;
 	usleep(30 * 1000);
 
 	return 0;
 }
 
+static int check_egalax_response(int fd, unsigned char *command, int sz, unsigned char *response) {
+	int pos = 0;
+	int error = 0;
+	int rest_length;
+
+	if (write(fd, command, sz) != sz)
+		return -1;
+
+	for (pos = 0; pos < 3; pos++) {
+		if (readchar(fd, &response[pos], 100)) {
+			error = 1;
+			break;
+		}
+	}
+
+	if (error)
+		return -1;
+
+	rest_length = response[1] - 1;
+
+	for (; rest_length; rest_length--, pos++) {
+		if (readchar(fd, &response[pos], 100)) {
+			error = 1;
+			break;
+		}
+	}
+
+	if (error)
+		return -1;
+
+	if (response[1] >= command[1] &&
+		response[0] == command[0] &&
+		response[2] == command[2])
+		return 0;
+
+	return -1;
+}
+
+static int egalax_init(int fd, unsigned long *id, unsigned long *extra) {
+	unsigned char packet_alive_query[3] = { 0x0a, 0x01, 'A' };
+	unsigned char packet_fw_ver[3] = { 0x0a, 0x01, 'D' };
+	unsigned char packet_ctrl_type[3] = { 0x0a, 0x01, 'E' };
+	unsigned char response[128];
+
+	if (check_egalax_response(fd, packet_alive_query, sizeof(packet_alive_query), response))
+		return -1;
+
+	if (check_egalax_response(fd, packet_fw_ver, sizeof(packet_fw_ver), response))
+		return -1;
+
+	response[(unsigned char)response[1] + 2] = '\0';
+	printf("EETI eGalaxTouch firmware: %s\n", &response[3]);
+
+	if (check_egalax_response(fd, packet_ctrl_type, sizeof(packet_ctrl_type), response))
+		return -1;
+
+	response[(unsigned char)response[1] + 2] = '\0';
+	printf("EETI eGalaxTouch controller type: %s\n", &response[3]);
+
+	return 0;
+}
+
 struct input_types {
 	const char *name;
 	const char *name2;
 	const char *desc;
 	int speed;
 	int flags;
 	unsigned long type;
 	unsigned long id;
 	unsigned long extra;
 	int flush;
@@ -700,32 +762,42 @@ static struct input_types input_types[] = {
 	SERIO_STOWAWAY,		0x00,	0x00,	1,	NULL },
 { "--ps2serkbd",	"-ps2ser",	"PS/2 via serial keyboard",
 	B1200, CS8,
 	SERIO_PS2SER,		0x00,	0x00,	1,	NULL },
 { "--twiddler",		"-twid",	"Handykey Twiddler chording keyboard",
 	B2400, CS8,
 	SERIO_TWIDKBD,		0x00,	0x00,	0,	twiddler_init },
 { "--twiddler-joy",	"-twidjoy",	"Handykey Twiddler used as a joystick",
 	B2400, CS8,
 	SERIO_TWIDJOY,		0x00,	0x00,	0,	twiddler_init },
+#ifdef SERIO_EGALAX
+{ "--eetiegalax",	"-eeti",	"EETI eGalaxTouch",
+	B9600, CS8,
+	SERIO_EGALAX,		0x00,	0x00,	0,	egalax_init },
+#endif
 { "--elotouch",		"-elo",		"ELO touchscreen, 10-byte mode",
 	B9600, CS8,
 	SERIO_ELO,		0x00,	0x00,	0,	NULL },
 { "--elo4002",		"-elo6b",	"ELO touchscreen, 6-byte mode",
 	B9600, CS8 | CRTSCTS,
 	SERIO_ELO,		0x01,	0x00,	0,	NULL },
 { "--elo271-140",	"-elo4b",	"ELO touchscreen, 4-byte mode",
 	B9600, CS8 | CRTSCTS,
 	SERIO_ELO,		0x02,	0x00,	0,	NULL },
 { "--elo261-280",	"-elo3b",	"ELO Touchscreen, 3-byte mode",
 	B9600, CS8 | CRTSCTS,
 	SERIO_ELO,		0x03,	0x00,	0,	NULL },
+#ifdef SERIO_HAMPSHIRE
+{ "--hampshire",   "-ham",         "Hampshire touchscreen",
+	B9600, CS8,
+	SERIO_HAMPSHIRE,	0x00,   0x00,   0,  NULL },
+#endif
 { "--mtouch",		"-mtouch",	"MicroTouch (3M) touchscreen",
 	B9600, CS8 | CRTSCTS,
 	SERIO_MICROTOUCH,	0x00,	0x00,	0,	NULL },
 #ifdef SERIO_TSC40
 { "--tsc",		"-tsc",		"TSC-10/25/40 serial touchscreen",
 	B9600, CS8,
 	SERIO_TSC40,		0x00,	0x00,	0,	tsc40_init },
 #endif
 { "--touchit213",	"-t213",	"Sahara Touch-iT213 Tablet PC",
 	B9600, CS8,
-- 
2.5.0


------------------------------------------------------------------------------
_______________________________________________
Linuxconsole-dev mailing list
Linuxconsole-dev@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linuxconsole-dev

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH] Add support for the egalax serial touchscreen driver
@ 2015-12-15 11:24 Böszörményi Zoltán
  2015-12-15 19:06 ` Stephen Kitt
  0 siblings, 1 reply; 4+ messages in thread
From: Böszörményi Zoltán @ 2015-12-15 11:24 UTC (permalink / raw)
  To: Vojtech Pavlik
  Cc: linux-input, linuxconsole-dev,
	Böszörményi Zoltán

From: Böszörményi Zoltán <zboszor@pr.hu>

Add inputattach support for the egalax serial touchscreen driver.

Signed-off-by: Böszörményi Zoltán <zboszor@pr.hu>

---
 utils/inputattach.c | 72 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 72 insertions(+)

diff --git a/utils/inputattach.c b/utils/inputattach.c
index bdaafa3..720a0b5 100644
--- a/utils/inputattach.c
+++ b/utils/inputattach.c
@@ -615,20 +615,82 @@ static int wacom_iv_init(int fd, unsigned long *id, unsigned long *extra)
 	if (write(fd, WACOM_IV_RESET, WACOM_IV_RESET_LEN) != WACOM_IV_RESET_LEN)
 		return -1;
 	usleep(75 * 1000);
 	if (write(fd, WACOM_IV_STOP, WACOM_IV_STOP_LEN) != WACOM_IV_STOP_LEN)
 		return -1;
 	usleep(30 * 1000);
 
 	return 0;
 }
 
+static int check_egalax_response(int fd, unsigned char *command, int sz, unsigned char *response) {
+	int pos = 0;
+	int error = 0;
+	int rest_length;
+
+	if (write(fd, command, sz) != sz)
+		return -1;
+
+	for (pos = 0; pos < 3; pos++) {
+		if (readchar(fd, &response[pos], 100)) {
+			error = 1;
+			break;
+		}
+	}
+
+	if (error)
+		return -1;
+
+	rest_length = response[1] - 1;
+
+	for (; rest_length; rest_length--, pos++) {
+		if (readchar(fd, &response[pos], 100)) {
+			error = 1;
+			break;
+		}
+	}
+
+	if (error)
+		return -1;
+
+	if (response[1] >= command[1] &&
+		response[0] == command[0] &&
+		response[2] == command[2])
+		return 0;
+
+	return -1;
+}
+
+static int egalax_init(int fd, unsigned long *id, unsigned long *extra) {
+	unsigned char packet_alive_query[3] = { 0x0a, 0x01, 'A' };
+	unsigned char packet_fw_ver[3] = { 0x0a, 0x01, 'D' };
+	unsigned char packet_ctrl_type[3] = { 0x0a, 0x01, 'E' };
+	unsigned char response[128];
+
+	if (check_egalax_response(fd, packet_alive_query, sizeof(packet_alive_query), response))
+		return -1;
+
+	if (check_egalax_response(fd, packet_fw_ver, sizeof(packet_fw_ver), response))
+		return -1;
+
+	response[(unsigned char)response[1] + 2] = '\0';
+	printf("EETI eGalaxTouch firmware: %s\n", &response[3]);
+
+	if (check_egalax_response(fd, packet_ctrl_type, sizeof(packet_ctrl_type), response))
+		return -1;
+
+	response[(unsigned char)response[1] + 2] = '\0';
+	printf("EETI eGalaxTouch controller type: %s\n", &response[3]);
+
+	return 0;
+}
+
 struct input_types {
 	const char *name;
 	const char *name2;
 	const char *desc;
 	int speed;
 	int flags;
 	unsigned long type;
 	unsigned long id;
 	unsigned long extra;
 	int flush;
@@ -700,32 +762,42 @@ static struct input_types input_types[] = {
 	SERIO_STOWAWAY,		0x00,	0x00,	1,	NULL },
 { "--ps2serkbd",	"-ps2ser",	"PS/2 via serial keyboard",
 	B1200, CS8,
 	SERIO_PS2SER,		0x00,	0x00,	1,	NULL },
 { "--twiddler",		"-twid",	"Handykey Twiddler chording keyboard",
 	B2400, CS8,
 	SERIO_TWIDKBD,		0x00,	0x00,	0,	twiddler_init },
 { "--twiddler-joy",	"-twidjoy",	"Handykey Twiddler used as a joystick",
 	B2400, CS8,
 	SERIO_TWIDJOY,		0x00,	0x00,	0,	twiddler_init },
+#ifdef SERIO_EGALAX
+{ "--eetiegalax",	"-eeti",	"EETI eGalaxTouch",
+	B9600, CS8,
+	SERIO_EGALAX,		0x00,	0x00,	0,	egalax_init },
+#endif
 { "--elotouch",		"-elo",		"ELO touchscreen, 10-byte mode",
 	B9600, CS8,
 	SERIO_ELO,		0x00,	0x00,	0,	NULL },
 { "--elo4002",		"-elo6b",	"ELO touchscreen, 6-byte mode",
 	B9600, CS8 | CRTSCTS,
 	SERIO_ELO,		0x01,	0x00,	0,	NULL },
 { "--elo271-140",	"-elo4b",	"ELO touchscreen, 4-byte mode",
 	B9600, CS8 | CRTSCTS,
 	SERIO_ELO,		0x02,	0x00,	0,	NULL },
 { "--elo261-280",	"-elo3b",	"ELO Touchscreen, 3-byte mode",
 	B9600, CS8 | CRTSCTS,
 	SERIO_ELO,		0x03,	0x00,	0,	NULL },
+#ifdef SERIO_HAMPSHIRE
+{ "--hampshire",   "-ham",         "Hampshire touchscreen",
+	B9600, CS8,
+	SERIO_HAMPSHIRE,	0x00,   0x00,   0,  NULL },
+#endif
 { "--mtouch",		"-mtouch",	"MicroTouch (3M) touchscreen",
 	B9600, CS8 | CRTSCTS,
 	SERIO_MICROTOUCH,	0x00,	0x00,	0,	NULL },
 #ifdef SERIO_TSC40
 { "--tsc",		"-tsc",		"TSC-10/25/40 serial touchscreen",
 	B9600, CS8,
 	SERIO_TSC40,		0x00,	0x00,	0,	tsc40_init },
 #endif
 { "--touchit213",	"-t213",	"Sahara Touch-iT213 Tablet PC",
 	B9600, CS8,
-- 
2.5.0

--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH] Add support for the egalax serial touchscreen driver
  2015-12-15 11:24 [PATCH] Add support for the egalax serial touchscreen driver Böszörményi Zoltán
@ 2015-12-15 19:06 ` Stephen Kitt
  2015-12-15 19:18   ` Boszormenyi Zoltan
  0 siblings, 1 reply; 4+ messages in thread
From: Stephen Kitt @ 2015-12-15 19:06 UTC (permalink / raw)
  To: Böszörményi Zoltán
  Cc: linux-input, linuxconsole-dev, Vojtech Pavlik, tán

Hi,

Thanks for submitting this. I have just a couple of questions...

On Tue, 15 Dec 2015 12:24:32 +0100, Böszörményi Zoltán
<zboszormenyi@sicom.com> wrote:
> +static int egalax_init(int fd, unsigned long *id, unsigned long *extra) {
> +	unsigned char packet_alive_query[3] = { 0x0a, 0x01, 'A' };
> +	unsigned char packet_fw_ver[3] = { 0x0a, 0x01, 'D' };
> +	unsigned char packet_ctrl_type[3] = { 0x0a, 0x01, 'E' };
> +	unsigned char response[128];
> +
> +	if (check_egalax_response(fd, packet_alive_query, sizeof(packet_alive_query), response))
> +		return -1;
> +
> +	if (check_egalax_response(fd, packet_fw_ver, sizeof(packet_fw_ver), response))
> +		return -1;
> +
> +	response[(unsigned char)response[1] + 2] = '\0';
> +	printf("EETI eGalaxTouch firmware: %s\n", &response[3]);

inputattach is generally silent when everything goes well. I can see how this
kind of info would be useful though; would you mind simply commenting the
printf() lines out, and I'll add a verbose mode later on?

> +
> +	if (check_egalax_response(fd, packet_ctrl_type, sizeof(packet_ctrl_type), response))
> +		return -1;
> +
> +	response[(unsigned char)response[1] + 2] = '\0';
> +	printf("EETI eGalaxTouch controller type: %s\n", &response[3]);

As above.

> +#ifdef SERIO_HAMPSHIRE
> +{ "--hampshire",   "-ham",         "Hampshire touchscreen",
> +	B9600, CS8,
> +	SERIO_HAMPSHIRE,	0x00,   0x00,   0,  NULL },
> +#endif

Is this intentional? If so, could you mention it in the commit message?

Thanks,

Stephen

------------------------------------------------------------------------------
_______________________________________________
Linuxconsole-dev mailing list
Linuxconsole-dev@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linuxconsole-dev

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] Add support for the egalax serial touchscreen driver
  2015-12-15 19:06 ` Stephen Kitt
@ 2015-12-15 19:18   ` Boszormenyi Zoltan
  0 siblings, 0 replies; 4+ messages in thread
From: Boszormenyi Zoltan @ 2015-12-15 19:18 UTC (permalink / raw)
  To: Stephen Kitt, Böszörményi Zoltán
  Cc: Vojtech Pavlik, linuxconsole-dev, linux-input

Hi,

2015-12-15 20:06 keltezéssel, Stephen Kitt írta:
> Hi,
>
> Thanks for submitting this. I have just a couple of questions...
>
> On Tue, 15 Dec 2015 12:24:32 +0100, Böszörményi Zoltán
> <zboszormenyi@sicom.com> wrote:
>> +static int egalax_init(int fd, unsigned long *id, unsigned long *extra) {
>> +	unsigned char packet_alive_query[3] = { 0x0a, 0x01, 'A' };
>> +	unsigned char packet_fw_ver[3] = { 0x0a, 0x01, 'D' };
>> +	unsigned char packet_ctrl_type[3] = { 0x0a, 0x01, 'E' };
>> +	unsigned char response[128];
>> +
>> +	if (check_egalax_response(fd, packet_alive_query, sizeof(packet_alive_query), response))
>> +		return -1;
>> +
>> +	if (check_egalax_response(fd, packet_fw_ver, sizeof(packet_fw_ver), response))
>> +		return -1;
>> +
>> +	response[(unsigned char)response[1] + 2] = '\0';
>> +	printf("EETI eGalaxTouch firmware: %s\n", &response[3]);
> inputattach is generally silent when everything goes well. I can see how this
> kind of info would be useful though; would you mind simply commenting the
> printf() lines out, and I'll add a verbose mode later on?

Sure, I'll put it under #ifdef 0.

>
>> +
>> +	if (check_egalax_response(fd, packet_ctrl_type, sizeof(packet_ctrl_type), response))
>> +		return -1;
>> +
>> +	response[(unsigned char)response[1] + 2] = '\0';
>> +	printf("EETI eGalaxTouch controller type: %s\n", &response[3]);
> As above.
>
>> +#ifdef SERIO_HAMPSHIRE
>> +{ "--hampshire",   "-ham",         "Hampshire touchscreen",
>> +	B9600, CS8,
>> +	SERIO_HAMPSHIRE,	0x00,   0x00,   0,  NULL },
>> +#endif
> Is this intentional? If so, could you mention it in the commit message?

Yes, it is intentional. I noticed that the SERIO_HAMPSHIRE support
is also missing from inputattach. I don't currently know if the
Hampshire touchscreen needs an init function or not, so it is a
placeholder at the moment. Also, the SERIO_HAMPSHIRE value is
smaller than SERIO_PS2MULT which is unconditionally enabled,
so maybe it doesn't need the #ifdef SERIO_HAMPSHIRE ... #endif
cover at all. I will mention it in the commit message for the v2 patch,
which I will send tomorrow.

Best regards,
Zoltán Böszörményi

--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2015-12-15 19:19 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-12-15 11:24 [PATCH] Add support for the egalax serial touchscreen driver Böszörményi Zoltán
2015-12-15 19:06 ` Stephen Kitt
2015-12-15 19:18   ` Boszormenyi Zoltan
  -- strict thread matches above, loose matches on Subject: below --
2015-12-15  9:40 Böszörményi Zoltán

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).