17#ifndef __USBD_CDC_NCM_H
18#define __USBD_CDC_NCM_H
25#include "ncm_protocol.h"
34#define NCM_BULK_EP_NUM (1)
35#define NCM_INT_EP_NUM (2)
36#define NCM_BULK_MAX_PACKET_HS (512)
37#define NCM_BULK_MAX_PACKET_FS (64)
38#define NCM_INT_MAX_PACKET (16)
43#define CDC_SEND_ENCAPSULATED_CMD (0x00)
44#define CDC_GET_ENCAPSULATED_RESP (0x01)
49#define NCM_STRING_IDX_MANUFACTURER (1)
50#define NCM_STRING_IDX_PRODUCT (2)
51#define NCM_STRING_IDX_SERIAL (3)
52#define NCM_STRING_IDX_MAC (4)
67 uint8_t currentAltSetting;
74 uint32_t ntbInMaxSize;
75 uint32_t ntbOutMaxSize;
80 uint32_t txFramesError;
81 uint32_t rxFramesError;
85 uint8_t ntbRxBuf[NCM_MAX_NTB_SIZE] __attribute__((aligned(64)));
86 uint8_t ntbTxBuf[NCM_MAX_NTB_SIZE] __attribute__((aligned(64)));
89 ncm_tx_state_t txState;
94 ncm_rx_state_t rxState;
121 int ParseNtb16(uint8_t *ntb, uint32_t length);
126 int BuildNtb16(uint8_t *destBuf, uint8_t *frameData, uint32_t frameLen);
142 dCDC_NCM(nbrtos::USB::Ctlr *parent,
const usb_dev_t *desc,
143 const usb_cfg_t *cfg,
const nbrtos::USB::StrDescTbl *strTbl);
163 bool IsDataReady()
const {
return ncmState == NCM_STATE_CONNECTED; }
166 virtual void Event_BusReset()
override;
167 virtual void Event_Suspend()
override;
168 virtual void Event_Resume()
override;
169 virtual int Event_ControlMsg(nbrtos::USB::bufPtr_t ctlMsg, uint8_t bufLen)
override;
170 virtual int SetConfiguration(uint16_t wValue)
override;
171 virtual int SetAltSetting(uint16_t wIndex, uint16_t wValue)
override;
172 virtual int ProcessBuffer(uint8_t epnum,
PoolPtr pp, uint16_t bufLen)
override;
173 virtual int ProcessSetupPkt(uint8_t epnum, usb_setup_pkt_t msg)
override;
174 virtual uint16_t GetMaxPktSize(uint8_t epnum, eDir_t dir)
override;
175 virtual uint16_t GetStatus(eReqTarget_t target, uint16_t wIndex,
int *err)
override;
176 virtual uint8_t GetActiveConfig(
int *err)
override;
177 virtual uint8_t GetAltSetting(uint8_t intfNum,
int *err)
override;
179 nbrtos::USB::eBusState_t GetUSBState();
180 void SetUSBState(nbrtos::USB::eBusState_t newState);
183 int HandleGetNtbParameters(uint8_t epnum, uint16_t wLength);
184 int HandleSetNtbInputSize(uint8_t *data, uint16_t length);
185 int HandleGetNtbInputSize(uint8_t epnum, uint16_t wLength);
186 int HandleSetEthernetPacketFilter(uint16_t wValue);
189 int TransmitEthernetFrame(
PoolPtr pp);
190 void DeliverToNetworkStack(uint8_t *data, uint16_t len);
193 void ProcessTxStateMachine();
194 void ProcessRxStateMachine();
199 ifNumber = interfaceNum;
214int InitializeUSBNCM(
dCDC_NCM *pNcm);
Network interface configuration block class for interface control and configuration.
Definition netinterface.h:244
Used to store and manipulate MAC addresses.
Definition nettypes.h:69
Network interface block for NCM USB device.
Definition src/ncm_interface.h:30
USB CDC NCM Device Class for Ethernet-over-USB.
Definition src/usbd_cdc_ncm.h:63
int BuildNtb16(uint8_t *destBuf, uint8_t *frameData, uint32_t frameLen)
Build NTB16 for transmission.
Definition src/usbd_cdc_ncm.cpp:1061
void SetMACAddress(const MACADR &mac)
Set the MAC address for this NCM interface.
Definition src/usbd_cdc_ncm.cpp:404
int SendNetworkConnectionNotification(bool connected)
Send NETWORK_CONNECTION notification.
Definition src/usbd_cdc_ncm.cpp:838
dCDC_NCM(nbrtos::USB::Ctlr *parent, const usb_dev_t *desc, const usb_cfg_t *cfg, const nbrtos::USB::StrDescTbl *strTbl)
Constructor.
bool IsDataReady() const
Check if NCM is ready for data transfer.
Definition src/usbd_cdc_ncm.h:163
ncm_state_t GetNcmState() const
Get the current NCM state.
Definition src/usbd_cdc_ncm.h:158
int ParseNtb16(uint8_t *ntb, uint32_t length)
Parse received NTB and extract datagrams.
Definition src/usbd_cdc_ncm.cpp:976
int SendSpeedChangeNotification()
Send CONNECTION_SPEED_CHANGE notification.
Definition src/usbd_cdc_ncm.cpp:862
int QueueRx()
Queue a receive operation on the bulk OUT endpoint.
Definition src/usbd_cdc_ncm.cpp:952
void SetLinkSpeed(uint32_t speedMbps)
Set the link speed in Mbps.
Definition src/usbd_cdc_ncm.cpp:409
friend void UserMain(void *pd)
Main application entry point.
Definition aes/src/main.cpp:75
int32_t GetInterfaceNumber(InterfaceBlock *pifb)
Returns the Interface Number of the specified network interface InterfaceBlock.
Mutual-exclusion critical section for protecting shared resources between tasks.
Definition nbrtos.h:1391
Main buffer structure for network and serial communication.
Definition buffers.h:90