Commit 6adcf7bb authored by Sylvain Pelissier's avatar Sylvain Pelissier Committed by Damien George

stmhal: Pass USB handler as parameter to allow more than one USB handler

parent 7ecfbb82
...@@ -82,10 +82,10 @@ static uint8_t UserTxBufPtrWaitCount = 0; // used to implement a timeout waiting ...@@ -82,10 +82,10 @@ static uint8_t UserTxBufPtrWaitCount = 0; // used to implement a timeout waiting
static uint8_t UserTxNeedEmptyPacket = 0; // used to flush the USB IN endpoint if the last packet was exactly the endpoint packet size static uint8_t UserTxNeedEmptyPacket = 0; // used to flush the USB IN endpoint if the last packet was exactly the endpoint packet size
/* Private function prototypes -----------------------------------------------*/ /* Private function prototypes -----------------------------------------------*/
static int8_t CDC_Itf_Init (void); static int8_t CDC_Itf_Init (USBD_HandleTypeDef *pdev);
static int8_t CDC_Itf_DeInit (void); static int8_t CDC_Itf_DeInit (void);
static int8_t CDC_Itf_Control (uint8_t cmd, uint8_t* pbuf, uint16_t length); static int8_t CDC_Itf_Control (uint8_t cmd, uint8_t* pbuf, uint16_t length);
static int8_t CDC_Itf_Receive (uint8_t* pbuf, uint32_t *Len); static int8_t CDC_Itf_Receive (USBD_HandleTypeDef *pdev, uint8_t* pbuf, uint32_t *Len);
const USBD_CDC_ItfTypeDef USBD_CDC_fops = { const USBD_CDC_ItfTypeDef USBD_CDC_fops = {
CDC_Itf_Init, CDC_Itf_Init,
...@@ -102,7 +102,7 @@ const USBD_CDC_ItfTypeDef USBD_CDC_fops = { ...@@ -102,7 +102,7 @@ const USBD_CDC_ItfTypeDef USBD_CDC_fops = {
* @param None * @param None
* @retval Result of the opeartion: USBD_OK if all operations are OK else USBD_FAIL * @retval Result of the opeartion: USBD_OK if all operations are OK else USBD_FAIL
*/ */
static int8_t CDC_Itf_Init(void) static int8_t CDC_Itf_Init(USBD_HandleTypeDef *pdev)
{ {
#if 0 #if 0
/*##-1- Configure the UART peripheral ######################################*/ /*##-1- Configure the UART peripheral ######################################*/
...@@ -141,8 +141,8 @@ static int8_t CDC_Itf_Init(void) ...@@ -141,8 +141,8 @@ static int8_t CDC_Itf_Init(void)
#endif #endif
/*##-5- Set Application Buffers ############################################*/ /*##-5- Set Application Buffers ############################################*/
USBD_CDC_SetTxBuffer(&hUSBDDevice, UserTxBuffer, 0); USBD_CDC_SetTxBuffer(pdev, UserTxBuffer, 0);
USBD_CDC_SetRxBuffer(&hUSBDDevice, cdc_rx_packet_buf); USBD_CDC_SetRxBuffer(pdev, cdc_rx_packet_buf);
cdc_rx_buf_put = 0; cdc_rx_buf_put = 0;
cdc_rx_buf_get = 0; cdc_rx_buf_get = 0;
...@@ -317,7 +317,7 @@ void HAL_PCD_SOFCallback(PCD_HandleTypeDef *hpcd) { ...@@ -317,7 +317,7 @@ void HAL_PCD_SOFCallback(PCD_HandleTypeDef *hpcd) {
* @note The buffer we are passed here is just cdc_rx_packet_buf, so we are * @note The buffer we are passed here is just cdc_rx_packet_buf, so we are
* free to modify it. * free to modify it.
*/ */
static int8_t CDC_Itf_Receive(uint8_t* Buf, uint32_t *Len) { static int8_t CDC_Itf_Receive(USBD_HandleTypeDef *pdev, uint8_t* Buf, uint32_t *Len) {
#if 0 #if 0
// this sends the data over the UART using DMA // this sends the data over the UART using DMA
HAL_UART_Transmit_DMA(&UartHandle, Buf, *Len); HAL_UART_Transmit_DMA(&UartHandle, Buf, *Len);
...@@ -339,8 +339,8 @@ static int8_t CDC_Itf_Receive(uint8_t* Buf, uint32_t *Len) { ...@@ -339,8 +339,8 @@ static int8_t CDC_Itf_Receive(uint8_t* Buf, uint32_t *Len) {
} }
// initiate next USB packet transfer // initiate next USB packet transfer
USBD_CDC_SetRxBuffer(&hUSBDDevice, cdc_rx_packet_buf); USBD_CDC_SetRxBuffer(pdev, cdc_rx_packet_buf);
USBD_CDC_ReceivePacket(&hUSBDDevice); USBD_CDC_ReceivePacket(pdev);
return USBD_OK; return USBD_OK;
} }
......
...@@ -51,8 +51,8 @@ static uint32_t last_read_len = 0; // length of last read ...@@ -51,8 +51,8 @@ static uint32_t last_read_len = 0; // length of last read
static int8_t current_write_buffer = 0; // which buffer to write to static int8_t current_write_buffer = 0; // which buffer to write to
/* Private function prototypes -----------------------------------------------*/ /* Private function prototypes -----------------------------------------------*/
static int8_t HID_Itf_Init (void); static int8_t HID_Itf_Init (USBD_HandleTypeDef *pdev);
static int8_t HID_Itf_Receive (uint8_t* pbuf, uint32_t Len); static int8_t HID_Itf_Receive (USBD_HandleTypeDef *pdev, uint8_t* pbuf, uint32_t Len);
const USBD_HID_ItfTypeDef USBD_HID_fops = { const USBD_HID_ItfTypeDef USBD_HID_fops = {
HID_Itf_Init, HID_Itf_Init,
...@@ -65,12 +65,12 @@ const USBD_HID_ItfTypeDef USBD_HID_fops = { ...@@ -65,12 +65,12 @@ const USBD_HID_ItfTypeDef USBD_HID_fops = {
* @param None * @param None
* @retval Result of the opeartion: USBD_OK if all operations are OK else USBD_FAIL * @retval Result of the opeartion: USBD_OK if all operations are OK else USBD_FAIL
*/ */
static int8_t HID_Itf_Init(void) static int8_t HID_Itf_Init(USBD_HandleTypeDef *pdev)
{ {
current_read_buffer = 0; current_read_buffer = 0;
last_read_len = 0; last_read_len = 0;
current_write_buffer = 0; current_write_buffer = 0;
USBD_HID_SetRxBuffer(&hUSBDDevice, buffer[current_write_buffer]); USBD_HID_SetRxBuffer(pdev, buffer[current_write_buffer]);
return USBD_OK; return USBD_OK;
} }
...@@ -83,14 +83,14 @@ static int8_t HID_Itf_Init(void) ...@@ -83,14 +83,14 @@ static int8_t HID_Itf_Init(void)
* @note The buffer we are passed here is just UserRxBuffer, so we are * @note The buffer we are passed here is just UserRxBuffer, so we are
* free to modify it. * free to modify it.
*/ */
static int8_t HID_Itf_Receive(uint8_t* Buf, uint32_t Len) { static int8_t HID_Itf_Receive(USBD_HandleTypeDef *pdev, uint8_t* Buf, uint32_t Len) {
current_write_buffer = !current_write_buffer; current_write_buffer = !current_write_buffer;
last_read_len = Len; last_read_len = Len;
// initiate next USB packet transfer, to append to existing data in buffer // initiate next USB packet transfer, to append to existing data in buffer
USBD_HID_SetRxBuffer(&hUSBDDevice, buffer[current_write_buffer]); USBD_HID_SetRxBuffer(pdev, buffer[current_write_buffer]);
USBD_HID_ReceivePacket(&hUSBDDevice); USBD_HID_ReceivePacket(pdev);
// Set NAK to indicate we need to process read buffer // Set NAK to indicate we need to process read buffer
USBD_HID_SetNAK(&hUSBDDevice); USBD_HID_SetNAK(pdev);
return USBD_OK; return USBD_OK;
} }
......
...@@ -28,10 +28,10 @@ typedef struct { ...@@ -28,10 +28,10 @@ typedef struct {
} USBD_CDC_LineCodingTypeDef; } USBD_CDC_LineCodingTypeDef;
typedef struct _USBD_CDC_Itf { typedef struct _USBD_CDC_Itf {
int8_t (* Init) (void); int8_t (* Init) (USBD_HandleTypeDef *pdev);
int8_t (* DeInit) (void); int8_t (* DeInit) (void);
int8_t (* Control) (uint8_t, uint8_t * , uint16_t); int8_t (* Control) (uint8_t, uint8_t * , uint16_t);
int8_t (* Receive) (uint8_t *, uint32_t *); int8_t (* Receive) (USBD_HandleTypeDef *pdev, uint8_t *, uint32_t *);
} USBD_CDC_ItfTypeDef; } USBD_CDC_ItfTypeDef;
typedef struct { typedef struct {
...@@ -48,8 +48,8 @@ typedef struct { ...@@ -48,8 +48,8 @@ typedef struct {
} USBD_CDC_HandleTypeDef; } USBD_CDC_HandleTypeDef;
typedef struct _USBD_HID_Itf { typedef struct _USBD_HID_Itf {
int8_t (* Init) (void); int8_t (* Init) (USBD_HandleTypeDef *pdev);
int8_t (* Receive)(uint8_t *, uint32_t); int8_t (* Receive)(USBD_HandleTypeDef *pdev, uint8_t *, uint32_t);
} USBD_HID_ItfTypeDef; } USBD_HID_ItfTypeDef;
typedef struct _USBD_STORAGE { typedef struct _USBD_STORAGE {
......
...@@ -669,7 +669,7 @@ static uint8_t USBD_CDC_MSC_HID_Init(USBD_HandleTypeDef *pdev, uint8_t cfgidx) { ...@@ -669,7 +669,7 @@ static uint8_t USBD_CDC_MSC_HID_Init(USBD_HandleTypeDef *pdev, uint8_t cfgidx) {
CDC_CMD_PACKET_SIZE); CDC_CMD_PACKET_SIZE);
// Init physical Interface components // Init physical Interface components
CDC_fops->Init(); CDC_fops->Init(pdev);
// Init Xfer states // Init Xfer states
CDC_ClassData.TxState =0; CDC_ClassData.TxState =0;
...@@ -724,7 +724,7 @@ static uint8_t USBD_CDC_MSC_HID_Init(USBD_HandleTypeDef *pdev, uint8_t cfgidx) { ...@@ -724,7 +724,7 @@ static uint8_t USBD_CDC_MSC_HID_Init(USBD_HandleTypeDef *pdev, uint8_t cfgidx) {
USBD_EP_TYPE_INTR, USBD_EP_TYPE_INTR,
mps_out); mps_out);
HID_fops->Init(); HID_fops->Init(pdev);
// Prepare Out endpoint to receive next packet // Prepare Out endpoint to receive next packet
USBD_LL_PrepareReceive(pdev, hid_out_ep, HID_ClassData.RxBuffer, mps_out); USBD_LL_PrepareReceive(pdev, hid_out_ep, HID_ClassData.RxBuffer, mps_out);
...@@ -963,7 +963,7 @@ static uint8_t USBD_CDC_MSC_HID_DataOut(USBD_HandleTypeDef *pdev, uint8_t epnum) ...@@ -963,7 +963,7 @@ static uint8_t USBD_CDC_MSC_HID_DataOut(USBD_HandleTypeDef *pdev, uint8_t epnum)
/* USB data will be immediately processed, this allow next USB traffic being /* USB data will be immediately processed, this allow next USB traffic being
NAKed till the end of the application Xfer */ NAKed till the end of the application Xfer */
CDC_fops->Receive(CDC_ClassData.RxBuffer, &CDC_ClassData.RxLength); CDC_fops->Receive(pdev, CDC_ClassData.RxBuffer, &CDC_ClassData.RxLength);
return USBD_OK; return USBD_OK;
} else if ((usbd_mode & USBD_MODE_MSC) && epnum == (MSC_OUT_EP & 0x7f)) { } else if ((usbd_mode & USBD_MODE_MSC) && epnum == (MSC_OUT_EP & 0x7f)) {
...@@ -971,7 +971,7 @@ static uint8_t USBD_CDC_MSC_HID_DataOut(USBD_HandleTypeDef *pdev, uint8_t epnum) ...@@ -971,7 +971,7 @@ static uint8_t USBD_CDC_MSC_HID_DataOut(USBD_HandleTypeDef *pdev, uint8_t epnum)
return USBD_OK; return USBD_OK;
} else if ((usbd_mode & USBD_MODE_HID) && epnum == (hid_out_ep & 0x7f)) { } else if ((usbd_mode & USBD_MODE_HID) && epnum == (hid_out_ep & 0x7f)) {
HID_ClassData.RxLength = USBD_LL_GetRxDataSize(pdev, epnum); HID_ClassData.RxLength = USBD_LL_GetRxDataSize(pdev, epnum);
HID_fops->Receive(HID_ClassData.RxBuffer, HID_ClassData.RxLength); HID_fops->Receive(pdev, HID_ClassData.RxBuffer, HID_ClassData.RxLength);
} }
return USBD_OK; return USBD_OK;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment