mirror of
https://github.com/hathach/tinyusb.git
synced 2025-01-31 05:52:55 +08:00
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,
|
||||
|
||||
.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
|
||||
};
|
||||
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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;
|
||||
|
@ -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))
|
||||
|
||||
//--------------------------------------------------------------------+
|
||||
|
@ -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
|
||||
|
@ -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.
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user