Changes in uspace/drv/vhc/devices.c [13101d06:bd8c753d] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/vhc/devices.c
r13101d06 rbd8c753d 27 27 */ 28 28 29 /** @addtogroup usb29 /** @addtogroup drvusbvhc 30 30 * @{ 31 31 */ … … 58 58 /** Create virtual device. 59 59 * 60 * @param address USB address.61 60 * @param phone Callback phone. 61 * @param id Device id. 62 62 * @return New device. 63 * @retval NULL Out of memory or address already occupied.64 */ 65 virtdev_connection_t *virtdev_add_device(int phone )63 * @retval NULL Out of memory. 64 */ 65 virtdev_connection_t *virtdev_add_device(int phone, sysarg_t id) 66 66 { 67 67 virtdev_connection_t *dev = (virtdev_connection_t *) 68 68 malloc(sizeof(virtdev_connection_t)); 69 if (dev == NULL) { 70 return NULL; 71 } 72 69 73 dev->phone = phone; 74 dev->id = id; 70 75 list_append(&dev->link, &devices); 71 76 … … 73 78 74 79 return dev; 80 } 81 82 /** Find virtual device by id. 83 * 84 * @param id Device id. 85 * @return Device with given id. 86 * @retval NULL No such device. 87 */ 88 virtdev_connection_t *virtdev_find(sysarg_t id) 89 { 90 link_t *pos; 91 list_foreach(pos, &devices) { 92 virtdev_connection_t *dev 93 = list_get_instance(pos, virtdev_connection_t, link); 94 if (dev->id == id) { 95 return dev; 96 } 97 } 98 99 return NULL; 75 100 } 76 101 … … 90 115 usb_transaction_outcome_t virtdev_send_to_all(transaction_t *transaction) 91 116 { 117 /* For easier debugging. */ 118 switch (transaction->type) { 119 case USBVIRT_TRANSACTION_SETUP: 120 case USBVIRT_TRANSACTION_OUT: 121 transaction->actual_len = transaction->len; 122 break; 123 case USBVIRT_TRANSACTION_IN: 124 transaction->actual_len = 0; 125 break; 126 default: 127 assert(false && "unreachable branch in switch()"); 128 } 129 usb_transaction_outcome_t outcome = USB_OUTCOME_BABBLE; 130 92 131 link_t *pos; 93 132 list_foreach(pos, &devices) { … … 140 179 transaction->actual_len = IPC_GET_ARG1(answer_data); 141 180 rc = (int)answer_rc; 181 } 182 183 /* 184 * If at least one device was able to accept this 185 * transaction and process it, we can announce success. 186 */ 187 if (rc == EOK) { 188 outcome = USB_OUTCOME_OK; 142 189 } 143 190 } … … 165 212 transaction->buffer, transaction->len, 166 213 &tmp); 167 if (tmp < transaction->len) { 168 transaction->len = tmp; 169 } 214 transaction->actual_len = tmp; 170 215 break; 171 216 … … 178 223 } 179 224 dprintf(4, "transaction on hub processed..."); 225 outcome = USB_OUTCOME_OK; 180 226 } 181 227 … … 184 230 * real-life image. 185 231 */ 186 return USB_OUTCOME_OK;232 return outcome; 187 233 } 188 234
Note:
See TracChangeset
for help on using the changeset viewer.