Fork us on GitHub Follow us on Facebook Follow us on Twitter

Changeset 7da3219 in mainline


Ignore:
Timestamp:
2010-10-13T21:29:00Z (11 years ago)
Author:
Vojtech Horky <vojtechhorky@…>
Branches:
lfn, master
Children:
1880c65
Parents:
2c381250
Message:

Virtual keyboard sends key codes

The virtual USB keyboard sends a fixed batch of keyboard events.
These events shall switch to VT6 and type 'Hello' there.

Location:
uspace/app/virtusbkbd
Files:
2 added
3 edited

Legend:

Unmodified
Added
Removed
  • uspace/app/virtusbkbd/Makefile

    r2c381250 r7da3219  
    3737SOURCES = \
    3838        kbdconfig.c \
     39        keys.c \
    3940        virtusbkbd.c
    4041
  • uspace/app/virtusbkbd/kbdconfig.c

    r2c381250 r7da3219  
    3535 */
    3636#include "kbdconfig.h"
     37#include "keys.h"
    3738#include <usb/hcd.h>
    3839#include <usb/hid.h>
     
    9697                /* LED states padding */
    9798                OUTPUT(IOF_CONSTANT),
    98                 REPORT_COUNT1(6),
     99                REPORT_COUNT1(KB_MAX_KEYS_AT_ONCE),
    99100                REPORT_SIZE1(8),
    100101                LOGICAL_MINIMUM1(0),
  • uspace/app/virtusbkbd/virtusbkbd.c

    r2c381250 r7da3219  
    5353
    5454#include "kbdconfig.h"
     55#include "keys.h"
    5556
    5657#define LOOPS 5
     
    136137
    137138
     139/** Callback when keyboard status changed.
     140 *
     141 * @param status Current keyboard status.
     142 */
     143static void on_keyboard_change(kb_status_t *status)
     144{
     145        printf("%s: Current keyboard status: %08hhb", NAME, status->modifiers);
     146        size_t i;
     147        for (i = 0; i < KB_MAX_KEYS_AT_ONCE; i++) {
     148                printf(" 0x%02X", (int)status->pressed_keys[i]);
     149        }
     150        printf("\n");
     151       
     152        uint8_t data[3 + KB_MAX_KEYS_AT_ONCE];
     153        data[0] = status->modifiers;
     154        data[1] = 0;
     155        data[2] = 0;
     156        for (i = 0; i < KB_MAX_KEYS_AT_ONCE; i++) {
     157                data[3 + i] = status->pressed_keys[i];
     158        }
     159       
     160        int rc = keyboard_dev.send_data(&keyboard_dev, 0, data, sizeof(data));
     161        printf("%s:   Sent to VHCD (%s).\n", NAME, str_error(rc));
     162       
     163        fibril_sleep(1);
     164}
     165
     166/** Simulated keyboard events. */
     167static kb_event_t keyboard_events[] = {
     168        /* Switch to VT6 (Alt+F6) */
     169        M_DOWN(KB_MOD_LEFT_ALT),
     170        K_PRESS(63),
     171        M_UP(KB_MOD_LEFT_ALT),
     172        /* Type the word 'Hello' */
     173        M_DOWN(KB_MOD_LEFT_SHIFT),
     174        K_PRESS(KB_KEY_H),
     175        M_UP(KB_MOD_LEFT_SHIFT),
     176        K_PRESS(KB_KEY_E),
     177        K_PRESS(KB_KEY_L),
     178        K_PRESS(KB_KEY_L),
     179        K_PRESS(KB_KEY_O)
     180};
     181static size_t keyboard_events_count =
     182    sizeof(keyboard_events)/sizeof(keyboard_events[0]);
     183
     184
     185
    138186int main(int argc, char * argv[])
    139187{
     
    156204        }
    157205       
    158        
    159         for (i = 0; i < LOOPS; i++) {
    160                 size_t size = 5;
    161                 char *data = (char *) "Hullo, World!";
    162                
    163                 if (i > 0) {
    164                         fibril_sleep(2);
    165                 }
    166                
    167                 printf("%s: Will send data to VHCD...\n", NAME);
    168                 int rc = keyboard_dev.send_data(&keyboard_dev, 0, data, size);
    169                 printf("%s:   ...data sent (%s).\n", NAME, str_error(rc));
    170         }
    171        
    172         fibril_sleep(1);
     206        kb_status_t status;
     207        kb_init(&status);
     208       
     209        printf("%s: Simulating keyboard events...\n", NAME);
     210        kb_process_events(&status, keyboard_events, keyboard_events_count,
     211            on_keyboard_change);
     212       
    173213        printf("%s: Terminating...\n", NAME);
    174214       
Note: See TracChangeset for help on using the changeset viewer.