]> Zhao Yanbai Git Server - minix.git/commitdiff
FKEY_EVENTS cleanups
authorLionel Sambuc <lionel@minix3.org>
Wed, 4 Jun 2014 14:04:36 +0000 (16:04 +0200)
committerLionel Sambuc <lionel@minix3.org>
Mon, 28 Jul 2014 15:05:51 +0000 (17:05 +0200)
 - Fix a bug where an FKEY_EVENT request would always return EINVAL

 - Replace two manual usage of FKEY_EVENT messages by a call to
   fkey_events which is mapped to fkey_ctl.

Change-Id: I7bc54cade45a29f14c89313b3ec4c28d81a4ec93

drivers/orinoco/orinoco.c
drivers/tty/arch/i386/keyboard.c
servers/is/dmp.c

index 0c053eb7e5a4fa4335916efeb401cb8abbe3c686..b6632f08006ad3c76f5e5132262478a493544b7b 100644 (file)
@@ -389,7 +389,8 @@ static void or_reset() {
 static void or_dump (message *m)
  {
        t_or *orp;
-       
+       int sfkeys;
+
        orp = &or_state;
 
        if(orp->or_mode == OR_M_DISABLED) {
@@ -399,12 +400,11 @@ static void or_dump (message *m)
        if(orp->or_mode != OR_M_ENABLED)
                return;
 
-       m->m_type = TTY_FKEY_CONTROL;
-       m->FKEY_REQUEST = FKEY_EVENTS;
-       if(OK!=(ipc_sendrec(TTY_PROC_NR,m)) )
+       if(OK != fkey_events(NULL, &sfkeys)) {
                printf("Contacting the TTY failed\n");
+       }
                
-       if(bit_isset(m->FKEY_SFKEYS, 11)) {
+       if(bit_isset(sfkeys, 11)) {
                print_linkstatus(orp, orp->last_linkstatus);
        }
 }
index 0e8a9fc59ec6852ecc176a51ef3580c0b8b79092..bd74859bd6f875406bb2666c818f92b998d2901c 100644 (file)
@@ -501,6 +501,7 @@ message *m_ptr;                     /* pointer to the request message */
       }
       break;
   case FKEY_EVENTS:
+      result = OK;                     /* everything will be ok*/
       m_ptr->FKEY_FKEYS = m_ptr->FKEY_SFKEYS = 0;
       for (i=0; i < 12; i++) {         /* check (Shift+) F1-F12 keys */
           if (fkey_obs[i].proc_nr == m_ptr->m_source) {
index 819d4532b3b4f13b8b75e641847743ebcd078642..64e08b99eac5096c5692bc81f9f06ba26299b4ab 100644 (file)
@@ -67,25 +67,31 @@ int map;
 /*===========================================================================*
  *                             handle_fkey                                  *
  *===========================================================================*/
-#define pressed(k) ((F1<=(k)&&(k)<=F12 && bit_isset(m->FKEY_FKEYS,((k)-F1+1)))\
-       || (SF1<=(k) && (k)<=SF12 && bit_isset(m->FKEY_SFKEYS, ((k)-SF1+1)))) 
+#define pressed(start, end, bitfield, key) \
+       (((start) <= (key)) && ((end) >= (key)) && \
+        bit_isset((bitfield), ((key) - (start) + 1)))
 int do_fkey_pressed(m)
 message *m;                                    /* notification message */
 {
   int s, h;
+  int fkeys, sfkeys;
 
   /* The notification message does not convey any information, other
    * than that some function keys have been pressed. Ask TTY for details.
    */
-  m->m_type = TTY_FKEY_CONTROL;
-  m->FKEY_REQUEST = FKEY_EVENTS;
-  if (OK != (s=ipc_sendrec(TTY_PROC_NR, m)))
-      printf("IS: warning, ipc_sendrec to TTY failed: %d\n", s);
+  s = fkey_events(&fkeys, &sfkeys);
+  if (s < 0) {
+      printf("IS: warning, fkey_events failed: %d\n", s);
+  }
 
   /* Now check which keys were pressed: F1-F12, SF1-SF12. */
-  for(h=0; h < NHOOKS; h++)
-      if(pressed(hooks[h].key))
-          hooks[h].function();
+  for(h=0; h < NHOOKS; h++) {
+       if (pressed(F1, F12, fkeys, hooks[h].key)) {
+               hooks[h].function();
+       } else if (pressed(SF1, SF12, sfkeys, hooks[h].key)) {
+               hooks[h].function();
+       }
+  }
 
   /* Don't send a reply message. */
   return(EDONTREPLY);