Difference between revisions of "Keyboard.device"

From Freepascal Amiga wiki
Jump to navigation Jump to search
(→‎The unit: Added)
(→‎Example: Show active keyboard matrix: Oops, forgot to paste constant definitions)
 
(One intermediate revision by the same user not shown)
Line 15: Line 15:
  
  
=== Example: ( insert example title ) ===
+
=== Example: Show active keyboard matrix ===
  
There's no example available.
+
Small example that shows how to read and display the current keyboard matrix. Note that the matrix result only contains the current keys being pressed.
  
  
Line 23: Line 23:
  
 
<source lang="pascal">
 
<source lang="pascal">
 +
program ShowActiveMatrix;
 +
 +
{$MODE OBJFPC}{$H+}
 +
Uses
 +
  sysutils,
 +
  exec, amigados,
 +
  aros_device_keyboard;
 +
 +
 +
Const
 +
  KB_MAXKEYS    = 256;
 +
  KB_MATRIXSIZE  = (KB_MAXKEYS div (sizeof(BYTE)*8))  ;
 +
 +
 +
procedure doTest;
 +
Type
 +
  IOStd = Type PIOStdReq;
 +
Var
 +
  mp    : pMsgPort;
 +
  io    : pIORequest = nil;
 +
  i      : integer;
 +
  matrix : packed Array [0..Pred(KB_MATRIXSIZE)] of byte;
 +
begin
 +
  mp := CreateMsgPort;
 +
 +
  if (Mp <> Nil) then
 +
  begin
 +
    io := CreateIORequest(mp, sizeof (TIOStdReq));
 +
 +
    if (io <> nil) then
 +
    begin
 +
 +
      If (0 = OpenDevice('keyboard.device', 0, io, 0)) then
 +
      begin
 +
        writeln('checking keyboard matrix');
 +
        ioStd(io)^.io_Command := KBD_READMATRIX;
 +
        ioStd(io)^.io_Data    := @matrix[0];
 +
        ioStd(io)^.io_Length  := SizeOf(Matrix);
 +
        DoIO(io);
 +
 +
        if (0 = io^.io_Error) then
 +
        begin
 +
          Write('Matrix: ');
 +
          for i := 0 to ioStd(io)^.io_Actual - 1 do
 +
          begin
 +
            Write('0x', IntToHex(matrix[i], 2), ' ');
 +
          end;
 +
        end;
 +
 +
        CloseDevice(io);
 +
      end;
 +
 +
      DeleteIORequest(io);
 +
    end;
 +
 +
    DeleteMsgPort(mp);
 +
  end;
 +
end;
 +
 +
 +
begin
 +
  writeln('enter');
 +
  DoTest;
 +
  writeln('leave');
 +
end.
 
</source>
 
</source>
 
  
 
=== Example: ( insert example title ) ===
 
=== Example: ( insert example title ) ===

Latest revision as of 13:48, 22 March 2015

Short explanatory description not available.


Description

There's no description available.


Usage

There is no usage information available.


Examples

Example: Show active keyboard matrix

Small example that shows how to read and display the current keyboard matrix. Note that the matrix result only contains the current keys being pressed.


program ShowActiveMatrix;

{$MODE OBJFPC}{$H+}
Uses
  sysutils,
  exec, amigados,
  aros_device_keyboard;


Const
  KB_MAXKEYS     = 256;
  KB_MATRIXSIZE  = (KB_MAXKEYS div (sizeof(BYTE)*8))  ;


procedure doTest;
Type
  IOStd = Type PIOStdReq;
Var
  mp     : pMsgPort;
  io     : pIORequest = nil;
  i      : integer;
  matrix : packed Array [0..Pred(KB_MATRIXSIZE)] of byte;
begin
  mp := CreateMsgPort;

  if (Mp <> Nil) then
  begin
    io := CreateIORequest(mp, sizeof (TIOStdReq));

    if (io <> nil) then
    begin

      If (0 = OpenDevice('keyboard.device', 0, io, 0)) then
      begin
        writeln('checking keyboard matrix');
        ioStd(io)^.io_Command := KBD_READMATRIX;
        ioStd(io)^.io_Data    := @matrix[0];
        ioStd(io)^.io_Length  := SizeOf(Matrix);
        DoIO(io);

        if (0 = io^.io_Error) then
        begin
          Write('Matrix: ');
          for i := 0 to ioStd(io)^.io_Actual - 1 do
          begin
            Write('0x', IntToHex(matrix[i], 2), ' ');
          end;
        end;

        CloseDevice(io);
      end;

      DeleteIORequest(io);
    end;

    DeleteMsgPort(mp);
  end;
end;


begin
  writeln('enter');
  DoTest;
  writeln('leave');
end.

Example: ( insert example title )

There's no example available.



Example: ( insert example title )

There's no example available.



The unit

The header unit source-code is not available.

unit aros_device_keyboard;

{$MODE OBJFPC}{$H+}

interface

Uses
  Exec;


Const
  //**********************************************************************
  //********************** Keyboard Device Commands **********************
  //**********************************************************************/

  KBD_READEVENT        = (CMD_NONSTD + 0);
  KBD_READMATRIX       = (CMD_NONSTD + 1);
  KBD_ADDRESETHANDLER  = (CMD_NONSTD + 2);
  KBD_REMRESETHANDLER  = (CMD_NONSTD + 3);
  KBD_RESETHANDLERDONE = (CMD_NONSTD + 4);

implementation

end.


Unit documentation

Currently there's no Free Pascal specific documentation available for this unit. Please consult the original SDK.