123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872 |
- #ifndef NRFX_USBD_H__
- #define NRFX_USBD_H__
- #include <nrfx.h>
- #include <hal/nrf_usbd.h>
- #ifdef __cplusplus
- extern "C" {
- #endif
- #define NRFX_USBD_EPSIZE 64
- #define NRFX_USBD_ISOSIZE 1024
- #define NRFX_USBD_FEEDER_BUFFER_SIZE NRFX_USBD_EPSIZE
- #define NRFX_USBD_EPIN(n) ((nrfx_usbd_ep_t)NRF_USBD_EPIN(n))
- #define NRFX_USBD_EPOUT(n) ((nrfx_usbd_ep_t)NRF_USBD_EPOUT(n))
- typedef enum
- {
- NRFX_USBD_EPOUT0 = NRF_USBD_EPOUT(0),
- NRFX_USBD_EPOUT1 = NRF_USBD_EPOUT(1),
- NRFX_USBD_EPOUT2 = NRF_USBD_EPOUT(2),
- NRFX_USBD_EPOUT3 = NRF_USBD_EPOUT(3),
- NRFX_USBD_EPOUT4 = NRF_USBD_EPOUT(4),
- NRFX_USBD_EPOUT5 = NRF_USBD_EPOUT(5),
- NRFX_USBD_EPOUT6 = NRF_USBD_EPOUT(6),
- NRFX_USBD_EPOUT7 = NRF_USBD_EPOUT(7),
- NRFX_USBD_EPOUT8 = NRF_USBD_EPOUT(8),
- NRFX_USBD_EPIN0 = NRF_USBD_EPIN(0),
- NRFX_USBD_EPIN1 = NRF_USBD_EPIN(1),
- NRFX_USBD_EPIN2 = NRF_USBD_EPIN(2),
- NRFX_USBD_EPIN3 = NRF_USBD_EPIN(3),
- NRFX_USBD_EPIN4 = NRF_USBD_EPIN(4),
- NRFX_USBD_EPIN5 = NRF_USBD_EPIN(5),
- NRFX_USBD_EPIN6 = NRF_USBD_EPIN(6),
- NRFX_USBD_EPIN7 = NRF_USBD_EPIN(7),
- NRFX_USBD_EPIN8 = NRF_USBD_EPIN(8),
- } nrfx_usbd_ep_t;
- typedef enum
- {
- NRFX_USBD_EVT_SOF,
- NRFX_USBD_EVT_RESET,
- NRFX_USBD_EVT_SUSPEND,
- NRFX_USBD_EVT_RESUME,
- NRFX_USBD_EVT_WUREQ,
- NRFX_USBD_EVT_SETUP,
- NRFX_USBD_EVT_EPTRANSFER,
- NRFX_USBD_EVT_CNT
- } nrfx_usbd_event_type_t;
- typedef enum
- {
- NRFX_USBD_EP_OK,
- NRFX_USBD_EP_WAITING,
- NRFX_USBD_EP_OVERLOAD,
- NRFX_USBD_EP_ABORTED,
- NRFX_USBD_EP_BUSY,
- } nrfx_usbd_ep_status_t;
- typedef struct
- {
- nrfx_usbd_event_type_t type;
- union
- {
- struct {
- uint16_t framecnt;
- } sof;
- struct {
- nrfx_usbd_ep_t ep;
- } isocrc;
- struct {
- nrfx_usbd_ep_t ep;
- nrfx_usbd_ep_status_t status;
- } eptransfer;
- } data;
- } nrfx_usbd_evt_t;
- typedef void (*nrfx_usbd_event_handler_t)(nrfx_usbd_evt_t const * p_event);
- typedef union
- {
- void const * tx;
- void * rx;
- uint32_t addr;
- } nrfx_usbd_data_ptr_t;
- typedef struct
- {
- nrfx_usbd_data_ptr_t p_data;
- size_t size;
- } nrfx_usbd_ep_transfer_t;
- typedef enum
- {
- NRFX_USBD_TRANSFER_ZLP_FLAG = 1U << 0,
- } nrfx_usbd_transfer_flags_t;
- typedef struct
- {
- nrfx_usbd_data_ptr_t p_data;
- size_t size;
- uint32_t flags;
-
- } nrfx_usbd_transfer_t;
- #define NRFX_USBD_TRANSFER_IN(name, tx_buff, tx_size, tx_flags) \
- const nrfx_usbd_transfer_t name = { \
- .p_data = { .tx = (tx_buff) }, \
- .size = (tx_size), \
- .flags = (tx_flags) \
- }
- #define NRFX_USBD_TRANSFER_OUT(name, rx_buff, rx_size) \
- const nrfx_usbd_transfer_t name = { \
- .p_data = { .rx = (rx_buff) }, \
- .size = (rx_size), \
- .flags = 0 \
- }
- typedef bool (*nrfx_usbd_feeder_t)(nrfx_usbd_ep_transfer_t * p_next,
- void * p_context,
- size_t ep_size);
- typedef bool (*nrfx_usbd_consumer_t)(nrfx_usbd_ep_transfer_t * p_next,
- void * p_context,
- size_t ep_size,
- size_t data_size);
- typedef union
- {
- nrfx_usbd_feeder_t feeder;
- nrfx_usbd_consumer_t consumer;
- } nrfx_usbd_handler_t;
- typedef struct
- {
- nrfx_usbd_handler_t handler;
- void * p_context;
- } nrfx_usbd_handler_desc_t;
- typedef struct
- {
- uint8_t bmRequestType;
- uint8_t bRequest;
- uint16_t wValue;
- uint16_t wIndex;
- uint16_t wLength;
- } nrfx_usbd_setup_t;
- nrfx_err_t nrfx_usbd_init(nrfx_usbd_event_handler_t event_handler);
- void nrfx_usbd_uninit(void);
- void nrfx_usbd_enable(void);
- void nrfx_usbd_disable(void);
- void nrfx_usbd_start(bool enable_sof);
- void nrfx_usbd_stop(void);
- bool nrfx_usbd_is_initialized(void);
- bool nrfx_usbd_is_enabled(void);
- bool nrfx_usbd_is_started(void);
- bool nrfx_usbd_suspend(void);
- bool nrfx_usbd_wakeup_req(void);
- bool nrfx_usbd_suspend_check(void);
- void nrfx_usbd_suspend_irq_config(void);
- void nrfx_usbd_active_irq_config(void);
- bool nrfx_usbd_bus_suspend_check(void);
- void nrfx_usbd_force_bus_wakeup(void);
- void nrfx_usbd_ep_max_packet_size_set(nrfx_usbd_ep_t ep, uint16_t size);
- uint16_t nrfx_usbd_ep_max_packet_size_get(nrfx_usbd_ep_t ep);
- bool nrfx_usbd_ep_enable_check(nrfx_usbd_ep_t ep);
- void nrfx_usbd_ep_enable(nrfx_usbd_ep_t ep);
- void nrfx_usbd_ep_disable(nrfx_usbd_ep_t ep);
- void nrfx_usbd_ep_default_config(void);
- nrfx_err_t nrfx_usbd_ep_transfer(nrfx_usbd_ep_t ep,
- nrfx_usbd_transfer_t const * p_transfer);
- nrfx_err_t nrfx_usbd_ep_handled_transfer(nrfx_usbd_ep_t ep,
- nrfx_usbd_handler_desc_t const * p_handler);
- void * nrfx_usbd_feeder_buffer_get(void);
- nrfx_usbd_ep_status_t nrfx_usbd_ep_status_get(nrfx_usbd_ep_t ep, size_t * p_size);
- size_t nrfx_usbd_epout_size_get(nrfx_usbd_ep_t ep);
- bool nrfx_usbd_ep_is_busy(nrfx_usbd_ep_t ep);
- void nrfx_usbd_ep_stall(nrfx_usbd_ep_t ep);
- void nrfx_usbd_ep_stall_clear(nrfx_usbd_ep_t ep);
- bool nrfx_usbd_ep_stall_check(nrfx_usbd_ep_t ep);
- void nrfx_usbd_ep_dtoggle_clear(nrfx_usbd_ep_t ep);
- void nrfx_usbd_setup_get(nrfx_usbd_setup_t * p_setup);
- void nrfx_usbd_setup_data_clear(void);
- void nrfx_usbd_setup_clear(void);
- void nrfx_usbd_setup_stall(void);
- void nrfx_usbd_ep_abort(nrfx_usbd_ep_t ep);
- nrfx_usbd_ep_t nrfx_usbd_last_setup_dir_get(void);
- void nrfx_usbd_transfer_out_drop(nrfx_usbd_ep_t ep);
- void nrfx_usbd_irq_handler(void);
- #ifdef __cplusplus
- }
- #endif
- #endif
|