aboutsummaryrefslogtreecommitdiff
path: root/ports/stm32/usbdev
diff options
context:
space:
mode:
authorDamien George2017-09-05 14:07:16 +1000
committerDamien George2017-09-21 21:50:37 +1000
commit77e1da40e2fdcef736d05f2646fbaa8abf844543 (patch)
treee05f8c78fed2fa8f0c0611ead1b66671e42436c8 /ports/stm32/usbdev
parent980b33177bbb99f4bc6472c24a0cc67bf7760679 (diff)
stm32/usbdev: Put all HID state in a struct.
Diffstat (limited to 'ports/stm32/usbdev')
-rw-r--r--ports/stm32/usbdev/class/inc/usbd_cdc_msc_hid.h11
-rw-r--r--ports/stm32/usbdev/class/src/usbd_cdc_msc_hid.c14
2 files changed, 7 insertions, 18 deletions
diff --git a/ports/stm32/usbdev/class/inc/usbd_cdc_msc_hid.h b/ports/stm32/usbdev/class/inc/usbd_cdc_msc_hid.h
index 5b2ffb4cf..c7f9b1560 100644
--- a/ports/stm32/usbdev/class/inc/usbd_cdc_msc_hid.h
+++ b/ports/stm32/usbdev/class/inc/usbd_cdc_msc_hid.h
@@ -40,11 +40,6 @@ typedef struct {
__IO uint32_t RxState;
} USBD_CDC_HandleTypeDef;
-typedef struct _USBD_HID_Itf {
- int8_t (* Init) (USBD_HandleTypeDef *pdev);
- int8_t (* Receive)(USBD_HandleTypeDef *pdev, uint8_t *, uint32_t);
-} USBD_HID_ItfTypeDef;
-
typedef struct _USBD_STORAGE {
int8_t (* Init) (uint8_t lun);
int8_t (* GetCapacity) (uint8_t lun, uint32_t *block_num, uint16_t *block_size);
@@ -109,7 +104,6 @@ uint8_t USBD_CDC_TransmitPacket (USBD_HandleTypeDef *pdev);
uint8_t USBD_MSC_RegisterStorage(USBD_HandleTypeDef *pdev, USBD_StorageTypeDef *fops);
-uint8_t USBD_HID_RegisterInterface(USBD_HandleTypeDef *pdev, USBD_HID_ItfTypeDef *fops);
uint8_t USBD_HID_SetRxBuffer(USBD_HandleTypeDef *pdev, uint8_t *pbuff);
uint8_t USBD_HID_ReceivePacket(USBD_HandleTypeDef *pdev);
int USBD_HID_CanSendReport(USBD_HandleTypeDef *pdev);
@@ -123,4 +117,9 @@ void usbd_cdc_init(struct _usbd_cdc_itf_t *cdc, USBD_HandleTypeDef *pdev);
int8_t usbd_cdc_control(struct _usbd_cdc_itf_t *cdc, uint8_t cmd, uint8_t* pbuf, uint16_t length);
int8_t usbd_cdc_receive(struct _usbd_cdc_itf_t *cdc, uint8_t* Buf, uint32_t *Len);
+// These are provided externally to implement the HID interface
+struct _usbd_hid_itf_t;
+void usbd_hid_init(struct _usbd_hid_itf_t *hid, USBD_HandleTypeDef *pdev);
+int8_t usbd_hid_receive(struct _usbd_hid_itf_t *hid, size_t len, uint8_t *buf);
+
#endif // _USB_CDC_MSC_CORE_H_
diff --git a/ports/stm32/usbdev/class/src/usbd_cdc_msc_hid.c b/ports/stm32/usbdev/class/src/usbd_cdc_msc_hid.c
index 38e5bcbc6..d2daa3aee 100644
--- a/ports/stm32/usbdev/class/src/usbd_cdc_msc_hid.c
+++ b/ports/stm32/usbdev/class/src/usbd_cdc_msc_hid.c
@@ -96,7 +96,6 @@ static uint8_t *hid_desc;
static const uint8_t *hid_report_desc;
static USBD_StorageTypeDef *MSC_fops;
-static USBD_HID_ItfTypeDef *HID_fops;
static USBD_CDC_HandleTypeDef CDC_ClassData;
static USBD_MSC_BOT_HandleTypeDef MSC_BOT_ClassData;
@@ -725,7 +724,7 @@ static uint8_t USBD_CDC_MSC_HID_Init(USBD_HandleTypeDef *pdev, uint8_t cfgidx) {
USBD_EP_TYPE_INTR,
mps_out);
- HID_fops->Init(pdev);
+ usbd_hid_init(state->hid, pdev);
// Prepare Out endpoint to receive next packet
USBD_LL_PrepareReceive(pdev, hid_out_ep, HID_ClassData.RxBuffer, mps_out);
@@ -975,7 +974,7 @@ static uint8_t USBD_CDC_MSC_HID_DataOut(USBD_HandleTypeDef *pdev, uint8_t epnum)
return USBD_OK;
} else if ((usbd_mode & USBD_MODE_HID) && epnum == (hid_out_ep & 0x7f)) {
HID_ClassData.RxLength = USBD_LL_GetRxDataSize(pdev, epnum);
- HID_fops->Receive(pdev, HID_ClassData.RxBuffer, HID_ClassData.RxLength);
+ usbd_hid_receive(state->hid, HID_ClassData.RxLength, HID_ClassData.RxBuffer);
}
return USBD_OK;
@@ -1044,15 +1043,6 @@ uint8_t USBD_MSC_RegisterStorage(USBD_HandleTypeDef *pdev, USBD_StorageTypeDef *
}
}
-uint8_t USBD_HID_RegisterInterface(USBD_HandleTypeDef *pdev, USBD_HID_ItfTypeDef *fops) {
- if (fops == NULL) {
- return USBD_FAIL;
- } else {
- HID_fops = fops;
- return USBD_OK;
- }
-}
-
uint8_t USBD_HID_SetRxBuffer(USBD_HandleTypeDef *pdev, uint8_t *pbuff) {
HID_ClassData.RxBuffer = pbuff;
return USBD_OK;