Changeset 8a951ca in mainline for uspace/lib/usb/src/host/device_keeper.c
- Timestamp:
- 2011-03-21T13:47:30Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- a372663
- Parents:
- f8e1a2c (diff), 48fe0c9 (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. - File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/usb/src/host/device_keeper.c
rf8e1a2c r8a951ca 55 55 instance->devices[i].occupied = false; 56 56 instance->devices[i].handle = 0; 57 instance->devices[i].toggle_status = 0; 57 instance->devices[i].toggle_status[0] = 0; 58 instance->devices[i].toggle_status[1] = 0; 58 59 } 59 60 } … … 118 119 if (((data[0] & 0xf) == 1) && ((data[2] | data[3]) == 0)) { 119 120 /* endpoint number is < 16, thus first byte is enough */ 120 instance->devices[target.address].toggle_status &= 121 instance->devices[target.address].toggle_status[0] &= 122 ~(1 << data[4]); 123 instance->devices[target.address].toggle_status[1] &= 121 124 ~(1 << data[4]); 122 125 } … … 127 130 /* target must be device */ 128 131 if ((data[0] & 0xf) == 0) { 129 instance->devices[target.address].toggle_status = 0; 132 instance->devices[target.address].toggle_status[0] = 0; 133 instance->devices[target.address].toggle_status[1] = 0; 130 134 } 131 135 break; … … 140 144 * @return Error code 141 145 */ 142 int device_keeper_get_toggle(device_keeper_t *instance, usb_target_t target) 143 { 144 assert(instance); 146 int device_keeper_get_toggle( 147 device_keeper_t *instance, usb_target_t target, usb_direction_t direction) 148 { 149 assert(instance); 150 /* only control pipes are bi-directional and those do not need toggle */ 151 if (direction == USB_DIRECTION_BOTH) 152 return ENOENT; 145 153 int ret; 146 154 fibril_mutex_lock(&instance->guard); … … 151 159 ret = EINVAL; 152 160 } else { 153 ret = (instance->devices[target.address].toggle_status 161 ret = (instance->devices[target.address].toggle_status[direction] 154 162 >> target.endpoint) & 1; 155 163 } … … 165 173 * @return Error code. 166 174 */ 167 int device_keeper_set_toggle( 168 device_keeper_t *instance, usb_target_t target, bool toggle) 169 { 170 assert(instance); 175 int device_keeper_set_toggle(device_keeper_t *instance, 176 usb_target_t target, usb_direction_t direction, bool toggle) 177 { 178 assert(instance); 179 /* only control pipes are bi-directional and those do not need toggle */ 180 if (direction == USB_DIRECTION_BOTH) 181 return ENOENT; 171 182 int ret; 172 183 fibril_mutex_lock(&instance->guard); … … 178 189 } else { 179 190 if (toggle) { 180 instance->devices[target.address].toggle_status |= (1 << target.endpoint); 191 instance->devices[target.address].toggle_status[direction] 192 |= (1 << target.endpoint); 181 193 } else { 182 instance->devices[target.address].toggle_status &= ~(1 << target.endpoint); 194 instance->devices[target.address].toggle_status[direction] 195 &= ~(1 << target.endpoint); 183 196 } 184 197 ret = EOK; … … 215 228 instance->devices[new_address].occupied = true; 216 229 instance->devices[new_address].speed = speed; 217 instance->devices[new_address].toggle_status = 0; 230 instance->devices[new_address].toggle_status[0] = 0; 231 instance->devices[new_address].toggle_status[1] = 0; 218 232 instance->last_address = new_address; 219 233 fibril_mutex_unlock(&instance->guard);
Note:
See TracChangeset
for help on using the changeset viewer.