add TUSB_CFG_PROUDCT_ID check
move USB_MAX_EP_NUM to device dependency - lpc43 --> 6 - lpc11/13 --> 5
This commit is contained in:
parent
52f18f3784
commit
9f9adca03b
|
@ -132,14 +132,14 @@ tusb_descriptor_device_t app_tusb_desc_device =
|
||||||
.bMaxPacketSize0 = USB_MAX_PACKET0,
|
.bMaxPacketSize0 = USB_MAX_PACKET0,
|
||||||
|
|
||||||
.idVendor = TUSB_CFG_DEVICE_VENDORID,
|
.idVendor = TUSB_CFG_DEVICE_VENDORID,
|
||||||
.idProduct = USB_PRODUCT_ID,
|
.idProduct = TUSB_CFG_PRODUCT_ID,
|
||||||
.bcdDevice = 0x0100,
|
.bcdDevice = 0x0100,
|
||||||
|
|
||||||
.iManufacturer = 0x01,
|
.iManufacturer = 0x01,
|
||||||
.iProduct = 0x02,
|
.iProduct = 0x02,
|
||||||
.iSerialNumber = 0x03,
|
.iSerialNumber = 0x03,
|
||||||
|
|
||||||
.bNumConfigurations = 0x01 // TODO configuration number
|
.bNumConfigurations = 0x01 // TODO multiple configurations
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -98,10 +98,15 @@ typedef ATTR_PACKED_STRUCT(struct)
|
||||||
|
|
||||||
#define TOTAL_INTEFACES (INTERFACES_OF_CDC + INTERFACES_OF_HID_KEYBOARD + INTERFACES_OF_HID_MOUSE + INTERFACES_OF_HID_GENERIC + INTERFACES_OF_MASS_STORAGE)
|
#define TOTAL_INTEFACES (INTERFACES_OF_CDC + INTERFACES_OF_HID_KEYBOARD + INTERFACES_OF_HID_MOUSE + INTERFACES_OF_HID_GENERIC + INTERFACES_OF_MASS_STORAGE)
|
||||||
|
|
||||||
|
|
||||||
|
// each combination of interfaces need to have different productid, as windows will bind & remember device driver after the
|
||||||
|
// first plug.
|
||||||
|
#ifndef TUSB_CFG_PRODUCT_ID
|
||||||
// Bitmap: MassStorage | Generic | Mouse | Key | CDC
|
// Bitmap: MassStorage | Generic | Mouse | Key | CDC
|
||||||
#define PRODUCTID_BITMAP(interface, n) ( (INTERFACES_OF_##interface ? 1 : 0) << (n) )
|
#define PRODUCTID_BITMAP(interface, n) ( (INTERFACES_OF_##interface ? 1 : 0) << (n) )
|
||||||
#define USB_PRODUCT_ID (0x2000 | ( PRODUCTID_BITMAP(CDC, 0) | PRODUCTID_BITMAP(HID_KEYBOARD, 1) | PRODUCTID_BITMAP(HID_MOUSE, 2) | \
|
#define TUSB_CFG_PRODUCT_ID (0x2000 | ( PRODUCTID_BITMAP(CDC, 0) | PRODUCTID_BITMAP(HID_KEYBOARD, 1) | PRODUCTID_BITMAP(HID_MOUSE, 2) | \
|
||||||
PRODUCTID_BITMAP(HID_GENERIC, 3) | PRODUCTID_BITMAP(MASS_STORAGE, 4) ) )
|
PRODUCTID_BITMAP(HID_GENERIC, 3) | PRODUCTID_BITMAP(MASS_STORAGE, 4) ) )
|
||||||
|
#endif
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////
|
||||||
typedef ATTR_PACKED_STRUCT(struct)
|
typedef ATTR_PACKED_STRUCT(struct)
|
||||||
|
|
|
@ -74,14 +74,70 @@ ErrorCode_t HID_SetReport( USBD_HANDLE_T hHid, USB_SETUP_PACKET* pSetup, uint8_t
|
||||||
ErrorCode_t HID_EpIn_Hdlr (USBD_HANDLE_T hUsb, void* data, uint32_t event);
|
ErrorCode_t HID_EpIn_Hdlr (USBD_HANDLE_T hUsb, void* data, uint32_t event);
|
||||||
ErrorCode_t HID_EpOut_Hdlr (USBD_HANDLE_T hUsb, void* data, uint32_t event);
|
ErrorCode_t HID_EpOut_Hdlr (USBD_HANDLE_T hUsb, void* data, uint32_t event);
|
||||||
|
|
||||||
//--------------------------------------------------------------------+
|
|
||||||
// IMPLEMENTATION
|
|
||||||
//--------------------------------------------------------------------+
|
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------+
|
||||||
|
// APPLICATION API
|
||||||
|
//--------------------------------------------------------------------+
|
||||||
|
#if TUSB_CFG_DEVICE_HID_KEYBOARD
|
||||||
|
tusb_error_t tusbd_hid_keyboard_send_report(tusb_keyboard_report_t *p_kbd_report)
|
||||||
|
{
|
||||||
|
// uint32_t start_time = systickGetSecondsActive();
|
||||||
|
// while (bKeyChanged) // TODO blocking while previous key has yet sent - can use fifo to improve this
|
||||||
|
// {
|
||||||
|
// ASSERT_MESSAGE(systickGetSecondsActive() - start_time < 5, ERR_FAILED, "HID Keyboard Timeout");
|
||||||
|
// }
|
||||||
|
|
||||||
|
if (bKeyChanged)
|
||||||
|
{
|
||||||
|
return TUSB_ERROR_FAILED;
|
||||||
|
}
|
||||||
|
|
||||||
|
ASSERT_PTR(p_kbd_report, TUSB_ERROR_FAILED);
|
||||||
|
|
||||||
|
hid_keyboard_report = *p_kbd_report;
|
||||||
|
bKeyChanged = true;
|
||||||
|
|
||||||
|
return TUSB_ERROR_NONE;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if TUSB_CFG_DEVICE_HID_MOUSE
|
||||||
|
tusb_error_t tusbd_hid_mouse_send_report(tusb_mouse_report_t *p_mouse_report)
|
||||||
|
{
|
||||||
|
// uint32_t start_time = systickGetSecondsActive();
|
||||||
|
// while (bMouseChanged) // TODO Block while previous key hasn't been sent - can use fifo to improve this
|
||||||
|
// {
|
||||||
|
// ASSERT_MESSAGE(systickGetSecondsActive() - start_time < 5, ERR_FAILED, "HID Mouse Timeout");
|
||||||
|
// }
|
||||||
|
|
||||||
|
if (bMouseChanged)
|
||||||
|
{
|
||||||
|
return TUSB_ERROR_FAILED;
|
||||||
|
}
|
||||||
|
|
||||||
|
hid_mouse_report = *p_mouse_report;
|
||||||
|
bMouseChanged = true;
|
||||||
|
|
||||||
|
return TUSB_ERROR_NONE;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
// CLASS-USBH API (don't require to verify parameters)
|
// CLASS-USBH API (don't require to verify parameters)
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
|
tusb_error_t hidd_configured(USBD_HANDLE_T hUsb)
|
||||||
|
{
|
||||||
|
#if TUSB_CFG_DEVICE_HID_KEYBOARD
|
||||||
|
ROM_API->hw->WriteEP(hUsb , HID_KEYBOARD_EP_IN , (uint8_t* ) &hid_keyboard_report , sizeof(tusb_keyboard_report_t) ); // initial packet for IN endpoint , will not work if omitted
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if TUSB_CFG_DEVICE_HID_MOUSE
|
||||||
|
ROM_API->hw->WriteEP(hUsb , HID_MOUSE_EP_IN , (uint8_t* ) &hid_mouse_report , sizeof(tusb_mouse_report_t) ); // initial packet for IN endpoint, will not work if omitted
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return TUSB_ERROR_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
tusb_error_t hidd_init(tusb_descriptor_interface_t const * p_interface_desc, uint16_t *p_length)
|
tusb_error_t hidd_init(tusb_descriptor_interface_t const * p_interface_desc, uint16_t *p_length)
|
||||||
{
|
{
|
||||||
uint8_t const *p_desc = (uint8_t const *) p_interface_desc;
|
uint8_t const *p_desc = (uint8_t const *) p_interface_desc;
|
||||||
|
@ -153,73 +209,14 @@ tusb_error_t hidd_interface_init(tusb_descriptor_interface_t const *pIntfDesc, u
|
||||||
};
|
};
|
||||||
|
|
||||||
ASSERT( (pIntfDesc != NULL) && (pIntfDesc->bInterfaceClass == USB_DEVICE_CLASS_HUMAN_INTERFACE), ERR_FAILED);
|
ASSERT( (pIntfDesc != NULL) && (pIntfDesc->bInterfaceClass == USB_DEVICE_CLASS_HUMAN_INTERFACE), ERR_FAILED);
|
||||||
|
|
||||||
ASSERT( LPC_OK == ROM_API->hid->init(romdriver_hdl, &hid_param), TUSB_ERROR_FAILED );
|
ASSERT( LPC_OK == ROM_API->hid->init(romdriver_hdl, &hid_param), TUSB_ERROR_FAILED );
|
||||||
|
|
||||||
/* update memory variables */
|
|
||||||
// *mem_base += (*mem_size - hid_param.mem_size);
|
|
||||||
// *mem_size = hid_param.mem_size;
|
|
||||||
|
|
||||||
return TUSB_ERROR_NONE;
|
return TUSB_ERROR_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
tusb_error_t hidd_configured(USBD_HANDLE_T hUsb)
|
//--------------------------------------------------------------------+
|
||||||
{
|
// IMPLEMENTATION
|
||||||
#if TUSB_CFG_DEVICE_HID_KEYBOARD
|
//--------------------------------------------------------------------+
|
||||||
ROM_API->hw->WriteEP(hUsb , HID_KEYBOARD_EP_IN , (uint8_t* ) &hid_keyboard_report , sizeof(tusb_keyboard_report_t) ); // initial packet for IN endpoint , will not work if omitted
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if TUSB_CFG_DEVICE_HID_MOUSE
|
|
||||||
ROM_API->hw->WriteEP(hUsb , HID_MOUSE_EP_IN , (uint8_t* ) &hid_mouse_report , sizeof(tusb_mouse_report_t) ); // initial packet for IN endpoint, will not work if omitted
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return TUSB_ERROR_NONE;
|
|
||||||
}
|
|
||||||
|
|
||||||
#if TUSB_CFG_DEVICE_HID_KEYBOARD
|
|
||||||
tusb_error_t tusbd_hid_keyboard_send_report(tusb_keyboard_report_t *p_kbd_report)
|
|
||||||
{
|
|
||||||
// uint32_t start_time = systickGetSecondsActive();
|
|
||||||
// while (bKeyChanged) // TODO blocking while previous key has yet sent - can use fifo to improve this
|
|
||||||
// {
|
|
||||||
// ASSERT_MESSAGE(systickGetSecondsActive() - start_time < 5, ERR_FAILED, "HID Keyboard Timeout");
|
|
||||||
// }
|
|
||||||
|
|
||||||
if (bKeyChanged)
|
|
||||||
{
|
|
||||||
return TUSB_ERROR_FAILED;
|
|
||||||
}
|
|
||||||
|
|
||||||
ASSERT_PTR(p_kbd_report, TUSB_ERROR_FAILED);
|
|
||||||
|
|
||||||
hid_keyboard_report = *p_kbd_report;
|
|
||||||
bKeyChanged = true;
|
|
||||||
|
|
||||||
return TUSB_ERROR_NONE;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if TUSB_CFG_DEVICE_HID_MOUSE
|
|
||||||
tusb_error_t tusbd_hid_mouse_send_report(tusb_mouse_report_t *p_mouse_report)
|
|
||||||
{
|
|
||||||
// uint32_t start_time = systickGetSecondsActive();
|
|
||||||
// while (bMouseChanged) // TODO Block while previous key hasn't been sent - can use fifo to improve this
|
|
||||||
// {
|
|
||||||
// ASSERT_MESSAGE(systickGetSecondsActive() - start_time < 5, ERR_FAILED, "HID Mouse Timeout");
|
|
||||||
// }
|
|
||||||
|
|
||||||
if (bMouseChanged)
|
|
||||||
{
|
|
||||||
return TUSB_ERROR_FAILED;
|
|
||||||
}
|
|
||||||
|
|
||||||
hid_mouse_report = *p_mouse_report;
|
|
||||||
bMouseChanged = true;
|
|
||||||
|
|
||||||
return TUSB_ERROR_NONE;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
ErrorCode_t HID_GetReport( USBD_HANDLE_T hHid, USB_SETUP_PACKET* pSetup, uint8_t** pBuffer, uint16_t* plength)
|
ErrorCode_t HID_GetReport( USBD_HANDLE_T hHid, USB_SETUP_PACKET* pSetup, uint8_t** pBuffer, uint16_t* plength)
|
||||||
{
|
{
|
||||||
USB_HID_CTRL_T* pHidCtrl = (USB_HID_CTRL_T*) hHid;
|
USB_HID_CTRL_T* pHidCtrl = (USB_HID_CTRL_T*) hHid;
|
||||||
|
|
|
@ -53,6 +53,8 @@
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define ENDPOINT_OUT_LOGICAL_TO_PHYSICAL(addr) (addr)
|
||||||
|
#define ENDPOINT_IN_LOGICAL_TO_PHYSICAL(addr) ((addr) | 0x80)
|
||||||
#define STRING_LEN_BYTE2UNICODE(n) (2 + ((n)<<1))
|
#define STRING_LEN_BYTE2UNICODE(n) (2 + ((n)<<1))
|
||||||
|
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
|
|
|
@ -47,22 +47,28 @@
|
||||||
#define _TUSB_DCD_NXP_ROMDRIVER_H_
|
#define _TUSB_DCD_NXP_ROMDRIVER_H_
|
||||||
|
|
||||||
#include "common/common.h"
|
#include "common/common.h"
|
||||||
#include "romdriver/mw_usbd_rom_api.h"
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#define USB_MAX_IF_NUM 8 // maximum interface number supported, should be fixed to 8
|
||||||
|
|
||||||
#if (MCU == MCU_LPC18XX) || (MCU == MCU_LPC43XX)
|
#if (MCU == MCU_LPC18XX) || (MCU == MCU_LPC43XX)
|
||||||
#include "dcd_lpc18xx_lpc43xx.h"
|
#include "dcd_lpc18xx_lpc43xx.h"
|
||||||
#define ROM_API ( * ((USBD_API_T**) NXP_ROMDRIVER_FUNCTION_ADDR) )
|
#define ROM_API ( * ((USBD_API_T**) NXP_ROMDRIVER_FUNCTION_ADDR) )
|
||||||
|
#define USB_MAX_EP_NUM 6
|
||||||
#elif (MCU == MCU_LPC13UXX) || (MCU == MCU_LPC11UXX)
|
#elif (MCU == MCU_LPC13UXX) || (MCU == MCU_LPC11UXX)
|
||||||
#include "dcd_lpc11uxx_lpc13xx.h"
|
#include "dcd_lpc11uxx_lpc13xx.h"
|
||||||
#define ROM_API ( * (*((USBD_API_T***) NXP_ROMDRIVER_FUNCTION_ADDR)) )
|
#define ROM_API ( * (*((USBD_API_T***) NXP_ROMDRIVER_FUNCTION_ADDR)) )
|
||||||
|
#define USB_MAX_EP_NUM 5
|
||||||
#else
|
#else
|
||||||
#error forgot something, thach ?
|
#error forgot something, thach ?
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include "romdriver/mw_usbd_rom_api.h"
|
||||||
|
|
||||||
extern USBD_HANDLE_T romdriver_hdl;
|
extern USBD_HANDLE_T romdriver_hdl;
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|
|
@ -26,7 +26,7 @@
|
||||||
|
|
||||||
#include "error.h"
|
#include "error.h"
|
||||||
#include "mw_usbd.h"
|
#include "mw_usbd.h"
|
||||||
#include "tusb_option.h"
|
#include "../dcd_nxp_romdriver.h"
|
||||||
|
|
||||||
/** \file
|
/** \file
|
||||||
* \brief ROM API for USB device stack.
|
* \brief ROM API for USB device stack.
|
||||||
|
|
|
@ -51,7 +51,10 @@
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
#include "common/common.h"
|
#include "common/common.h"
|
||||||
#include "osal/osal.h" // TODO refractor move to common.h ?
|
#include "osal/osal.h" // TODO refractor move to common.h ?
|
||||||
|
|
||||||
|
#ifdef _TINY_USB_SOURCE_FILE_
|
||||||
#include "dcd.h" // TODO hide from application include
|
#include "dcd.h" // TODO hide from application include
|
||||||
|
#endif
|
||||||
//#include "tusb_descriptors.h"
|
//#include "tusb_descriptors.h"
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|
|
@ -167,9 +167,7 @@
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// TODO Device APP
|
|
||||||
#define USB_MAX_IF_NUM 8
|
|
||||||
#define USB_MAX_EP_NUM 5
|
|
||||||
|
|
||||||
#define USB_FS_MAX_BULK_PACKET 64
|
#define USB_FS_MAX_BULK_PACKET 64
|
||||||
#define USB_HS_MAX_BULK_PACKET USB_FS_MAX_BULK_PACKET /* Full speed device only */
|
#define USB_HS_MAX_BULK_PACKET USB_FS_MAX_BULK_PACKET /* Full speed device only */
|
||||||
|
@ -178,14 +176,13 @@
|
||||||
#define USB_MAX_PACKET0 64
|
#define USB_MAX_PACKET0 64
|
||||||
|
|
||||||
/* HID In/Out Endpoint Address */
|
/* HID In/Out Endpoint Address */
|
||||||
#define HID_KEYBOARD_EP_IN USB_ENDPOINT_IN(1)
|
#define HID_KEYBOARD_EP_IN ENDPOINT_IN_LOGICAL_TO_PHYSICAL(1)
|
||||||
//#define HID_KEYBOARD_EP_OUT USB_ENDPOINT_OUT(1)
|
#define HID_MOUSE_EP_IN ENDPOINT_IN_LOGICAL_TO_PHYSICAL(4)
|
||||||
#define HID_MOUSE_EP_IN USB_ENDPOINT_IN(4)
|
|
||||||
|
|
||||||
/* CDC Endpoint Address */
|
/* CDC Endpoint Address */
|
||||||
#define CDC_NOTIFICATION_EP USB_ENDPOINT_IN(2)
|
#define CDC_NOTIFICATION_EP ENDPOINT_IN_LOGICAL_TO_PHYSICAL(2)
|
||||||
#define CDC_DATA_EP_OUT USB_ENDPOINT_OUT(3)
|
#define CDC_DATA_EP_OUT ENDPOINT_OUT_LOGICAL_TO_PHYSICAL(3)
|
||||||
#define CDC_DATA_EP_IN USB_ENDPOINT_IN(3)
|
#define CDC_DATA_EP_IN ENDPOINT_IN_LOGICAL_TO_PHYSICAL(3)
|
||||||
|
|
||||||
#define CDC_NOTIFICATION_EP_MAXPACKETSIZE 8
|
#define CDC_NOTIFICATION_EP_MAXPACKETSIZE 8
|
||||||
#define CDC_DATA_EP_MAXPACKET_SIZE 16
|
#define CDC_DATA_EP_MAXPACKET_SIZE 16
|
||||||
|
|
Loading…
Reference in New Issue