Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/usbdev/src/altiface.c

    r160b75e rab27e01  
    4848 * @return Number of alternate interfaces for @p interface_no interface.
    4949 */
    50 size_t usb_interface_count_alternates(uint8_t *config_descr,
     50size_t usb_interface_count_alternates(const uint8_t *config_descr,
    5151    size_t config_descr_size, uint8_t interface_no)
    5252{
     
    5454        assert(config_descr_size > 0);
    5555
    56         usb_dp_parser_t dp_parser = {
     56        const usb_dp_parser_t dp_parser = {
    5757                .nesting = usb_dp_standard_descriptor_nesting
    5858        };
    59         usb_dp_parser_data_t dp_data = {
     59        const usb_dp_parser_data_t dp_data = {
    6060                .data = config_descr,
    6161                .size = config_descr_size,
     
    6565        size_t alternate_count = 0;
    6666
    67         uint8_t *iface_ptr = usb_dp_get_nested_descriptor(&dp_parser,
     67        const uint8_t *iface_ptr = usb_dp_get_nested_descriptor(&dp_parser,
    6868            &dp_data, config_descr);
    6969        while (iface_ptr != NULL) {
     
    9090 * @return Error code.
    9191 */
    92 int usb_alternate_interfaces_create(uint8_t *config_descr,
    93     size_t config_descr_size, int interface_number,
    94     usb_alternate_interfaces_t **alternates_ptr)
     92int usb_alternate_interfaces_init(usb_alternate_interfaces_t *alternates,
     93    const uint8_t *config_descr, size_t config_descr_size, int interface_number)
    9594{
    96         assert(alternates_ptr != NULL);
     95        assert(alternates != NULL);
    9796        assert(config_descr != NULL);
    9897        assert(config_descr_size > 0);
    9998
     99        alternates->alternatives = NULL;
     100        alternates->alternative_count = 0;
     101        alternates->current = 0;
     102
    100103        if (interface_number < 0) {
    101                 alternates_ptr = NULL;
    102104                return EOK;
    103         }
    104 
    105         usb_alternate_interfaces_t *alternates
    106             = malloc(sizeof(usb_alternate_interfaces_t));
    107 
    108         if (alternates == NULL) {
    109                 return ENOMEM;
    110105        }
    111106
     
    115110
    116111        if (alternates->alternative_count == 0) {
    117                 free(alternates);
    118112                return ENOENT;
    119113        }
    120114
    121         alternates->alternatives = malloc(alternates->alternative_count
    122             * sizeof(usb_alternate_interface_descriptors_t));
     115        alternates->alternatives = calloc(alternates->alternative_count,
     116            sizeof(usb_alternate_interface_descriptors_t));
    123117        if (alternates->alternatives == NULL) {
    124                 free(alternates);
    125118                return ENOMEM;
    126119        }
    127120
    128         alternates->current = 0;
    129 
    130         usb_dp_parser_t dp_parser = {
     121        const usb_dp_parser_t dp_parser = {
    131122                .nesting = usb_dp_standard_descriptor_nesting
    132123        };
    133         usb_dp_parser_data_t dp_data = {
     124        const usb_dp_parser_data_t dp_data = {
    134125                .data = config_descr,
    135126                .size = config_descr_size,
     
    140131            = &alternates->alternatives[0];
    141132
    142         uint8_t *iface_ptr = usb_dp_get_nested_descriptor(&dp_parser,
     133        const uint8_t *iface_ptr = usb_dp_get_nested_descriptor(&dp_parser,
    143134            &dp_data, dp_data.data);
    144135        while (iface_ptr != NULL) {
     
    148139                    || (iface->interface_number != interface_number)) {
    149140                        iface_ptr = usb_dp_get_sibling_descriptor(&dp_parser,
    150                             &dp_data,
    151                             dp_data.data, iface_ptr);
     141                            &dp_data, dp_data.data, iface_ptr);
    152142                        continue;
    153143                }
     
    160150                    dp_data.data, iface_ptr);
    161151                if (iface_ptr == NULL) {
    162                         uint8_t *next = dp_data.data + dp_data.size;
     152                        const uint8_t *next = dp_data.data + dp_data.size;
    163153                        cur_alt_iface->nested_descriptors_size
    164154                            = next - cur_alt_iface->nested_descriptors;
     
    171161        }
    172162
    173         *alternates_ptr = alternates;
    174 
    175163        return EOK;
    176164}
    177165
    178 
     166void usb_alternate_interfaces_deinit(usb_alternate_interfaces_t *alternate)
     167{
     168        if (!alternate)
     169                return;
     170        free(alternate->alternatives);
     171}
    179172/**
    180173 * @}
Note: See TracChangeset for help on using the changeset viewer.