| break; | break; | ||||
| // case 0xC940: | // case 0xC940: | ||||
| #endif | #endif | ||||
| #if defined(AUDIO_INTERFACE) | |||||
| case 0x0B01: // SET_INTERFACE (alternate setting) | |||||
| if (setup.wIndex == AUDIO_INTERFACE+1) { | |||||
| //audio_tx_alternate_setting = setup.wValue; | |||||
| } else if (setup.wIndex == AUDIO_INTERFACE+2) { | |||||
| //audio_rx_alternate_setting = setup.wValue; | |||||
| } else { | |||||
| endpoint0_stall(); | |||||
| return; | |||||
| } | |||||
| break; | |||||
| case 0x0A81: // GET_INTERFACE (alternate setting) | |||||
| datalen = 1; | |||||
| data = reply_buffer; | |||||
| if (setup.wIndex == AUDIO_INTERFACE+1) { | |||||
| reply_buffer[0] = 0; | |||||
| //reply_buffer[0] = audio_tx_alternate_setting; | |||||
| } else if (setup.wIndex == AUDIO_INTERFACE+2) { | |||||
| reply_buffer[0] = 0; | |||||
| //reply_buffer[0] = audio_rx_alternate_setting; | |||||
| } else { | |||||
| endpoint0_stall(); | |||||
| return; | |||||
| } | |||||
| break; | |||||
| case 0x0122: // SET_CUR (wValue=0, wIndex=interface, wLength=len) | |||||
| return; | |||||
| case 0x81A2: // GET_CUR (wValue=0, wIndex=interface, wLength=len) | |||||
| if (setup.wLength >= 3) { | |||||
| reply_buffer[0] = 44100 & 255; | |||||
| reply_buffer[1] = 44100 >> 8; | |||||
| reply_buffer[2] = 0; | |||||
| datalen = 3; | |||||
| data = reply_buffer; | |||||
| } else { | |||||
| endpoint0_stall(); | |||||
| return; | |||||
| } | |||||
| break; | |||||
| #endif | |||||
| default: | default: | ||||
| endpoint0_stall(); | endpoint0_stall(); | ||||
| return; | return; | ||||
| usb_reboot_timer = 5; | usb_reboot_timer = 5; | ||||
| endpoint0_transmit(NULL, 0); | endpoint0_transmit(NULL, 0); | ||||
| } | } | ||||
| #endif | |||||
| #ifdef AUDIO_INTERFACE | |||||
| if (setup.wRequestAndType == 0x0122 /* SET_CUR */) { | |||||
| // TODO: actually check data, do something with it? | |||||
| endpoint0_transmit(NULL, 0); | |||||
| } | |||||
| #endif | #endif | ||||
| // give the buffer back | // give the buffer back | ||||
| b->desc = BDT_DESC(EP0_SIZE, DATA1); | b->desc = BDT_DESC(EP0_SIZE, DATA1); |