HAL_WORD_REG_WRITE(0x50040, (0x200|0|(1>>1)<<12));
A_UART_HWINIT((22*1000*1000), 19200);
}
-
-extern SetupPacket ControlCmd;
-
-extern uint16_t *u8UsbDeviceDescriptor;
-extern uint16_t *u8ConfigDescriptorEX;
-extern uint16_t *pu8DescriptorEX;
-extern uint16_t u16TxRxCounter;
-extern BOOLEAN bGet_descriptor(void);
-
-uint16_t DeviceDescriptorPatch[9];
-uint16_t ConfigDescriptorPatch[30];
-
-
-#define BCD_DEVICE 6
-#define BCD_DEVICE_FW_SIGNATURE 0xffff
-#define EP3_TRANSFER_TYPE_OFFSET 17
-#define EP3_INT_INTERVAL 19
-#define EP4_TRANSFER_TYPE_OFFSET 21
-#define EP4_INT_INTERVAL 22
-
-BOOLEAN bGet_descriptor_patch(void)
-{
- int i;
- switch (mDEV_REQ_VALUE_HIGH()) {
- case 1:
- ath_hal_memcpy(DeviceDescriptorPatch,
- u8UsbDeviceDescriptor, sizeof(DeviceDescriptorPatch));
-
- DeviceDescriptorPatch[BCD_DEVICE] = BCD_DEVICE_FW_SIGNATURE;
-
- pu8DescriptorEX = DeviceDescriptorPatch;
- u16TxRxCounter = mTABLE_LEN(DeviceDescriptorPatch[0]);
- break;
- case 2:
- /* Copy ConfigDescriptor */
- ath_hal_memcpy(ConfigDescriptorPatch,
- u8ConfigDescriptorEX, sizeof(ConfigDescriptorPatch));
-
- /* place holder for EPx patches */
-
- switch (mDEV_REQ_VALUE_LOW())
- {
- case 0x00: // configuration no: 0
- pu8DescriptorEX = ConfigDescriptorPatch;
- u16TxRxCounter = ConfigDescriptorPatch[1];
- //u16TxRxCounter = 46;
- break;
- default:
- return FALSE;
- }
- break;
- default:
- return bGet_descriptor();
- }
-
- if (u16TxRxCounter > mDEV_REQ_LENGTH())
- u16TxRxCounter = mDEV_REQ_LENGTH();
-
- A_USB_EP0_TX_DATA();
- return TRUE;
-}
-
#endif
-
-
return bStandardCommand();
}
+/*
+ * usb descriptor patch
+ */
+
+extern uint16_t *u8ConfigDescriptorEX;
+extern uint16_t *pu8DescriptorEX;
+extern uint16_t u16TxRxCounter;
+extern SetupPacket ControlCmd;
+extern uint16_t *u8UsbDeviceDescriptor;
+extern BOOLEAN bGet_descriptor(void);
+
+uint16_t ConfigDescriptorPatch[30];
+uint16_t UsbDeviceDescriptorPatch[9];
+
+#define BCD_DEVICE_OFFSET 6
+#define BCD_DEVICE_FW_SIGNATURE 0xffff
+#define VENDOR_ID_OFFSET 4
+#define PRODUCT_ID_OFFSET 5
+
+#define EP3_TRANSFER_TYPE_OFFSET 17
+#define EP3_INT_INTERVAL 19
+#define EP4_TRANSFER_TYPE_OFFSET 21
+#define EP4_INT_INTERVAL 22
+
+BOOLEAN bGet_descriptor_patch(void)
+{
+ if (mDEV_REQ_VALUE_HIGH() == 1)
+ {
+ uint8_t *p = (uint8_t *)u8UsbDeviceDescriptor;
+
+ /* Copy Usb Device Descriptor */
+ ath_hal_memcpy(UsbDeviceDescriptorPatch, p,
+ sizeof(UsbDeviceDescriptorPatch));
+
+ /* Change bcdDevice. we need it to detect if FW
+ * was uploaded. */
+ UsbDeviceDescriptorPatch[BCD_DEVICE_OFFSET] =
+ BCD_DEVICE_FW_SIGNATURE;
+
+ pu8DescriptorEX = UsbDeviceDescriptorPatch;
+ u16TxRxCounter = mTABLE_LEN(u8UsbDeviceDescriptor[0]);
+
+ if (u16TxRxCounter > mDEV_REQ_LENGTH())
+ u16TxRxCounter = mDEV_REQ_LENGTH();
+
+ A_USB_EP0_TX_DATA();
+
+ return TRUE;
+ } else if (mDEV_REQ_VALUE_HIGH() == 2) {
+ uint8_t *p = (uint8_t *)u8ConfigDescriptorEX;
+
+ /* Copy ConfigDescriptor */
+ ath_hal_memcpy(ConfigDescriptorPatch, p,
+ sizeof(ConfigDescriptorPatch));
+
+ /* place holder for EPx patches */
+
+ if (mDEV_REQ_VALUE_LOW() == 0) {
+ /* configuration no: 0 */
+ pu8DescriptorEX = ConfigDescriptorPatch;
+ u16TxRxCounter = ConfigDescriptorPatch[1];
+ } else
+ return FALSE;
+
+ if (u16TxRxCounter > mDEV_REQ_LENGTH())
+ u16TxRxCounter = mDEV_REQ_LENGTH();
+
+ A_USB_EP0_TX_DATA();
+ return TRUE;
+ } else
+ return bGet_descriptor();
+}
+
MAGPIE_REG_USB_RX1_SWAP_DATA = 0x1;
MAGPIE_REG_USB_RX2_SWAP_DATA = 0x1;
}
-
-extern uint16_t *u8ConfigDescriptorEX;
-extern uint16_t *pu8DescriptorEX;
-extern uint16_t u16TxRxCounter;
-extern SetupPacket ControlCmd;
-
-extern uint16_t *u8UsbDeviceDescriptor;
-
-extern BOOLEAN bGet_descriptor(void);
-
-uint16_t ConfigDescriptorPatch[30];
-
-uint16_t UsbDeviceDescriptorPatch[9];
-#define BCD_DEVICE_OFFSET 6
-#define BCD_DEVICE_FW_SIGNATURE 0xffff
-#define VENDOR_ID_OFFSET 4
-#define PRODUCT_ID_OFFSET 5
-
-#define EP3_TRANSFER_TYPE_OFFSET 17
-#define EP3_INT_INTERVAL 19
-#define EP4_TRANSFER_TYPE_OFFSET 21
-#define EP4_INT_INTERVAL 22
-
-
-
- #define A_SFLASH_READ_4B(u32Data, start_addr) u32Data = *(uint32_t *)(0xf000000+start_addr);
- #define FLASH_SIZE 0x800000 //8M
- #define FLASH_USB_VENDOR_ID_OFFSET 0x86
- #define FLASH_USB_PRODUCT_ID_OFFSET 0x87
-
- // flash reserved size for saving eeprom data is 4K.
- #define EE_DATA_RESERVED_LEN 0x1000 //4K
-
-#define mLOW_MASK(u16) ((uint8_t) ((u16) & mMASK(8)))
-#define mHIGH_MASK(u16) ((uint8_t) ((u16) & ~mMASK(8)))
-
-/* (1234) -> 0034 */
-//#define mLOW_BYTE(u16) ((U_8)(u16))
-#define mLOW_BYTE(u16) mLOW_MASK(u16)
-/* (1234) -> 0012 */
-#define mHIGH_BYTE(u16) ((uint8_t) (((uint16_t) (u16)) >> 8))
-
-#define mLOW_WORD0(u32) ((uint16_t) ((u32) & 0xFFFF))
-#define mHIGH_WORD0(u32) ((uint16_t) ((u32) >> 16))
-
-/* (1234) -> 3412 */
-#define mSWAP_BYTE(u16) ((mLOW_MASK(u16) << 8) | mHIGH_BYTE(u16))
-
-BOOLEAN bGet_descriptor_patch(void)
-{
- if (mDEV_REQ_VALUE_HIGH() == 1)
- {
- uint8_t *p = (uint8_t *)u8UsbDeviceDescriptor;
- uint32_t u32Tmp=0;
- /* Copy Usb Device Descriptor */
- ath_hal_memcpy(UsbDeviceDescriptorPatch, p, sizeof(UsbDeviceDescriptorPatch));
-
- UsbDeviceDescriptorPatch[BCD_DEVICE_OFFSET] =
- BCD_DEVICE_FW_SIGNATURE;
-
- /* Patch for custom id from flash */
- if (bEepromExist == FALSE) {
- A_SFLASH_READ_4B(u32Tmp, FLASH_SIZE -
- EE_DATA_RESERVED_LEN + FLASH_USB_VENDOR_ID_OFFSET*2);
- UsbDeviceDescriptorPatch[VENDOR_ID_OFFSET] =
- mSWAP_BYTE(mLOW_WORD0(u32Tmp));
- UsbDeviceDescriptorPatch[PRODUCT_ID_OFFSET] =
- mSWAP_BYTE(mHIGH_WORD0(u32Tmp));
- }
-
- pu8DescriptorEX = UsbDeviceDescriptorPatch;
- u16TxRxCounter = mTABLE_LEN(u8UsbDeviceDescriptor[0]);
-
- if (u16TxRxCounter > mDEV_REQ_LENGTH())
- u16TxRxCounter = mDEV_REQ_LENGTH();
-
- A_USB_EP0_TX_DATA();
-
- //u16TxRxCounter = 18;
- return TRUE;
- }
- if (mDEV_REQ_VALUE_HIGH() == 2) {
- uint8_t *p = (uint8_t *)u8ConfigDescriptorEX;
-
- /* Copy ConfigDescriptor */
- ath_hal_memcpy(ConfigDescriptorPatch, p, sizeof(ConfigDescriptorPatch));
-
- /* place holder for EPx patches */
-
- switch (mDEV_REQ_VALUE_LOW())
- {
- case 0x00: // configuration no: 0
- pu8DescriptorEX = ConfigDescriptorPatch;
- u16TxRxCounter = ConfigDescriptorPatch[1];
- //u16TxRxCounter = 46;
- break;
- default:
- return FALSE;
- }
-
- if (u16TxRxCounter > mDEV_REQ_LENGTH())
- u16TxRxCounter = mDEV_REQ_LENGTH();
-
- A_USB_EP0_TX_DATA();
- return TRUE;
- }
- else {
- return bGet_descriptor();
- }
-}
-