Go to the FreeLists Home Page Home Signup Help Login
 



[openbeos] || [Date Prev] [04-2007 Date Index] [Date Next] || [Thread Prev] [04-2007 Thread Index] [Thread Next]

[openbeos] PS/2 keyboard glitch & looking at the code of InputServer

  • From: "Jonas Sundström" <jonas@xxxxxxxxxxx>
  • To: openbeos@xxxxxxxxxxxxx
  • Date: Tue, 03 Apr 2007 02:35:12 +0200 CEST
I'm trying to figure out a bug. Here's what I see:

Unless there's also a PS/2 mouse, my PS/2 keyboard 
won't work at bootup, but it does seem to be there, sort of.
Typing on the PS/2 keyboard has no visible result, but doing
any of the following will kick the PS/2 keyboard into gear:

- change keymap in the Keymap preferences
- choose defaults in the Keyboard preferences
- run /bin/keymap -r
- hey input_server 'Iskm'
(a IS_RESTORE_KEY_MAP message)

A few key presses that have been buffered up will spill out.

InputServer::HandleGetSetKeyMap() will be called, which 
in turn calls InputServer::_LoadKeymap() or _LoadSystemKeymap()

This will load the InputServer's fKeys (key_map) with data from
B_USER_SETTINGS_DIRECTORY / Key_map
or use defaults

Now, why doesn't this happen at bootup? 
Does it?

_InitKeyboardMouseStates(); is called from the constructor
of InputServer (which inherits from BApplication), but this 
seems too early as the AppServerLink is not set up until
InputServer::ReadyToRun().

The comments in InputServer::_InitKeyboardMouseStates()
seems to state that the app_server will have to provide some
data. If that is the case, _InitKeyboardMouseStates() should
be called in ReadyToRun after the AppServerLink is set up,
at the earliest, no?

This part of _InitKeyboardMouseStates()

        BMessage msg(B_MOUSE_MOVED);
        HandleSetMousePosition(&msg, &msg);

is a dead end as 

HandleSetMousePosition(BMessage* message, BMessage* reply)
will return B_BAD_VALUE, doing nothing, on empty messages:

        BPoint where;
        if (message->FindPoint("where", &where) != B_OK)
                return B_BAD_VALUE;

Perhaps that part of _InitKeyboardMouseStates() should be 

        BMessage msg(B_MOUSE_MOVED);
        msg.AddPoint("where", &fMousePos);   // ADDED
        HandleSetMousePosition(&msg, &msg);

I've tried adding that line, and also calling InitKeyboardMouseStates()
from the end of InputServer::ReadyToRun(), but so far I haven't been
able to have PS/2 keyboard work at bootup.

Anyone got an eyeball to spare?

/Jonas Sundström.





[ Home | Signup | Help | Login | Archives | Lists ]

All trademarks and copyrights within the FreeLists archives are owned by their respective owners.
Everything else ©2007 Avenir Technologies, LLC.