//---------------------------------------------------------------------------- void usbReceiveNextPacketOnOEP0(void) { uint8_t bIndex,bByte; bByte = tEndPoint0DescriptorBlock.bOEPBCNT & EPBCNT_uint8_tCNT_MASK; if(wBytesRemainingOnOEP0 >= (uint16_t)bByte) { for(bIndex=0;bIndex<bByte;bIndex++) { *pbOEP0Buffer = abOEP0Buffer[bIndex]; pbOEP0Buffer++; } wBytesRemainingOnOEP0 -= (uint16_t)bByte; // clear the NAK bit for next packet if(wBytesRemainingOnOEP0 > 0) { usbClearOEP0ByteCount(); bStatusAction = STATUS_ACTION_DATA_OUT; } else { usbStallOEP0(); bStatusAction = STATUS_ACTION_NOTHING; } } else { usbStallOEP0(); bStatusAction = STATUS_ACTION_NOTHING; } }
void usbGetConfiguration(void) { usbClearOEP0ByteCount(); // for status stage wBytesRemainingOnIEP0 = 1; usbSendDataPacketOnEP0((uint8_t*)&bConfigurationNumber); }
VOID usbGetConfiguration(VOID) { usbClearOEP0ByteCount(); // for status stage wBytesRemainingOnIEP0 = 1; usbSendDataPacketOnEP0((PBYTE)&bConfigurationNumber); }
VOID usbGetInterface(VOID) { // not fully supported, return one byte, zero usbClearOEP0ByteCount(); // for status stage wBytesRemainingOnIEP0 = 0x02; abUsbRequestReturnData[0] = 0x00; // changed to report alternative setting byte abUsbRequestReturnData[1] = bInterfaceNumber; usbSendDataPacketOnEP0((PBYTE)&abUsbRequestReturnData[0]); }
BYTE usbGetHidDescriptor (VOID) { usbClearOEP0ByteCount(); wBytesRemainingOnIEP0 = 9; usbSendDataPacketOnEP0((PBYTE)&abromConfigurationDescriptorGroup.stHid[ INTERFACE_OFFSET(tSetupPacket.wIndex)].blength_hid_descriptor); return (FALSE); }
void usbReceiveDataPacketOnEP0(uint8_t* pbBuffer) { pbOEP0Buffer = pbBuffer; wBytesRemainingOnOEP0 = tSetupPacket.wLength; bStatusAction = STATUS_ACTION_DATA_OUT; usbClearOEP0ByteCount(); }
void usbGetInterfaceStatus(void) { // check bIndexL for index number (not supported) usbClearOEP0ByteCount(); // for status stage // Return two zero bytes wBytesRemainingOnIEP0 = 2; abUsbRequestReturnData[0] = 0x00; // changed to support multiple interfaces abUsbRequestReturnData[1] = bInterfaceNumber; usbSendDataPacketOnEP0((uint8_t*)&abUsbRequestReturnData[0]); }
uint8_t usbGetHidDescriptor (void) { usbClearOEP0ByteCount(); wBytesRemainingOnIEP0 = 9; #ifdef NON_COMPOSITE_MULTIPLE_INTERFACES usbSendDataPacketOnEP0((uint8_t*)&abromConfigurationDescriptorGroupHID.stHid[ INTERFACE_OFFSET(tSetupPacket.wIndex)].blength_hid_descriptor); #else usbSendDataPacketOnEP0((uint8_t*)&abromConfigurationDescriptorGroup.stHid[ INTERFACE_OFFSET(tSetupPacket.wIndex)].blength_hid_descriptor); #endif return (FALSE); }
VOID usbGetDeviceStatus(VOID) { /* for Self Powerd USB device if((abromConfigurationDescriptorGroup[OFFSET_CONFIG_DESCRIPTOR_POWER] & CFG_DESC_ATTR_SELF_POWERED) == CFG_DESC_ATTR_SELF_POWERED) abUsbRequestReturnData[0] = DEVICE_STATUS_SELF_POWER; */ usbClearOEP0ByteCount(); // for status stage // Return self power status and remote wakeup status wBytesRemainingOnIEP0 = 2; usbSendDataPacketOnEP0((PBYTE)&abUsbRequestReturnData[0]); }
void usbGetDeviceStatus(void) { if((abromConfigurationDescriptorGroup[OFFSET_CONFIG_DESCRIPTOR_POWER] & CFG_DESC_ATTR_SELF_POWERED) == CFG_DESC_ATTR_SELF_POWERED) abUsbRequestReturnData[0] = DEVICE_STATUS_SELF_POWER; if(bRemoteWakeup == ENABLE) abUsbRequestReturnData[0] |= DEVICE_STATUS_REMOTE_WAKEUP; usbClearOEP0ByteCount(); // for status stage // Return self power status and remote wakeup status wBytesRemainingOnIEP0 = 2; usbSendDataPacketOnEP0((uint8_t*)&abUsbRequestReturnData[0]); }
void usbGetEndpointStatus(void) { uint8_t bEndpointNumber; // Endpoint number is bIndexL bEndpointNumber = tSetupPacket.wIndex & EP_DESC_ADDR_EP_NUM; if(bEndpointNumber == 0x00){ if((tSetupPacket.wIndex & EP_DESC_ADDR_DIR_IN) == EP_DESC_ADDR_DIR_IN){ // input endpoint 0 abUsbRequestReturnData[0] = (uint8_t)(tEndPoint0DescriptorBlock.bIEPCNFG & EPCNF_STALL); }else{ // output endpoint 0 abUsbRequestReturnData[0] = (uint8_t)(tEndPoint0DescriptorBlock.bOEPCNFG & EPCNF_STALL); } abUsbRequestReturnData[0] = abUsbRequestReturnData[0] >> 3; // STALL is on bit 3 usbClearOEP0ByteCount(); // for status stage wBytesRemainingOnIEP0 = 0x02; usbSendDataPacketOnEP0((uint8_t*)&abUsbRequestReturnData[0]); }else{
VOID usbGetStringDescriptor(VOID) { WORD bIndex; BYTE bVal = (BYTE)tSetupPacket.wValue; usbClearOEP0ByteCount(); // for status stage #if (USB_STR_INDEX_SERNUM != 0) if(bVal == 0x03) { wBytesRemainingOnIEP0 = abramSerialStringDescriptor[0]; usbSendDataPacketOnEP0((PBYTE)&abramSerialStringDescriptor); } else #endif { bIndex = 0x00; while(bVal-- > 0x00) bIndex += abromStringDescriptor[bIndex]; wBytesRemainingOnIEP0 = abromStringDescriptor[bIndex]; usbSendDataPacketOnEP0((PBYTE)&abromStringDescriptor[bIndex]); } }
void usbGetStringDescriptor(void) { uint16_t bIndex; uint8_t bVal = (uint8_t)tSetupPacket.wValue; usbClearOEP0ByteCount(); // for status stage #if (USB_STR_INDEX_SERNUM != 0) if(bVal == 0x03) { wBytesRemainingOnIEP0 = abramSerialStringDescriptor[0]; usbSendDataPacketOnEP0((uint8_t*)&abramSerialStringDescriptor); } else #endif { bIndex = 0x00; while(bVal-- > 0x00) bIndex += abromStringDescriptor[bIndex]; wBytesRemainingOnIEP0 = abromStringDescriptor[bIndex]; usbSendDataPacketOnEP0((uint8_t*)&abromStringDescriptor[bIndex]); } }
VOID usbGetEndpointStatus(VOID) { BYTE bEndpointNumber; // Endpoint number is bIndexL bEndpointNumber = tSetupPacket.wIndex & EP_DESC_ADDR_EP_NUM; if(bEndpointNumber == 0x00){ if((tSetupPacket.wIndex & EP_DESC_ADDR_DIR_IN) == EP_DESC_ADDR_DIR_IN){ // input endpoint 0 abUsbRequestReturnData[0] = (BYTE)(tEndPoint0DescriptorBlock.bIEPCNFG & EPCNF_STALL); }else{ // output endpoint 0 abUsbRequestReturnData[0] = (BYTE)(tEndPoint0DescriptorBlock.bOEPCNFG & EPCNF_STALL); } abUsbRequestReturnData[0] = abUsbRequestReturnData[0] >> 3; // STALL is on bit 3 usbClearOEP0ByteCount(); // for status stage wBytesRemainingOnIEP0 = 0x02; usbSendDataPacketOnEP0((PBYTE)&abUsbRequestReturnData[0]); }else{ // EP is from EP1 to EP7 while C language start from 0 // Firmware should NOT response if specified endpoint is not supported. (charpter 8) if(tSetupPacket.wIndex & EP_DESC_ADDR_DIR_IN){
void usbGetDeviceDescriptor(void) { usbClearOEP0ByteCount(); wBytesRemainingOnIEP0 = SIZEOF_DEVICE_DESCRIPTOR; usbSendDataPacketOnEP0((uint8_t*) &abromDeviceDescriptor); }
VOID usbGetConfigurationDescriptor(VOID) { usbClearOEP0ByteCount(); wBytesRemainingOnIEP0 = sizeof(abromConfigurationDescriptorGroup); usbSendDataPacketOnEP0((PBYTE)&abromConfigurationDescriptorGroup); }
void usbGetConfigurationDescriptor(void) { usbClearOEP0ByteCount(); wBytesRemainingOnIEP0 = sizeof(abromConfigurationDescriptorGroup); usbSendDataPacketOnEP0((uint8_t*)&abromConfigurationDescriptorGroup); }
VOID usbGetDeviceDescriptor(VOID) { usbClearOEP0ByteCount(); wBytesRemainingOnIEP0 = SIZEOF_DEVICE_DESCRIPTOR; usbSendDataPacketOnEP0((PBYTE) &abromDeviceDescriptor); }