delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/1997/05/16/01:04:26

From: alexad3 AT uniserve DOT com (Alexander J Russell)
Newsgroups: comp.os.msdos.djgpp,comp.os.msdos.programmer,alt.msdos.programmer
Subject: Re: Key board LED's
Date: 16 May 1997 03:33:25 GMT
Organization: Uniserve
Lines: 116
Distribution: world
Message-ID: <5lgki6$n7k$1@neptune.uniserve.com>
References: <5levsd$5la AT lion DOT cs DOT latrobe DOT edu DOT au>
NNTP-Posting-Host: dy3-21.van.tvs.net
Mime-Version: 1.0
To: djgpp AT delorie DOT com
DJ-Gateway: from newsgroup comp.os.msdos.djgpp

In article <5levsd$5la AT lion DOT cs DOT latrobe DOT edu DOT au>, boylesgj AT lion DOT cs DOT latrobe DOT edu DOT au 
says...
>
>What is the procedure for changing their state (in intimate detail)?
>
>I can change them by doing this : 
outportb(0x60,0xED);delay(50);outportb(0x60,0x
>03);
>but when I try to do it in a test program for a key board handler it is a
>total failure. 

have your keyboard handler stuff the raw scan codes into a Q and do nothing 
else.

Have a nother routine process scan codes from above Q, including changing 
LED's, converting to ascii etc...

[snip - code close to working]

Code below is reliable

>
[snip]

>Is there a way to put the key board into auto with respect to LED's. It
>sure would save me a lot of unecessary head aches.
>
no.

/*

    led.c

    Internet: alexad3 AT uniserve DOT com
    Copyright 1995, January 15 by Alex Russell, NO rights reserved

    Created - 1995/1/15

    History:
        New file

   code fragments to turn on the LED lights.
   Your program would have to track the status of all lights
   and send the correct bits instead of just CAPLOCK

   ONLY use this code in an int 9 replacement.
   If the BIOS keyboard handler is running,
   just set the bit mask in BIOS data area.

*/




/* keyboard controller and LED lights stuff */
#define KEYSTATUS 0x64
#define KEYDATA  0x60
#define LEDUPDATE 0xed
#define OB_FULL 1
#define IB_FULL 2
#define KEY_ACK 0xfa

/* bit masks to be sent */
#define SCROLLOCK 1
#define NUMLOCK 2
#define CAPLOCK 4


/* ---------------------- send_keycontrol() ------------ January 15,1995 */
short send_keycontrol(BYTE v)
{
   short count, err=1;
   BYTE c;

   for ( count=0; count < 3; count++ )
      {
      do
         {
         c=inportb(KEYSTATUS);
         }
      while ( c & IB_FULL );

      outportb(KEYDATA, v);
      do
         {
         c=inportb(KEYSTATUS);
         }
      while ( c & OB_FULL);

      c=inportb(KEYDATA);
      if ( c == KEY_ACK )
         {
         err=0;
         break;
         }
      }

   return err;
}



/* ---------------------- cap_light_on() --------------- January 15,1995 */
void cap_light_on(void)
{
   if ( !send_keycontrol(LEDUPDATE) ) /* tell keyboard next byte is led bitmask 
*/
      send_keycontrol(CAPLOCK);       /* the led bitmask */
}

-- 
The AnArChIsT! Anarchy! Not Chaos!
aka
Alex Russell
alexad3 AT uniserve DOT com

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019