NetBurner 3.5.7
PDF Version
usbd_cdc_acm.h
1/*NB_REVISION*/
2
3/*NB_COPYRIGHT*/
4
26#ifndef __USBD_CDC_ACM_H
27#define __USBD_CDC_ACM_H
28
29#ifdef SOMRT1061
30#include <usb.h>
31#include <iointernal.h>
32#include <usb_cdc.h>
33
34
50#define PORT_FLAGS_RDAVAIL_SHIFT (0)
51
53#define PORT_FLAGS_WRAVAIL_SHIFT (8)
54
56#define PORT_FLAGS_ERROR_SHIFT (16)
57
58 // end of Port Flag Bit Positions
59
189class dCDC_ACM : public nbrtos::USB::Device {
190protected:
195
198
200 int thisFd;
201
203 int rxQueued;
204
206 int txQueued;
207
209 int baseEP;
210
217 int oldStdio[3];
218
220 uint32_t line_Baud;
221
223 uint8_t line_Stop;
224
226 uint8_t line_Parity;
227
229 uint8_t line_Bits;
230
232 uint32_t devState;
233
235 OS_CRIT portCrit;
236
238 OS_FLAGS portFlags;
239
241 IoExpandStruct ioStruct;
242
255 static int fd_read(int fd, char *buf, int nbytes);
256
269 static int fd_write(int fd, const char *buf, int nbytes);
270
281 static int fd_close(int fd);
282
294 static int fd_peek(int fd, char *buf);
295
308 int ProcessTxnBuffer(uint8_t epnum, PoolPtr pp, uint16_t bufLen);
309
322 virtual int Do_SetLineCoding(uint8_t epnum, CDC_LineCoding_t coding);
323
335 virtual int Do_SetCtlLineState(usb_setup_pkt_t msg);
336
345 int QueueRx();
346
349 // don't document or all UserMain() examples comments will appear
350 /* Grant UserMain access to protected members for initialization */
351 friend void UserMain(void *pd);
354public:
371 dCDC_ACM(nbrtos::USB::Ctlr *parent, const usb_dev_t *desc,
372 const usb_cfg_t *cfg, const nbrtos::USB::StrDescTbl *strTbl);
373
380 virtual void Event_BusReset();
381
388 virtual void Event_Suspend();
389
396 virtual void Event_Resume();
397
410 virtual int Event_ControlMsg(nbrtos::USB::bufPtr_t ctlMsg, uint8_t bufLen);
411
422 virtual int SetConfiguration(uint16_t wValue);
423
435 virtual int SetAltSetting(uint16_t wIndex, uint16_t wValue);
436
449 virtual int ProcessBuffer(uint8_t ep, PoolPtr pp, uint16_t bufLen);
450
464 static int sProcessBuffer(Device *dev, uint8_t ep, PoolPtr pp, uint16_t bufLen);
465
477 virtual uint16_t GetStatus(eReqTarget_t target, uint16_t wIndex, int *err);
478
488 virtual uint8_t GetActiveConfig(int *err);
489
500 virtual uint8_t GetAltSetting(uint8_t intfNum, int *err);
501
512 virtual uint16_t GetMaxPktSize(uint8_t epnum, eDir_t dir);
513
523 nbrtos::USB::eBusState_t GetUSBState();
524
534 void SetUSBState(nbrtos::USB::eBusState_t newState);
535
550 int ReadData(uint8_t *pData, int rdLen);
551
607 int ReadWTimeout(uint8_t *pData, int rdLen, TickTimeout timeout);
608
624 int WriteData(uint8_t *pData, int wrLen);
625
640 int WriteWTimeout(uint8_t *pData, int wrLen, TickTimeout timeout);
641
680 int Open();
681
692 int Peek(uint8_t *buf);
693
705 virtual int ProcessSetupPkt(uint8_t epnum, usb_setup_pkt_t msg);
706};
707
708 // end of groupSOMRT1061_USB_CDC_ACM
709
710
711#endif /* SOMRT1061 */
712#endif /* ----- #ifndef __USBD_CDC_ACM_H ----- */
USB CDC Abstract Control Model Device Class.
Definition usbd_cdc_acm.h:189
int WriteData(uint8_t *pData, int wrLen)
Write data to the CDC device (non-blocking)
virtual int ProcessBuffer(uint8_t ep, PoolPtr pp, uint16_t bufLen)
Process a received data buffer.
virtual int Event_ControlMsg(nbrtos::USB::bufPtr_t ctlMsg, uint8_t bufLen)
Handle USB control message.
nbrtos::USB::eBusState_t GetUSBState()
Get current USB bus state.
virtual void Event_BusReset()
Handle USB bus reset event.
int ReadWTimeout(uint8_t *pData, int rdLen, TickTimeout timeout)
Read data from the CDC device with timeout.
virtual void Event_Resume()
Handle USB resume event.
int ReadData(uint8_t *pData, int rdLen)
Read data from the CDC device (non-blocking)
void SetUSBState(nbrtos::USB::eBusState_t newState)
Set USB bus state.
virtual int SetConfiguration(uint16_t wValue)
Set the active USB configuration.
virtual void Event_Suspend()
Handle USB suspend event.
virtual uint16_t GetStatus(eReqTarget_t target, uint16_t wIndex, int *err)
Get device or endpoint status.
virtual int ProcessSetupPkt(uint8_t epnum, usb_setup_pkt_t msg)
Process USB setup packet.
int Open()
Open the CDC device for use.
virtual uint16_t GetMaxPktSize(uint8_t epnum, eDir_t dir)
Get maximum packet size for an endpoint.
virtual uint8_t GetAltSetting(uint8_t intfNum, int *err)
Get current alternate setting for an interface.
int WriteWTimeout(uint8_t *pData, int wrLen, TickTimeout timeout)
Write data to the CDC device with timeout.
int Peek(uint8_t *buf)
Peek at the next byte without removing it.
virtual int SetAltSetting(uint16_t wIndex, uint16_t wValue)
Set alternate interface setting.
virtual uint8_t GetActiveConfig(int *err)
Get currently active configuration.
static int sProcessBuffer(Device *dev, uint8_t ep, PoolPtr pp, uint16_t bufLen)
Static callback wrapper for ProcessBuffer.
dCDC_ACM(nbrtos::USB::Ctlr *parent, const usb_dev_t *desc, const usb_cfg_t *cfg, const nbrtos::USB::StrDescTbl *strTbl)
Construct a CDC ACM device instance.
FIFO buffer storage using linked pool buffers.
Definition buffers.h:443
Main buffer structure for network and serial communication.
Definition buffers.h:90