public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* i386 PC Keyboad Patch, for very exotic Keyboads
@ 2000-11-08  9:24 Michael Westermann
  2000-11-08  9:32 ` Michael Westermann
  0 siblings, 1 reply; 2+ messages in thread
From: Michael Westermann @ 2000-11-08  9:24 UTC (permalink / raw)
  To: Linux Kernel mailing list; +Cc: Alan Cox

Hallo,

ich have wrote a Patch, for all the PS2-Keyboards what
use exotic Scancodes and Functions. Teh backgroud is 
that we use Point of Sale Keyboards with Display , Keylock
ans Magnetic Stripe Reader. On Keyboard send the Magnetic-Tracks 
in a Raw Format only as Scacodes. I can't handle this data in the 
user-space with the RAW Mode. The Original Keyboard Driver Can't 
handle this, the stati for Caps and Shift ar all false, after this.
An other Problem ist that the orignal PS/2 Driver can't write data
to the Keyboard for example an Keyboard with an Keylock. I must 
write a Command to the Keyboard, that than replay my the Keylock-
position.

The Idee is that an Driver-module can registrated one 
keyboard-event-extention. with the Funktion. 

register_kbd_ex
unregister_kbd_ex 

This Funktion can tah filtered the Exotic Scanodes. 

I think this Patch  is veriy interst for Keyboard'with additional 
Key-Funktions for example Keys for a  CD-Player. The additional 
Keys can filtered in a Modular-Driver, wich used from the CD-Player.

My patch is written for a 2.2.16 Kernel, i think it is no Probem 
use the Patch for an other  2.2.* kernel, with a litte bit change
for the 2.4.x kernel.

Please give me Comments

Michael Westermann

PS: We have installed over 10 Supermarket with Debian/Linux POS-Systemen ;-) 


 





-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
Please read the FAQ at http://www.tux.org/lkml/

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

* Re: i386 PC Keyboad Patch, for very exotic Keyboads
  2000-11-08  9:24 i386 PC Keyboad Patch, for very exotic Keyboads Michael Westermann
@ 2000-11-08  9:32 ` Michael Westermann
  0 siblings, 0 replies; 2+ messages in thread
From: Michael Westermann @ 2000-11-08  9:32 UTC (permalink / raw)
  To: Linux Kernel mailing list; +Cc: Alan Cox

