void HID_Get_Report() { UCHAR bDescriptor = MSB(ControlData.DeviceRequest.wValue); UCHAR bDescriptorIndex = LSB(ControlData.DeviceRequest.wValue); USHORT bLen = ControlData.DeviceRequest.wLength; // printf("bDescri = %d : ",bDescriptor); // printf("Index = %d\n",bDescriptorIndex); if(sizeof(new_report) <= bLen){ Chap9_BurstTransmitEP0((PUCHAR)&new_report, sizeof(new_report)); } hid_settings.state = connected; }
void Chap9_GetDescriptor(void) { UCHAR bDescriptor = MSB(ControlData.DeviceRequest.wValue); UCHAR bDescriptorIndex = LSB(ControlData.DeviceRequest.wValue); //printf("bDescri %d",bDescriptor); // printf("Index %d\n",bDescriptorIndex); // printf("USB_DEVICE_DESCRIPTORsize %d\n",sizeof(USB_DEVICE_DESCRIPTOR)); // printf("CONFIGURATIONsize %d\n",sizeof(USB_CONFIGURATION_DESCRIPTOR_a)); switch(bDescriptor) { //sDevice sConfiguration //sizeof(struct CONFIGURATION) //sizeof( struct DEVICE) case USB_DEVICE_DESCRIPTOR_TYPE:{//1 Chap9_BurstTransmitEP0( (PUCHAR)&DeviceDescr , sizeof(USB_DEVICE_DESCRIPTOR)); // Chap9_BurstTransmitEP0((PUCHAR)&sDevice,sizeof(struct DEVICE)); break;} case USB_CONFIGURATION_DESCRIPTOR_TYPE:{//2 // Chap9_BurstTransmitEP0((PUCHAR)&ConfigDescr, CONFIG_DESCRIPTOR_LENGTH); //printf("\nConfigDescr \n"); Chap9_BurstTransmitEP0((PUCHAR)&ConfigDescr_a, sizeof(USB_CONFIGURATION_DESCRIPTOR_a));//sizeof(USB_CONFIGURATION_DESCRIPTOR)); //Chap9_SetConfiguration(); // config_endpoint(); // printf("\nInterfaceDescr0 "); Chap9_BurstTransmitEP0((PUCHAR)&InterfaceDescr0, sizeof(USB_INTERFACE_DESCRIPTOR)); // printf("\nEP1_TXDesc "); Chap9_BurstTransmitEP0((PUCHAR)&EP1_TXDescr, sizeof(USB_ENDPOINT_DESCRIPTOR)); // printf("\nEP1_RXDescr "); Chap9_BurstTransmitEP0((PUCHAR)&EP1_RXDescr, sizeof(USB_ENDPOINT_DESCRIPTOR)); // printf("\nEP2_TXDescr "); Chap9_BurstTransmitEP0((PUCHAR)&EP2_TXDescr, sizeof(USB_ENDPOINT_DESCRIPTOR)); // printf("\nEP2_RXDescr "); Chap9_BurstTransmitEP0((PUCHAR)&EP2_RXDescr, sizeof(USB_ENDPOINT_DESCRIPTOR)); break;} case USB_STRING_DESCRIPTOR_TYPE://3 switch(bDescriptorIndex) { case STR_INDEX_LANGUAGE: printf("\n str1 \n"); Chap9_BurstTransmitEP0((PUCHAR)&strLanguage, sizeof(USB_STRING_LANGUAGE_DESCRIPTOR)); break; case STR_INDEX_MANUFACTURER: printf("\n str2 \n");Chap9_BurstTransmitEP0((PUCHAR)&strManufacturer, sizeof(USB_STRING_MANUFACTURER_DESCRIPTOR)); break; case STR_INDEX_PRODUCT: printf("\n str3 \n");Chap9_BurstTransmitEP0((PUCHAR)&strProduct, sizeof(USB_STRING_PRODUCT_DESCRIPTOR)); break; case STR_INDEX_SERIALNUMBER: printf("\n str4 \n");Chap9_BurstTransmitEP0((PUCHAR)&strSerialNum, sizeof(USB_STRING_SERIALNUMBER_DESCRIPTOR)); break; case STR_INDEX_CONFIGURATION: printf("\n str5 \n");Chap9_BurstTransmitEP0((PUCHAR)&strConfiguration, sizeof(USB_STRING_CONFIGURATION_DESCRIPTOR) ); break; case STR_INDEX_INTERFACE: printf("\n str6 \n");Chap9_BurstTransmitEP0((PUCHAR)&strInterface, sizeof(USB_STRING_INTERFACE_DESCRIPTOR) ); break; default: printf("\n str7 \n");Chap9_StallEP0InControlRead(); break; } case USB_INTERFACE_DESCRIPTOR_TYPE: case USB_ENDPOINT_DESCRIPTOR_TYPE: case USB_POWER_DESCRIPTOR_TYPE: default: Chap9_StallEP0InControlRead(); break; } }
void Chap9_GetDescriptor(void) { UCHAR bDescriptor = MSB(ControlData.DeviceRequest.wValue); UCHAR bDescriptorIndex = LSB(ControlData.DeviceRequest.wValue); //printf("bDescri %d\n",bDescriptor); //printf("Index %d\n",bDescriptorIndex); ////printf("USB_DEVICE_DESCRIPTORsize %d\n",sizeof(USB_DEVICE_DESCRIPTOR)); // //printf("CONFIGURATIONsize %d\n",sizeof(USB_CONFIGURATION_DESCRIPTOR_a)); switch(bDescriptor) { //sDevice sConfiguration //sizeof(struct CONFIGURATION) //sizeof( struct DEVICE) case USB_DEVICE_DESCRIPTOR_TYPE://1 { //printf("entering device descriptor"); Chap9_BurstTransmitEP0( (PUCHAR)&DeviceDescr , sizeof(USB_DEVICE_DESCRIPTOR)); //Chap9_BurstTransmitEP0((PUCHAR)&sDevice,sizeof(struct DEVICE)); //printf("exiting device descriptor"); break; } case USB_CONFIGURATION_DESCRIPTOR_TYPE://2 { // Chap9_BurstTransmitEP0((PUCHAR)&ConfigDescr, CONFIG_DESCRIPTOR_LENGTH); printf("\nConfigDescr "); Chap9_BurstTransmitEP0((PUCHAR)&ConfigDescr, sizeof(USB_CONFIGURATION_DESCRIPTOR));//sizeof(USB_CONFIGURATION_DESCRIPTOR)); //Chap9_SetConfiguration(); //config_endpoint(); //printf("\nInterfaceDescr0 "); //Chap9_BurstTransmitEP0((PUCHAR)&InterfaceDescr, sizeof(USB_INTERFACE_DESCRIPTOR)); //printf("\nHID_TXDesc "); //Chap9_BurstTransmitEP0( (PUCHAR)&hidDescr , sizeof(USB_HID_DESCRIPTOR)); //printf("\nEP1_TXDesc "); //Chap9_BurstTransmitEP0((PUCHAR)&EP_Descr, sizeof(USB_ENDPOINT_DESCRIPTOR)); ////printf("\nEP1_RXDescr "); Chap9_BurstTransmitEP0((PUCHAR)&EP1_RXDescr, sizeof(USB_ENDPOINT_DESCRIPTOR)); ////printf("\nEP2_TXDescr "); Chap9_BurstTransmitEP0((PUCHAR)&EP2_TXDescr, sizeof(USB_ENDPOINT_DESCRIPTOR)); ////printf("\nEP2_RXDescr "); Chap9_BurstTransmitEP0((PUCHAR)&EP2_RXDescr, sizeof(USB_ENDPOINT_DESCRIPTOR)); break; } case USB_STRING_DESCRIPTOR_TYPE://3 switch(bDescriptorIndex) { case STR_INDEX_LANGUAGE: //printf("\n str1 \n"); Chap9_BurstTransmitEP0((PUCHAR)&strLanguage, sizeof(USB_STRING_LANGUAGE_DESCRIPTOR)); break; case STR_INDEX_MANUFACTURER: //printf("\n str2 \n");Chap9_BurstTransmitEP0((PUCHAR)&strManufacturer, sizeof(USB_STRING_MANUFACTURER_DESCRIPTOR)); break; case STR_INDEX_PRODUCT: //printf("\n str3 \n");Chap9_BurstTransmitEP0((PUCHAR)&strProduct, sizeof(USB_STRING_PRODUCT_DESCRIPTOR)); break; case STR_INDEX_SERIALNUMBER: //printf("\n str4 \n");Chap9_BurstTransmitEP0((PUCHAR)&strSerialNum, sizeof(USB_STRING_SERIALNUMBER_DESCRIPTOR)); break; case STR_INDEX_CONFIGURATION: //printf("\n str5 \n");Chap9_BurstTransmitEP0((PUCHAR)&strConfiguration, sizeof(USB_STRING_CONFIGURATION_DESCRIPTOR) ); break; case STR_INDEX_INTERFACE: //printf("\n str6 \n");Chap9_BurstTransmitEP0((PUCHAR)&strInterface, sizeof(USB_STRING_INTERFACE_DESCRIPTOR) ); break; default: //printf("\n str7 \n");Chap9_StallEP0InControlRead(); break; } //Mohamed Maged's code starts case USB_HID_DESCRIPTOR_TYPE://0x21 { //printf("entering hid descriptor"); Chap9_BurstTransmitEP0( (PUCHAR)&hidDescr , sizeof(USB_HID_DESCRIPTOR)); //printf("exiting hid descriptor"); break; } case USB_Report_DESCRIPTOR_TYPE://0x21 { printf("sending Report descriptor \n"); Chap9_BurstTransmitEP0( (PUCHAR)&REPORT_DESCRIPTOR , sizeof(REPORT_DESCRIPTOR)); //filling Ep01 buffer to generate an EP01 done interrupt UCHAR rbuff[4]={0x00,0x0a,0x0b,0x0c}; Hal4D13_WriteEndpoint(EPINDEX4EP01,(PUCHAR)&rbuff,8); //Hal4D13_WriteEndpoint(EPINDEX4EP01,(PUCHAR)&report1,4); //printf("exiting report descriptor"); break; } case USB_INTERFACE_DESCRIPTOR_TYPE: { //printf("entering interface descriptor"); Chap9_BurstTransmitEP0( (PUCHAR)&InterfaceDescr , sizeof(USB_INTERFACE_DESCRIPTOR)); //printf("exiting interface descriptor"); break; } case USB_ENDPOINT_DESCRIPTOR_TYPE: { //printf("entering EP descriptor"); Chap9_BurstTransmitEP0( (PUCHAR)&EP_Descr , sizeof(USB_ENDPOINT_DESCRIPTOR)); //printf("exiting Ep descriptor"); break; } //end case USB_POWER_DESCRIPTOR_TYPE: default: Chap9_StallEP0InControlRead(); break; } }