Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/app/mkbd/main.c

    r79ae36dd rf9a627a  
    4545#include <devmap.h>
    4646#include <usb/dev/hub.h>
     47//#include <usb/host.h>
     48//#include <usb/driver.h>
    4749#include <usb/hid/iface.h>
    4850#include <usb/dev/pipes.h>
     
    5658#define NAME "mkbd"
    5759
    58 static async_sess_t *dev_sess = NULL;
    59 
    60 static int initialize_report_parser(async_sess_t *dev_sess,
    61     usb_hid_report_t **report)
     60static int dev_phone = -1;
     61
     62static int initialize_report_parser(int dev_phone, usb_hid_report_t **report)
    6263{
    63         *report = (usb_hid_report_t *) malloc(sizeof(usb_hid_report_t));
    64         if (*report == NULL)
     64        *report = (usb_hid_report_t *)malloc(sizeof(usb_hid_report_t));
     65        if (*report == NULL) {
    6566                return ENOMEM;
     67        }
    6668       
    6769        int rc = usb_hid_report_init(*report);
     
    6971                usb_hid_free_report(*report);
    7072                *report = NULL;
    71                 return rc;
    72         }
    73        
    74         /* Get the report descriptor length from the device */
     73                printf("usb_hid_report_init() failed.\n");
     74                return rc;
     75        }
     76       
     77        // get the report descriptor length from the device
    7578        size_t report_desc_size;
    76         rc = usbhid_dev_get_report_descriptor_length(dev_sess,
    77             &report_desc_size);
    78         if (rc != EOK) {
    79                 usb_hid_free_report(*report);
    80                 *report = NULL;
     79        rc = usbhid_dev_get_report_descriptor_length(
     80            dev_phone, &report_desc_size);
     81        if (rc != EOK) {
     82                usb_hid_free_report(*report);
     83                *report = NULL;
     84                printf("usbhid_dev_get_report_descriptor_length() failed.\n");
    8185                return rc;
    8286        }
     
    8589                usb_hid_free_report(*report);
    8690                *report = NULL;
    87                 // TODO: other error code?
    88                 return EINVAL;
    89         }
    90        
    91         uint8_t *desc = (uint8_t *) malloc(report_desc_size);
     91                printf("usbhid_dev_get_report_descriptor_length() returned 0.\n");
     92                return EINVAL;  // TODO: other error code?
     93        }
     94       
     95        uint8_t *desc = (uint8_t *)malloc(report_desc_size);
    9296        if (desc == NULL) {
    9397                usb_hid_free_report(*report);
     
    96100        }
    97101       
    98         /* Get the report descriptor from the device */
     102        // get the report descriptor from the device
    99103        size_t actual_size;
    100         rc = usbhid_dev_get_report_descriptor(dev_sess, desc, report_desc_size,
     104        rc = usbhid_dev_get_report_descriptor(dev_phone, desc, report_desc_size,
    101105            &actual_size);
    102106        if (rc != EOK) {
     
    104108                *report = NULL;
    105109                free(desc);
     110                printf("usbhid_dev_get_report_descriptor() failed.\n");
    106111                return rc;
    107112        }
     
    111116                *report = NULL;
    112117                free(desc);
    113                 // TODO: other error code?
    114                 return EINVAL;
    115         }
    116        
    117         /* Initialize the report parser */
     118                printf("usbhid_dev_get_report_descriptor() returned wrong size:"
     119                    " %zu, expected: %zu.\n", actual_size, report_desc_size);
     120                return EINVAL;  // TODO: other error code?
     121        }
     122       
     123        // initialize the report parser
    118124       
    119125        rc = usb_hid_parse_report_descriptor(*report, desc, report_desc_size);
     
    122128        if (rc != EOK) {
    123129                free(desc);
     130                printf("usb_hid_parse_report_descriptor() failed.\n");
    124131                return rc;
    125132        }
     
    133140        assert(report != NULL);
    134141       
     142//      printf("Calling usb_hid_parse_report() with size %zu and "
     143//          "buffer: \n", size);
     144//      for (size_t i = 0; i < size; ++i) {
     145//              printf(" %X ", buffer[i]);
     146//      }
     147//      printf("\n");
     148       
    135149        uint8_t report_id;
    136150        int rc = usb_hid_parse_report(report, buffer, size, &report_id);
    137         if (rc != EOK)
     151        if (rc != EOK) {
     152//              printf("Error parsing report: %s\n", str_error(rc));
    138153                return;
     154        }
    139155       
    140156        usb_hid_report_path_t *path = usb_hid_report_path();
     
    148164
    149165        usb_hid_report_field_t *field = usb_hid_report_get_sibling(
    150             report, NULL, path, USB_HID_PATH_COMPARE_END
    151             | USB_HID_PATH_COMPARE_USAGE_PAGE_ONLY,
     166            report, NULL, path, USB_HID_PATH_COMPARE_END 
     167            | USB_HID_PATH_COMPARE_USAGE_PAGE_ONLY, 
    152168            USB_HID_REPORT_TYPE_INPUT);
    153169       
     170//      printf("Field: %p\n", field);
     171       
    154172        while (field != NULL) {
     173//              printf("Field usage: %u, field value: %d\n", field->usage,
     174//                  field->value);
    155175                if (field->value != 0) {
    156176                        const char *key_str =
     
    163183                    | USB_HID_PATH_COMPARE_USAGE_PAGE_ONLY,
    164184                    USB_HID_REPORT_TYPE_INPUT);
     185//              printf("Next field: %p\n", field);
    165186        }
    166187       
     
    173194{
    174195#define _INDENT "      "
    175         printf(NAME ": Print out what multimedia keys were pressed.\n\n");
    176         printf("Usage: %s device\n", app_name);
    177         printf(_INDENT "The device is a devman path to the device.\n");
     196
     197       printf(NAME ": Print out what multimedia keys were pressed.\n\n");
     198       printf("Usage: %s device\n", app_name);
     199       printf(_INDENT "The device is a devman path to the device.\n");
     200
    178201#undef _OPTION
    179202#undef _INDENT
     
    200223        }
    201224       
    202         async_sess_t *sess = devman_device_connect(EXCHANGE_SERIALIZE,
    203             dev_handle, 0);
    204         if (!sess) {
     225        rc = devman_device_connect(dev_handle, 0);
     226        if (rc < 0) {
    205227                printf(NAME ": failed to connect to the device (handle %"
    206                        PRIun "): %s.\n", dev_handle, str_error(errno));
    207                 return errno;
    208         }
    209        
    210         dev_sess = sess;
     228                       PRIun "): %s.\n", dev_handle, str_error(rc));
     229                return rc;
     230        }
     231       
     232        dev_phone = rc;
     233//      printf("Got phone to the device: %d\n", dev_phone);
    211234       
    212235        char path[MAX_PATH_LENGTH];
     
    220243       
    221244        usb_hid_report_t *report = NULL;
    222         rc = initialize_report_parser(dev_sess, &report);
     245        rc = initialize_report_parser(dev_phone, &report);
    223246        if (rc != EOK) {
    224247                printf("Failed to initialize report parser: %s\n",
     
    230253       
    231254        size_t size;
    232         rc = usbhid_dev_get_event_length(dev_sess, &size);
     255        rc = usbhid_dev_get_event_length(dev_phone, &size);
    233256        if (rc != EOK) {
    234257                printf("Failed to get event length: %s.\n", str_error(rc));
     
    236259        }
    237260       
     261//      printf("Event length: %zu\n", size);
    238262        uint8_t *event = (uint8_t *)malloc(size);
    239263        if (event == NULL) {
    240                 // TODO: hangup phone?
     264                // hangup phone?
    241265                return ENOMEM;
    242266        }
     267       
     268//      printf("Event length: %zu\n", size);
    243269       
    244270        size_t actual_size;
    245271        int event_nr;
    246272       
    247         while (true) {
     273        while (1) {
     274                // get event from the driver
     275//              printf("Getting event from the driver.\n");
     276               
    248277                /** @todo Try blocking call. */
    249                 rc = usbhid_dev_get_event(dev_sess, event, size, &actual_size,
     278                rc = usbhid_dev_get_event(dev_phone, event, size, &actual_size,
    250279                    &event_nr, 0);
    251280                if (rc != EOK) {
    252                         // TODO: hangup phone?
     281                        // hangup phone?
    253282                        printf("Error in getting event from the HID driver:"
    254283                            "%s.\n", str_error(rc));
     
    256285                }
    257286               
     287//              printf("Got buffer: %p, size: %zu, max size: %zu\n", event,
     288//                  actual_size, size);
     289               
     290//              printf("Event number: %d, my actual event: %d\n", event_nr,
     291//                  act_event);
    258292                if (event_nr > act_event) {
    259293                        print_key(event, size, report);
     
    267301}
    268302
     303
    269304/** @}
    270305 */
Note: See TracChangeset for help on using the changeset viewer.