add TUSB_CFG_PROUDCT_ID check

move USB_MAX_EP_NUM to device dependency
- lpc43 --> 6
- lpc11/13 --> 5
This commit is contained in:
hathach 2013-06-03 15:56:14 +07:00
parent 52f18f3784
commit 9f9adca03b
8 changed files with 91 additions and 81 deletions

View File

@ -132,14 +132,14 @@ tusb_descriptor_device_t app_tusb_desc_device =
.bMaxPacketSize0 = USB_MAX_PACKET0,
.idVendor = TUSB_CFG_DEVICE_VENDORID,
.idProduct = USB_PRODUCT_ID,
.idProduct = TUSB_CFG_PRODUCT_ID,
.bcdDevice = 0x0100,
.iManufacturer = 0x01,
.iProduct = 0x02,
.iSerialNumber = 0x03,
.bNumConfigurations = 0x01 // TODO configuration number
.bNumConfigurations = 0x01 // TODO multiple configurations
};

View File

@ -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)
// 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
#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) ) )
#endif
///////////////////////////////////////////////////////////////////////
typedef ATTR_PACKED_STRUCT(struct)

View File

@ -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_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)
//--------------------------------------------------------------------+
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)
{
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( 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;
}
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;
}
#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
//--------------------------------------------------------------------+
// IMPLEMENTATION
//--------------------------------------------------------------------+
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;

View File

@ -53,6 +53,8 @@
extern "C" {
#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))
//--------------------------------------------------------------------+

View File

@ -47,22 +47,28 @@
#define _TUSB_DCD_NXP_ROMDRIVER_H_
#include "common/common.h"
#include "romdriver/mw_usbd_rom_api.h"
#ifdef __cplusplus
extern "C" {
#endif
#define USB_MAX_IF_NUM 8 // maximum interface number supported, should be fixed to 8
#if (MCU == MCU_LPC18XX) || (MCU == MCU_LPC43XX)
#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)
#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
#error forgot something, thach ?
#endif
#include "romdriver/mw_usbd_rom_api.h"
extern USBD_HANDLE_T romdriver_hdl;
#ifdef __cplusplus

View File

@ -26,7 +26,7 @@
#include "error.h"
#include "mw_usbd.h"
#include "tusb_option.h"
#include "../dcd_nxp_romdriver.h"
/** \file
* \brief ROM API for USB device stack.

View File

@ -51,7 +51,10 @@
//--------------------------------------------------------------------+
#include "common/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
#endif
//#include "tusb_descriptors.h"
#ifdef __cplusplus

View File

@ -167,9 +167,7 @@
#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_HS_MAX_BULK_PACKET USB_FS_MAX_BULK_PACKET /* Full speed device only */
@ -178,14 +176,13 @@
#define USB_MAX_PACKET0 64
/* HID In/Out Endpoint Address */
#define HID_KEYBOARD_EP_IN USB_ENDPOINT_IN(1)
//#define HID_KEYBOARD_EP_OUT USB_ENDPOINT_OUT(1)
#define HID_MOUSE_EP_IN USB_ENDPOINT_IN(4)
#define HID_KEYBOARD_EP_IN ENDPOINT_IN_LOGICAL_TO_PHYSICAL(1)
#define HID_MOUSE_EP_IN ENDPOINT_IN_LOGICAL_TO_PHYSICAL(4)
/* CDC Endpoint Address */
#define CDC_NOTIFICATION_EP USB_ENDPOINT_IN(2)
#define CDC_DATA_EP_OUT USB_ENDPOINT_OUT(3)
#define CDC_DATA_EP_IN USB_ENDPOINT_IN(3)
#define CDC_NOTIFICATION_EP ENDPOINT_IN_LOGICAL_TO_PHYSICAL(2)
#define CDC_DATA_EP_OUT ENDPOINT_OUT_LOGICAL_TO_PHYSICAL(3)
#define CDC_DATA_EP_IN ENDPOINT_IN_LOGICAL_TO_PHYSICAL(3)
#define CDC_NOTIFICATION_EP_MAXPACKETSIZE 8
#define CDC_DATA_EP_MAXPACKET_SIZE 16