mirror of
https://github.com/hathach/tinyusb.git
synced 2025-03-25 23:38:06 +00:00
Change getting the capabilities structure to a callback instead of an extern struct.
This commit is contained in:
parent
2d4352bfe9
commit
3a87dd65d7
@ -30,9 +30,9 @@
|
|||||||
#include "main.h"
|
#include "main.h"
|
||||||
|
|
||||||
#if (CFG_TUD_USBTMC_ENABLE_488)
|
#if (CFG_TUD_USBTMC_ENABLE_488)
|
||||||
usbtmc_response_capabilities_488_t const
|
static usbtmc_response_capabilities_488_t const
|
||||||
#else
|
#else
|
||||||
usbtmc_response_capabilities_t const
|
static usbtmc_response_capabilities_t const
|
||||||
#endif
|
#endif
|
||||||
tud_usbtmc_app_capabilities =
|
tud_usbtmc_app_capabilities =
|
||||||
{
|
{
|
||||||
@ -102,6 +102,16 @@ void tud_usbtmc_app_open_cb(uint8_t interface_id)
|
|||||||
tud_usbtmc_start_bus_read();
|
tud_usbtmc_start_bus_read();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if (CFG_TUD_USBTMC_ENABLE_488)
|
||||||
|
usbtmc_response_capabilities_488_t const *
|
||||||
|
#else
|
||||||
|
usbtmc_response_capabilities_t const *
|
||||||
|
#endif
|
||||||
|
tud_usbtmc_get_capabilities_cb()
|
||||||
|
{
|
||||||
|
return &tud_usbtmc_app_capabilities;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
bool tud_usbtmc_app_msg_trigger_cb(usbtmc_msg_generic_t* msg) {
|
bool tud_usbtmc_app_msg_trigger_cb(usbtmc_msg_generic_t* msg) {
|
||||||
(void)msg;
|
(void)msg;
|
||||||
|
@ -114,6 +114,13 @@ typedef enum
|
|||||||
STATE_NUM_STATES
|
STATE_NUM_STATES
|
||||||
} usbtmcd_state_enum;
|
} usbtmcd_state_enum;
|
||||||
|
|
||||||
|
#if (CFG_TUD_USBTMC_ENABLE_488)
|
||||||
|
typedef usbtmc_response_capabilities_488_t usbtmc_capabilities_specific_t;
|
||||||
|
#else
|
||||||
|
typedef usbtmc_response_capabilities_t usbtmc_capabilities_specific_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
volatile usbtmcd_state_enum state;
|
volatile usbtmcd_state_enum state;
|
||||||
@ -135,6 +142,8 @@ typedef struct
|
|||||||
uint8_t lastBulkInTag; // used for aborts (mostly)
|
uint8_t lastBulkInTag; // used for aborts (mostly)
|
||||||
|
|
||||||
uint8_t const * devInBuffer; // pointer to application-layer used for transmissions
|
uint8_t const * devInBuffer; // pointer to application-layer used for transmissions
|
||||||
|
|
||||||
|
usbtmc_capabilities_specific_t const * capabilities;
|
||||||
} usbtmc_interface_state_t;
|
} usbtmc_interface_state_t;
|
||||||
|
|
||||||
static usbtmc_interface_state_t usbtmc_state =
|
static usbtmc_interface_state_t usbtmc_state =
|
||||||
@ -199,7 +208,7 @@ bool tud_usbtmc_transmit_dev_msg_data(
|
|||||||
TU_ASSERT(usbtmc_state.transfer_size_sent == 0u);
|
TU_ASSERT(usbtmc_state.transfer_size_sent == 0u);
|
||||||
if(usingTermChar)
|
if(usingTermChar)
|
||||||
{
|
{
|
||||||
TU_ASSERT(tud_usbtmc_app_capabilities.bmDevCapabilities.canEndBulkInOnTermChar);
|
TU_ASSERT(usbtmc_state.capabilities->bmDevCapabilities.canEndBulkInOnTermChar);
|
||||||
TU_ASSERT(termCharRequested);
|
TU_ASSERT(termCharRequested);
|
||||||
TU_ASSERT(((uint8_t*)data)[len-1u] == termChar);
|
TU_ASSERT(((uint8_t*)data)[len-1u] == termChar);
|
||||||
}
|
}
|
||||||
@ -235,15 +244,16 @@ bool tud_usbtmc_transmit_dev_msg_data(
|
|||||||
|
|
||||||
void usbtmcd_init_cb(void)
|
void usbtmcd_init_cb(void)
|
||||||
{
|
{
|
||||||
|
usbtmc_state.capabilities = tud_usbtmc_get_capabilities_cb();
|
||||||
#ifndef NDEBUG
|
#ifndef NDEBUG
|
||||||
# if CFG_TUD_USBTMC_ENABLE_488
|
# if CFG_TUD_USBTMC_ENABLE_488
|
||||||
if(tud_usbtmc_app_capabilities.bmIntfcCapabilities488.supportsTrigger)
|
if(usbtmc_state.capabilities->bmIntfcCapabilities488.supportsTrigger)
|
||||||
TU_ASSERT(&tud_usbtmc_app_msg_trigger_cb != NULL,);
|
TU_ASSERT(&tud_usbtmc_app_msg_trigger_cb != NULL,);
|
||||||
// Per USB488 spec: table 8
|
// Per USB488 spec: table 8
|
||||||
TU_ASSERT(!tud_usbtmc_app_capabilities.bmIntfcCapabilities.listenOnly,);
|
TU_ASSERT(!usbtmc_state.capabilities->bmIntfcCapabilities.listenOnly,);
|
||||||
TU_ASSERT(!tud_usbtmc_app_capabilities.bmIntfcCapabilities.talkOnly,);
|
TU_ASSERT(!usbtmc_state.capabilities->bmIntfcCapabilities.talkOnly,);
|
||||||
# endif
|
# endif
|
||||||
if(tud_usbtmc_app_capabilities.bmIntfcCapabilities.supportsIndicatorPulse)
|
if(usbtmc_state.capabilities->bmIntfcCapabilities.supportsIndicatorPulse)
|
||||||
TU_ASSERT(&tud_usbtmc_app_indicator_pulse_cb != NULL,);
|
TU_ASSERT(&tud_usbtmc_app_indicator_pulse_cb != NULL,);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -317,8 +327,8 @@ bool usbtmcd_open_cb(uint8_t rhport, tusb_desc_interface_t const * itf_desc, uin
|
|||||||
TU_ASSERT(usbtmc_state.ep_int_in != 0);
|
TU_ASSERT(usbtmc_state.ep_int_in != 0);
|
||||||
}
|
}
|
||||||
#if (CFG_TUD_USBTMC_ENABLE_488)
|
#if (CFG_TUD_USBTMC_ENABLE_488)
|
||||||
if(tud_usbtmc_app_capabilities.bmIntfcCapabilities488.is488_2 ||
|
if(usbtmc_state.capabilities->bmIntfcCapabilities488.is488_2 ||
|
||||||
tud_usbtmc_app_capabilities.bmDevCapabilities488.SR1)
|
usbtmc_state.capabilities->bmDevCapabilities488.SR1)
|
||||||
{
|
{
|
||||||
TU_ASSERT(usbtmc_state.ep_int_in != 0);
|
TU_ASSERT(usbtmc_state.ep_int_in != 0);
|
||||||
}
|
}
|
||||||
@ -358,9 +368,11 @@ bool tud_usbtmc_start_bus_read()
|
|||||||
void usbtmcd_reset_cb(uint8_t rhport)
|
void usbtmcd_reset_cb(uint8_t rhport)
|
||||||
{
|
{
|
||||||
(void)rhport;
|
(void)rhport;
|
||||||
|
usbtmc_capabilities_specific_t const * capabilities = tud_usbtmc_get_capabilities_cb();
|
||||||
|
|
||||||
criticalEnter();
|
criticalEnter();
|
||||||
tu_varclr(&usbtmc_state);
|
tu_varclr(&usbtmc_state);
|
||||||
|
usbtmc_state.capabilities = capabilities;
|
||||||
usbtmc_state.itf_id = 0xFFu;
|
usbtmc_state.itf_id = 0xFFu;
|
||||||
criticalLeave();
|
criticalLeave();
|
||||||
}
|
}
|
||||||
@ -428,7 +440,7 @@ static bool handle_devMsgIn(void *data, size_t len)
|
|||||||
termChar = msg->TermChar;
|
termChar = msg->TermChar;
|
||||||
|
|
||||||
if(termCharRequested)
|
if(termCharRequested)
|
||||||
TU_VERIFY(tud_usbtmc_app_capabilities.bmDevCapabilities.canEndBulkInOnTermChar);
|
TU_VERIFY(usbtmc_state.capabilities->bmDevCapabilities.canEndBulkInOnTermChar);
|
||||||
|
|
||||||
TU_VERIFY(tud_usbtmc_app_msgBulkIn_request_cb(msg));
|
TU_VERIFY(tud_usbtmc_app_msgBulkIn_request_cb(msg));
|
||||||
return true;
|
return true;
|
||||||
@ -471,7 +483,7 @@ bool usbtmcd_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint
|
|||||||
#if (CFG_TUD_USBTMC_ENABLE_488)
|
#if (CFG_TUD_USBTMC_ENABLE_488)
|
||||||
case USBTMC_MSGID_USB488_TRIGGER:
|
case USBTMC_MSGID_USB488_TRIGGER:
|
||||||
// Spec says we halt the EP if we didn't declare we support it.
|
// Spec says we halt the EP if we didn't declare we support it.
|
||||||
TU_VERIFY(tud_usbtmc_app_capabilities.bmIntfcCapabilities488.supportsTrigger);
|
TU_VERIFY(usbtmc_state.capabilities->bmIntfcCapabilities488.supportsTrigger);
|
||||||
TU_VERIFY(tud_usbtmc_app_msg_trigger_cb(msg));
|
TU_VERIFY(tud_usbtmc_app_msg_trigger_cb(msg));
|
||||||
|
|
||||||
break;
|
break;
|
||||||
@ -768,8 +780,8 @@ bool usbtmcd_control_request_cb(uint8_t rhport, tusb_control_request_t const * r
|
|||||||
case USBTMC_bREQUEST_GET_CAPABILITIES:
|
case USBTMC_bREQUEST_GET_CAPABILITIES:
|
||||||
{
|
{
|
||||||
TU_VERIFY(request->bmRequestType == 0xA1); // in,class,interface
|
TU_VERIFY(request->bmRequestType == 0xA1); // in,class,interface
|
||||||
TU_VERIFY(request->wLength == sizeof(tud_usbtmc_app_capabilities));
|
TU_VERIFY(request->wLength == sizeof(*(usbtmc_state.capabilities)));
|
||||||
TU_VERIFY(tud_control_xfer(rhport, request, (void*)&tud_usbtmc_app_capabilities, sizeof(tud_usbtmc_app_capabilities)));
|
TU_VERIFY(tud_control_xfer(rhport, request, (void*)usbtmc_state.capabilities, sizeof(*usbtmc_state.capabilities)));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
// USBTMC Optional Requests
|
// USBTMC Optional Requests
|
||||||
@ -778,7 +790,7 @@ bool usbtmcd_control_request_cb(uint8_t rhport, tusb_control_request_t const * r
|
|||||||
{
|
{
|
||||||
TU_VERIFY(request->bmRequestType == 0xA1); // in,class,interface
|
TU_VERIFY(request->bmRequestType == 0xA1); // in,class,interface
|
||||||
TU_VERIFY(request->wLength == sizeof(tmcStatusCode));
|
TU_VERIFY(request->wLength == sizeof(tmcStatusCode));
|
||||||
TU_VERIFY(tud_usbtmc_app_capabilities.bmIntfcCapabilities.supportsIndicatorPulse);
|
TU_VERIFY(usbtmc_state.capabilities->bmIntfcCapabilities.supportsIndicatorPulse);
|
||||||
TU_VERIFY(tud_usbtmc_app_indicator_pulse_cb(request, &tmcStatusCode));
|
TU_VERIFY(tud_usbtmc_app_indicator_pulse_cb(request, &tmcStatusCode));
|
||||||
TU_VERIFY(tud_control_xfer(rhport, request, (void*)&tmcStatusCode, sizeof(tmcStatusCode)));
|
TU_VERIFY(tud_control_xfer(rhport, request, (void*)&tmcStatusCode, sizeof(tmcStatusCode)));
|
||||||
return true;
|
return true;
|
||||||
|
@ -49,12 +49,6 @@
|
|||||||
* Functions to be implemeted by the class implementation
|
* Functions to be implemeted by the class implementation
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#if (CFG_TUD_USBTMC_ENABLE_488)
|
|
||||||
extern usbtmc_response_capabilities_488_t const tud_usbtmc_app_capabilities;
|
|
||||||
#else
|
|
||||||
extern usbtmc_response_capabilities_t const tud_usbtmc_app_capabilities;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// In order to proceed, app must call call tud_usbtmc_start_bus_read(rhport) during or soon after:
|
// In order to proceed, app must call call tud_usbtmc_start_bus_read(rhport) during or soon after:
|
||||||
// * tud_usbtmc_app_open_cb
|
// * tud_usbtmc_app_open_cb
|
||||||
// * tud_usbtmc_app_msg_data_cb
|
// * tud_usbtmc_app_msg_data_cb
|
||||||
@ -64,6 +58,12 @@ extern usbtmc_response_capabilities_t const tud_usbtmc_app_capabilities;
|
|||||||
// * (successful) tud_usbtmc_app_check_abort_bulk_in_cb
|
// * (successful) tud_usbtmc_app_check_abort_bulk_in_cb
|
||||||
// * (successful) tud_usmtmc_app_bulkOut_clearFeature_cb
|
// * (successful) tud_usmtmc_app_bulkOut_clearFeature_cb
|
||||||
|
|
||||||
|
#if (CFG_TUD_USBTMC_ENABLE_488)
|
||||||
|
usbtmc_response_capabilities_488_t const * tud_usbtmc_get_capabilities_cb(void);
|
||||||
|
#else
|
||||||
|
usbtmc_response_capabilities_t const * tud_usbtmc_get_capabilities_cb(void);
|
||||||
|
#endif
|
||||||
|
|
||||||
void tud_usbtmc_app_open_cb(uint8_t interface_id);
|
void tud_usbtmc_app_open_cb(uint8_t interface_id);
|
||||||
|
|
||||||
bool tud_usbtmc_app_msgBulkOut_start_cb(usbtmc_msg_request_dev_dep_out const * msgHeader);
|
bool tud_usbtmc_app_msgBulkOut_start_cb(usbtmc_msg_request_dev_dep_out const * msgHeader);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user