Changeset aec2ad4 in mainline for uspace/lib/usb/src


Ignore:
Timestamp:
2011-02-04T11:48:33Z (14 years ago)
Author:
Matus Dekanek <smekideki@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
103a3626
Parents:
ba5ab09 (diff), 3597dab (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

merge from usb/development

Location:
uspace/lib/usb/src
Files:
2 added
3 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/usb/src/debug.c

    rba5ab09 raec2ad4  
    11/*
    2  * Copyright (c) 2010 Vojtech Horky
     2 * Copyright (c) 2010-2011 Vojtech Horky
    33 * All rights reserved.
    44 *
     
    6161static FIBRIL_MUTEX_INITIALIZE(tag_list_guard);
    6262
     63/** Level of logging messages. */
     64static usb_log_level_t log_level = USB_LOG_LEVEL_WARNING;
     65/** Prefix for logging messages. */
     66static const char *log_prefix = "usb";
     67/** Serialization mutex for logging functions. */
     68static FIBRIL_MUTEX_INITIALIZE(log_serializer);
     69
    6370/** Find or create new tag with given name.
    6471 *
     
    155162}
    156163
     164/** Enable logging.
     165 *
     166 * @param level Maximal enabled level (including this one).
     167 * @param message_prefix Prefix for each printed message.
     168 */
     169void usb_log_enable(usb_log_level_t level, const char *message_prefix)
     170{
     171        log_prefix = message_prefix;
     172        log_level = level;
     173}
     174
     175
     176static const char *log_level_name(usb_log_level_t level)
     177{
     178        switch (level) {
     179                case USB_LOG_LEVEL_FATAL:
     180                        return " FATAL";
     181                case USB_LOG_LEVEL_ERROR:
     182                        return " ERROR";
     183                case USB_LOG_LEVEL_WARNING:
     184                        return " WARN";
     185                case USB_LOG_LEVEL_INFO:
     186                        return " info";
     187                default:
     188                        return "";
     189        }
     190}
     191
     192/** Print logging message.
     193 *
     194 * @param level Verbosity level of the message.
     195 * @param format Formatting directive.
     196 */
     197void usb_log_printf(usb_log_level_t level, const char *format, ...)
     198{
     199        if (level > log_level) {
     200                return;
     201        }
     202
     203        FILE *stream = NULL;
     204        switch (level) {
     205                case USB_LOG_LEVEL_FATAL:
     206                case USB_LOG_LEVEL_ERROR:
     207                        stream = stderr;
     208                        break;
     209                default:
     210                        stream = stdout;
     211                        break;
     212        }
     213        assert(stream != NULL);
     214
     215        va_list args;
     216        va_start(args, format);
     217
     218        fibril_mutex_lock(&log_serializer);
     219        fprintf(stream, "[%s]%s: ", log_prefix, log_level_name(level));
     220        vfprintf(stream, format, args);
     221        fibril_mutex_unlock(&log_serializer);
     222
     223        va_end(args);
     224}
    157225
    158226/**
  • uspace/lib/usb/src/hidparser.c

    rba5ab09 raec2ad4  
    3535#include <usb/classes/hidparser.h>
    3636#include <errno.h>
     37#include <stdio.h>
    3738
    3839/** Parse HID report descriptor.
     
    120121        item.logical_max = 255;
    121122
    122         if(size != 8){
    123                 return -1;
     123        if (size != 8) {
     124                return ERANGE;
    124125        }
    125126
    126127        uint8_t keys[6];
    127         for(i=item.offset; i<item.count; i++) {
    128                 keys[i-2] = data[i];
     128        for (i = 0; i < item.count; i++) {
     129                keys[i] = data[i + item.offset];
    129130        }
    130131
  • uspace/lib/usb/src/usbdrv.c

    rba5ab09 raec2ad4  
    495495}
    496496
     497/** Issue whole control write transfer. */
     498int usb_drv_async_control_write(int phone, usb_target_t target,
     499    void *setup_packet, size_t setup_packet_size,
     500    void *buffer, size_t buffer_size,
     501    usb_handle_t *handle)
     502{
     503        // FIXME - check input parameters instead of asserting them
     504        assert(phone > 0);
     505        assert(setup_packet != NULL);
     506        assert(setup_packet_size > 0);
     507        assert(buffer != NULL);
     508        assert(buffer_size > 0);
     509        assert(handle != NULL);
     510
     511        transfer_info_t *transfer
     512            = (transfer_info_t *) malloc(sizeof(transfer_info_t));
     513        if (transfer == NULL) {
     514                return ENOMEM;
     515        }
     516
     517        transfer->size_transferred = NULL;
     518        transfer->buffer = NULL;
     519        transfer->size = 0;
     520        transfer->phone = phone;
     521
     522        int rc;
     523
     524        transfer->request = async_send_3(phone,
     525            DEV_IFACE_ID(USBHC_DEV_IFACE),
     526            IPC_M_USBHC_CONTROL_WRITE,
     527            target.address, target.endpoint,
     528            &transfer->reply);
     529
     530        rc = async_data_write_start(phone, setup_packet, setup_packet_size);
     531        if (rc != EOK) {
     532                async_wait_for(transfer->request, NULL);
     533                return rc;
     534        }
     535
     536        rc = async_data_write_start(phone, buffer, buffer_size);
     537        if (rc != EOK) {
     538                async_wait_for(transfer->request, NULL);
     539                return rc;
     540        }
     541
     542        *handle = (usb_handle_t) transfer;
     543
     544        return EOK;
     545}
     546
    497547/** Start control read transfer. */
    498548int usb_drv_async_control_read_setup(int phone, usb_target_t target,
     
    530580}
    531581
     582/** Issue whole control read transfer. */
     583int usb_drv_async_control_read(int phone, usb_target_t target,
     584    void *setup_packet, size_t setup_packet_size,
     585    void *buffer, size_t buffer_size, size_t *actual_size,
     586    usb_handle_t *handle)
     587{
     588        // FIXME - check input parameters instead of asserting them
     589        assert(phone > 0);
     590        assert(setup_packet != NULL);
     591        assert(setup_packet_size > 0);
     592        assert(buffer != NULL);
     593        assert(buffer_size > 0);
     594        assert(handle != NULL);
     595
     596        transfer_info_t *transfer
     597            = (transfer_info_t *) malloc(sizeof(transfer_info_t));
     598        if (transfer == NULL) {
     599                return ENOMEM;
     600        }
     601
     602        transfer->size_transferred = actual_size;
     603        transfer->buffer = buffer;
     604        transfer->size = buffer_size;
     605        transfer->phone = phone;
     606
     607        int rc;
     608
     609        transfer->request = async_send_4(phone,
     610            DEV_IFACE_ID(USBHC_DEV_IFACE),
     611            IPC_M_USBHC_CONTROL_READ,
     612            target.address, target.endpoint,
     613            buffer_size,
     614            &transfer->reply);
     615
     616        rc = async_data_write_start(phone, setup_packet, setup_packet_size);
     617        if (rc != EOK) {
     618                async_wait_for(transfer->request, NULL);
     619                return rc;
     620        }
     621
     622        *handle = (usb_handle_t) transfer;
     623
     624        return EOK;
     625}
     626
    532627/**
    533628 * @}
Note: See TracChangeset for help on using the changeset viewer.