History: usbd_cd_rndis
This page describes all changes made to the usbd_cd_rndis package, USB Device RNDIS Class Driver, since its release.
Version
2.12 (2020-06-05, 10:14):
- Eliminated compiler error that occurred when USBD_RNDIS_ACT_AS_NWDRIVER was set to 1.
- The RNDIS core handles the USBD connection state change (suspended, configured, etc).
2.11 (2019-10-22, 08:09):
- Interface could remain in "cable unplugged state" after disconnect/reconnect.
2.10 (2019-10-08, 09:45):
- Network interface could not receive packets after running for >1 hour.
2.9 (2019-03-18, 08:40):
- State change call-back function was called multiple times when the device was disconnected.
2.8 (2018-10-26, 13:48):
- Function prototype mismatch fixed for usbd_rndis_init(). In the API header file the first parameter was called p_eth_drv_init, while in the implementation it was p_nwd_drv_init.
- Type in some function headers fixed (calss-->class).
2.7r2 (2018-08-29, 18:15):
- Document HTML link added to the documentation folder.
- History and document files renamed to the package name.
2.7 (2018-08-01, 12:14):
- Class driver might stop and possibly reference NULL pointer after blocking the program execution for longer time (seconds; e.g. by stopping via debugger or a blocking high priority task) and then releasing it.
2.6r2 (2018-07-20, 13:29):
- Info. file dependencies corrected: package nw_drv_eth_usb_device is required if RNDIS is to be used with any TCP/IP stack (previously restricted to HCC's TCP/IP stack).
2.6 (2018-06-18, 15:19):
- NWDRIVER mode: completed transfer size reported via rndis_ethdrv_transfer_status() is the size of the Ethernet frame rather than the whole USB packet which also includes the RNDIS header.
- Padding bytes of Tx USB messages filled with zero according to the RNDIS standard.
2.5 (2018-04-20, 07:03):
- The driver could send invalid data to the host when USBD_RNDIS_ACT_AS_NWDRIVER was configured as 0. Windows 10 responded with fatal "blue screen".
- The driver sent invalid data in RESPONSE_AVAILABLE notification.
2.4 (2018-03-13, 09:10):
- Interface could stick in "cable unplugged state" after disconnect/reconnect.
2.3 (2017-08-15, 14:36):
- Packet filtering used wrong MAC address and filtered all outgoing unicast frames when usbd_rndis_set_mac_addr() was called.
2.2:
Bugs fixed (if USBD_RNDIS_ACT_AS_NWDRIVER is 0):
- Implemented packet filter.
- Status of interface is reported to USB host when it changes.
- Packet loss could occur when no OS is used.
Added Windows 7/8.x/10 driver (.inf file).
2.1:
- Class driver separated into two parts, depending on the new configuration option USBD_CDCECM_ACT_AS_NWDRIVER.
- If USBD_CDCECM_ACT_AS_NWDRIVER != 0, then the class driver acts as a network driver: it can be interfaced to a network interface, typically required if the class driver is used with HCC's TCP/IP stack.
- If USBD_CDCECM_ACT_AS_NWDRIVER == 0, then the class driver acts as a network interface: a network driver can be interfaced to it, typically required if the class driver needs to be used standalone or with a non HCC TCP/IP stack.
1.16:
Added usbd_rndis_set_mac_addr() function.
- Added default network address and link speed.
- Reception could unexpectedly stop under some circumstances.
- After connection RNDIS remained unoperational if the half of the RNDIS buffers in the network driver buffer area exceeded USBD_RNDIS_MAX_RX_USB_BUF_NUM or it was more than the no. of receive buffers allowed in the network driver (nwd_prop.nwp_rxbuf_count).
1.15:
- Reception could stop after disconnecting and reconnecting the device (buffers were exhausted if a receive couldn't start due to disconnected device).
1.14:
- Protection added against restarting USB Rx transfer while another one is in progress.
- usbd_rndis_tx_task(): COM_REQ_EVENT_FLAG removed from waiting flags' bit field as it is unnecessary here.
1.13:
- Mutex creation moved from usbd_rndis_nwdstart() to usbd_rndis_init().
- g_usbd_rndis_eth_started flag protected with mutex.
- nwd_start() call issued after add_buf()s.
1.12:
- Compilation error (C++, --require_prototypes) removed.
1.11:
- Changed config(_template): MTU size is coming from ethdriver_rndis config.
1.10:
- Modifications needed because of NWDRIVER structure changes.
1.9:
- New NWDRIVER version instead of ETHDRV.
1.8:
- Added handling for missing mandatory OIDs.
- Vendor ID, vendor description moved to config.
1.7:
- Compiler warnings removed.
1.6:
- Init: uninitialized mutex not used.
1.5:
- Incorrect MAC address report.
1.4:
- OID_GEN_RCV_NO_BUFFER support added in order to avoid incorrect disconnect state report under Win7.
1.3:
- CDC response available notification used instead of RNDIS notification to avoid network disconnected state report under Windows.
- link speed divided by 100 as required in the specification.
1.2:
- Receive buffer was lost if ZLP was received.
- ZLP sent in case of transmitted packets.
1.1:
- Cleanup (updated to latest requirements).
1.0:
- Initial release.