able to response with good crc
This commit is contained in:
@@ -38,13 +38,19 @@ extern "C" {
|
||||
//--------------------------------------------------------------------+
|
||||
//
|
||||
//--------------------------------------------------------------------+
|
||||
typedef struct {
|
||||
uint8_t rhport;
|
||||
uint8_t event_id;
|
||||
|
||||
|
||||
} tcd_event_t;;
|
||||
|
||||
//--------------------------------------------------------------------+
|
||||
//
|
||||
//--------------------------------------------------------------------+
|
||||
|
||||
// Initialize controller
|
||||
bool tcd_init(uint8_t rhport, typec_port_type_t port_type);
|
||||
bool tcd_init(uint8_t rhport, tusb_typec_port_type_t port_type);
|
||||
|
||||
// Enable interrupt
|
||||
void tcd_int_enable (uint8_t rhport);
|
||||
@@ -55,4 +61,11 @@ void tcd_int_disable(uint8_t rhport);
|
||||
// Interrupt Handler
|
||||
void tcd_int_handler(uint8_t rhport);
|
||||
|
||||
//--------------------------------------------------------------------+
|
||||
//
|
||||
//--------------------------------------------------------------------+
|
||||
|
||||
bool tcd_rx_start(uint8_t rhport, uint8_t* buffer, uint16_t total_bytes);
|
||||
bool tcd_tx_start(uint8_t rhport, uint8_t const* buffer, uint16_t total_bytes);
|
||||
|
||||
#endif
|
||||
|
@@ -29,20 +29,75 @@
|
||||
#if CFG_TUC_ENABLED
|
||||
|
||||
#include "tcd.h"
|
||||
#include "utcd.h"
|
||||
|
||||
//--------------------------------------------------------------------+
|
||||
//
|
||||
//--------------------------------------------------------------------+
|
||||
|
||||
// Debug level of USBD
|
||||
#define UTCD_DEBUG 2
|
||||
#define TU_LOG_UTCD(...) TU_LOG(UTCD_DEBUG, __VA_ARGS__)
|
||||
|
||||
// Event queue
|
||||
// utcd_int_set() is used as mutex in OS NONE config
|
||||
void utcd_int_set(bool enabled);
|
||||
OSAL_QUEUE_DEF(utcd_int_set, utcd_qdef, CFG_TUC_TASK_QUEUE_SZ, tcd_event_t);
|
||||
tu_static osal_queue_t utcd_q;
|
||||
|
||||
// if stack is initialized
|
||||
static bool utcd_inited = false;
|
||||
|
||||
// if port is initialized
|
||||
static bool port_inited[TUP_TYPEC_RHPORTS_NUM];
|
||||
|
||||
//--------------------------------------------------------------------+
|
||||
//
|
||||
//--------------------------------------------------------------------+
|
||||
bool tuc_inited(uint8_t rhport) {
|
||||
return utcd_inited && port_inited[rhport];
|
||||
}
|
||||
|
||||
bool tuc_init(uint8_t rhport, tusb_typec_port_type_t port_type) {
|
||||
// Initialize stack
|
||||
if (!utcd_inited) {
|
||||
tu_memclr(port_inited, sizeof(port_inited));
|
||||
|
||||
utcd_q = osal_queue_create(&utcd_qdef);
|
||||
TU_ASSERT(utcd_q != NULL);
|
||||
|
||||
utcd_inited = true;
|
||||
}
|
||||
|
||||
// skip if port already initialized
|
||||
if ( port_inited[rhport] ) {
|
||||
return true;
|
||||
}
|
||||
|
||||
TU_LOG_UTCD("UTCD init on port %u\r\n", rhport);
|
||||
|
||||
bool tuc_init(uint8_t rhport, typec_port_type_t port_type) {
|
||||
TU_ASSERT(tcd_init(rhport, port_type));
|
||||
tcd_int_enable(rhport);
|
||||
|
||||
port_inited[rhport] = true;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
//--------------------------------------------------------------------+
|
||||
//
|
||||
//--------------------------------------------------------------------+
|
||||
void utcd_int_set(bool enabled) {
|
||||
// Disable all controllers since they shared the same event queue
|
||||
for (uint8_t p = 0; p < TUP_TYPEC_RHPORTS_NUM; p++) {
|
||||
if ( port_inited[p] ) {
|
||||
if (enabled) {
|
||||
tcd_int_enable(p);
|
||||
}else {
|
||||
tcd_int_disable(p);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
@@ -33,12 +33,24 @@
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
//--------------------------------------------------------------------+
|
||||
// TypeC Configuration
|
||||
//--------------------------------------------------------------------+
|
||||
|
||||
#ifndef CFG_TUC_TASK_QUEUE_SZ
|
||||
#define CFG_TUC_TASK_QUEUE_SZ 16
|
||||
#endif
|
||||
|
||||
|
||||
//--------------------------------------------------------------------+
|
||||
// Application API
|
||||
//--------------------------------------------------------------------+
|
||||
|
||||
// init typec stack
|
||||
bool tuc_init(uint8_t rhport, typec_port_type_t port_type);
|
||||
// Init typec stack on a port
|
||||
bool tuc_init(uint8_t rhport, tusb_typec_port_type_t port_type);
|
||||
|
||||
// Check if typec port is initialized
|
||||
bool tuc_inited(uint8_t rhport);
|
||||
|
||||
#ifndef _TUSB_TCD_H_
|
||||
extern void tcd_int_handler(uint8_t rhport);
|
||||
|
Reference in New Issue
Block a user