Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/app/virtusbkbd/virtusbkbd.c

    rd5e7668 rad79d80  
    5555#include "stdreq.h"
    5656
    57 /** Pause between individual key-presses in seconds. */
    58 #define KEY_PRESS_DELAY 2
     57#define LOOPS 5
    5958#define NAME "virt-usb-kbd"
    6059
     
    7675}
    7776
    78 
    79 /** Compares current and last status of pressed keys.
    80  *
    81  * @warning Has side-efect - changes status_last field.
    82  *
    83  * @param status_now Status now.
    84  * @param status_last Last status.
    85  * @param len Size of status.
    86  * @return Whether they are the same.
    87  */
    88 static bool keypress_check_with_last_request(uint8_t *status_now,
    89     uint8_t *status_last, size_t len)
    90 {
    91         bool same = true;
    92         size_t i;
    93         for (i = 0; i < len; i++) {
    94                 if (status_now[i] != status_last[i]) {
    95                         status_last[i] = status_now[i];
    96                         same = false;
    97                 }
    98         }
    99         return same;
     77static int on_class_request(struct usbvirt_device *dev,
     78    usb_device_request_setup_packet_t *request, uint8_t *data)
     79{       
     80        printf("%s: class request (%d)\n", NAME, (int) request->request);
     81       
     82        return EOK;
    10083}
    10184
     
    10386    usb_endpoint_t endpoint, void *buffer, size_t size, size_t *actual_size)
    10487{
    105         static uint8_t last_data[2 + KB_MAX_KEYS_AT_ONCE];
    106 
    10788        if (size < 2 + KB_MAX_KEYS_AT_ONCE) {
    10889                return EINVAL;
     
    120101        }
    121102       
    122         if (keypress_check_with_last_request(data, last_data,
    123             2 + KB_MAX_KEYS_AT_ONCE)) {
    124                 *actual_size = 0;
    125                 return EOK;
    126         }
    127 
    128103        memcpy(buffer, &data, *actual_size);
    129104       
     
    131106}
    132107
    133 static usbvirt_control_transfer_handler_t endpoint_zero_handlers[] = {
    134         {
    135                 .request_type = USBVIRT_MAKE_CONTROL_REQUEST_TYPE(
    136                     USB_DIRECTION_IN,
    137                     USBVIRT_REQUEST_TYPE_STANDARD,
    138                     USBVIRT_REQUEST_RECIPIENT_DEVICE),
    139                 .request = USB_DEVREQ_GET_DESCRIPTOR,
    140                 .name = "GetDescriptor",
    141                 .callback = stdreq_on_get_descriptor
    142         },
    143         {
    144                 .request_type = USBVIRT_MAKE_CONTROL_REQUEST_TYPE(
    145                     USB_DIRECTION_IN,
    146                     USBVIRT_REQUEST_TYPE_CLASS,
    147                     USBVIRT_REQUEST_RECIPIENT_DEVICE),
    148                 .request = USB_DEVREQ_GET_DESCRIPTOR,
    149                 .name = "GetDescriptor",
    150                 .callback = stdreq_on_get_descriptor
    151         },
    152         USBVIRT_CONTROL_TRANSFER_HANDLER_LAST
    153 };
    154108
    155109/** Keyboard callbacks.
     
    157111 */
    158112static usbvirt_device_ops_t keyboard_ops = {
    159         .control_transfer_handlers = endpoint_zero_handlers,
     113        .standard_request_ops = &standard_request_ops,
     114        .on_class_device_request = on_class_request,
    160115        .on_data = on_incoming_data,
    161116        .on_data_request = on_request_for_data
     
    197152        .ops = &keyboard_ops,
    198153        .descriptors = &descriptors,
    199         .lib_debug_level = 3,
    200         .lib_debug_enabled_tags = USBVIRT_DEBUGTAG_ALL,
    201154        .name = "keyboard"
    202155};
     
    224177        printf("\n");
    225178       
    226         fibril_sleep(KEY_PRESS_DELAY);
     179        fibril_sleep(1);
    227180}
    228181
     
    270223       
    271224        printf("%s: Simulating keyboard events...\n", NAME);
    272         fibril_sleep(10);
    273         while (1) {
    274                 kb_process_events(&status, keyboard_events, keyboard_events_count,
    275                         on_keyboard_change);
    276         }
     225        kb_process_events(&status, keyboard_events, keyboard_events_count,
     226            on_keyboard_change);
    277227       
    278228        printf("%s: Terminating...\n", NAME);
Note: See TracChangeset for help on using the changeset viewer.