[-- Attachment #1: Type: text/plain, Size: 256 bytes --]

Hello,


On Wed, Nov 08, 2000 at 10:24:56AM +0100, Michael Westermann wrote:
> Hallo,
> 
> ich have wrote a Patch, for all the PS2-Keyboards what
> use exotic Scancodes and Functions. Teh backgroud is 

Sorry i have the Patch forget. 


Michael Westermann

[-- Attachment #2: pc_keyb.patch.v0.2 --]
[-- Type: text/plain, Size: 5452 bytes --]

--- linux.old/drivers/char/pc_keyb.c	Thu Jul  6 22:21:31 2000
+++ linux/drivers/char/pc_keyb.c	Thu Nov  2 08:15:29 2000
@@ -13,10 +13,12 @@
  * Code fixes to handle mouse ACKs properly.
  * C. Scott Ananian <cananian@alumni.princeton.edu> 1999-01-29.
  *
+ * Include a interface for pc keyboard's with extentions
+ * M.Westermann <mw@microdata-pos.de> Tue, 10 Oct 2000
  */
 
 #include <linux/config.h>
-
+#include <linux/module.h>
 #include <asm/spinlock.h>
 #include <linux/sched.h>
 #include <linux/interrupt.h>
@@ -41,6 +43,9 @@
 
 #include <linux/pc_keyb.h>
 
+EXPORT_SYMBOL(unregister_kbd_ex);
+EXPORT_SYMBOL(register_kbd_ex);
+
 /* Simple translation table for the SysRq keys */
 
 #ifdef CONFIG_MAGIC_SYSRQ
@@ -64,10 +69,9 @@
 static unsigned char handle_kbd_event(void);
 
 /* used only by send_data - set by keyboard_interrupt */
-static volatile unsigned char reply_expected = 0;
-static volatile unsigned char acknowledge = 0;
-static volatile unsigned char resend = 0;
-
+static volatile pc_keyb_t   kbd_ex_mem;    
+static volatile pc_keyb_t * kbd_ex;
+static volatile pc_keyb_t * kbd_store;
 
 #if defined CONFIG_PSMOUSE
 /*
@@ -260,19 +264,19 @@
 
 static int do_acknowledge(unsigned char scancode)
 {
-	if (reply_expected) {
+	if (kbd_ex->reply_expected) {
 	  /* Unfortunately, we must recognise these codes only if we know they
 	   * are known to be valid (i.e., after sending a command), because there
 	   * are some brain-damaged keyboards (yes, FOCUS 9000 again) which have
 	   * keys with such codes :(
 	   */
 		if (scancode == KBD_REPLY_ACK) {
-			acknowledge = 1;
-			reply_expected = 0;
+			kbd_ex->acknowledge = 1;
+			kbd_ex->reply_expected = 0;
 			return 0;
 		} else if (scancode == KBD_REPLY_RESEND) {
-			resend = 1;
-			reply_expected = 0;
+			kbd_ex->resend = 1;
+			kbd_ex->reply_expected = 0;
 			return 0;
 		}
 		/* Should not happen... */
@@ -448,11 +452,16 @@
 #  ifdef CHECK_RECONNECT_SCANCODE
     printk(KERN_INFO "-=db=-: kbd_read_input() : scancode == %d\n",scancode);
 #  endif
+    // printk("scancode = %02x\n",scancode);
 		if (status & KBD_STAT_MOUSE_OBF) {
 			handle_mouse_event(scancode);
 		} else {
-			if (do_acknowledge(scancode))
-				handle_scancode(scancode, !(scancode & 0x80));
+			if (kbd_ex->do_acknowledge(scancode)) {
+			    if (!kbd_ex->kbd_check_event || 
+			            (kbd_ex->kbd_check_event && 
+			                kbd_ex->kbd_check_event(&scancode)))  
+			    handle_scancode(scancode, !(scancode & 0x80));
+			}    
 			mark_bh(KEYBOARD_BH);
 		}
 
@@ -495,14 +504,14 @@
 	do {
 		unsigned long timeout = KBD_TIMEOUT;
 
-		acknowledge = 0; /* Set by interrupt routine on receipt of ACK. */
-		resend = 0;
-		reply_expected = 1;
+		kbd_ex->acknowledge = 0; /* Set by interrupt routine on receipt of ACK. */
+		kbd_ex->resend = 0;
+		kbd_ex->reply_expected = 1;
 		kbd_write_output_w(data);
 		for (;;) {
-			if (acknowledge)
+			if (kbd_ex->acknowledge)
 				return 1;
-			if (resend)
+			if (kbd_ex->resend)
 				break;
 			mdelay(1);
 			if (!--timeout) {
@@ -721,8 +730,66 @@
 	return NULL;
 }
 
+int register_kbd_ex (pc_keyb_t * kb)
+{
+    unsigned long flags;
+
+    save_flags(flags);
+    if (kbd_store)
+       return -1;
+    else {
+	cli();    
+        if (!kb->do_acknowledge)      /* we can ovlerload this function */
+	   kb->do_acknowledge = kbd_ex->do_acknowledge;    
+	kb->kbd_write_command_w = kbd_write_command_w; 
+    	kb->kbd_write_output_w  = kbd_write_output_w;
+    	kb->send_data           = send_data;
+	kb->reply_expected      = kbd_ex->reply_expected;
+        kb->acknowledge         = kbd_ex->acknowledge;
+        kb->resend	        = kbd_ex->resend;
+        kbd_store 	        = kbd_ex;
+	kbd_ex  	        = kb;
+        restore_flags(flags);    
+    }
+    return  0;
+}
+
+int unregister_kbd_ex (pc_keyb_t * kb)
+{
+    unsigned long flags;
+
+    save_flags(flags);
+    if (!kbd_store)
+	return -1;
+    else {
+	cli();
+	kbd_ex    	   	= kbd_store;
+	kbd_store  	   	= NULL;
+	kbd_ex->reply_expected  = kb->reply_expected;
+        kbd_ex->acknowledge     = kb->acknowledge;
+        kbd_ex->resend	   	= kb->resend;
+        restore_flags(flags);	
+    }
+    return 0;	    
+}
+
+void __init kbd_ex_init(void)
+{
+    kbd_ex = &kbd_ex_mem;    		/* later as malloc */
+    kbd_ex->kbd_write_command_w = kbd_write_command_w;
+    kbd_ex->kbd_write_output_w = kbd_write_output_w; 
+    kbd_ex->do_acknowledge = do_acknowledge;
+    kbd_ex->send_data = send_data;
+    kbd_ex->kbd_check_event = NULL;    
+    kbd_ex->reply_expected=0;
+    kbd_ex->acknowledge=0;
+    kbd_ex->resend=0;
+    kbd_store = NULL;
+}
+
 void __init pckbd_init_hw(void)
 {
+	kbd_ex_init();
 	kbd_request_region();
 
 	/* Flush any pending input. */
--- linux.old/include/linux/pc_keyb.h	Mon Aug  9 21:04:41 1999
+++ linux/include/linux/pc_keyb.h	Tue Oct 31 10:20:10 2000
@@ -128,3 +128,18 @@
 	struct fasync_struct *fasync;
 	unsigned char buf[AUX_BUF_SIZE];
 };
+ 
+typedef struct {
+    void (*kbd_write_command_w)(int data);
+    void (*kbd_write_output_w) (int data);
+    int  (*do_acknowledge)  (unsigned char scancode);
+    int  (*kbd_check_event) (unsigned char * scancode); 
+    int  (*send_data) (unsigned char data);
+    volatile unsigned char reply_expected;
+    volatile unsigned char acknowledge;
+    volatile unsigned char resend;
+} pc_keyb_t;
+
+int   register_kbd_ex (pc_keyb_t * kb);
+int unregister_kbd_ex (pc_keyb_t * kb);
+

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

end of thread, other threads:[~2000-11-08  9:33 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2000-11-08  9:24 i386 PC Keyboad Patch, for very exotic Keyboads Michael Westermann
2000-11-08  9:32 ` Michael Westermann

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox