mirror of https://github.com/ARMmbed/mbed-os.git
USBCDC_ECM: send connection notifications to the host
Fix build issues after rebasepull/9443/head
parent
e7416db621
commit
fc00718917
|
|
@ -19,6 +19,8 @@
|
||||||
#include "USBCDC_ECM.h"
|
#include "USBCDC_ECM.h"
|
||||||
#include "EndpointResolver.h"
|
#include "EndpointResolver.h"
|
||||||
#include "usb_phy_api.h"
|
#include "usb_phy_api.h"
|
||||||
|
#include "mbed_interface.h"
|
||||||
|
#include "mbed_assert.h"
|
||||||
|
|
||||||
#define MAX_SEGMENT_SIZE (1514)
|
#define MAX_SEGMENT_SIZE (1514)
|
||||||
#define FLAG_WRITE_DONE (1 << 0)
|
#define FLAG_WRITE_DONE (1 << 0)
|
||||||
|
|
@ -41,9 +43,10 @@
|
||||||
#define CS_INTERFACE 0x24
|
#define CS_INTERFACE 0x24
|
||||||
#define NETWORK_CONNECTION 0x00
|
#define NETWORK_CONNECTION 0x00
|
||||||
#define CONNECTION_SPEED_CHANGE 0x2A
|
#define CONNECTION_SPEED_CHANGE 0x2A
|
||||||
|
#define LINK_SPEED (10000000)
|
||||||
|
|
||||||
USBCDC_ECM::USBCDC_ECM(bool connect_blocking, uint16_t vendor_id, uint16_t product_id, uint16_t product_release)
|
USBCDC_ECM::USBCDC_ECM(bool connect_blocking, uint16_t vendor_id, uint16_t product_id, uint16_t product_release)
|
||||||
: USBDevice(get_usb_phy(), vendor_id, product_id, product_release)
|
: USBDevice(get_usb_phy(), vendor_id, product_id, product_release), _queue(4 * EVENTS_EVENT_SIZE)
|
||||||
{
|
{
|
||||||
_init();
|
_init();
|
||||||
|
|
||||||
|
|
@ -57,7 +60,7 @@ USBCDC_ECM::USBCDC_ECM(bool connect_blocking, uint16_t vendor_id, uint16_t produ
|
||||||
}
|
}
|
||||||
|
|
||||||
USBCDC_ECM::USBCDC_ECM(USBPhy *phy, uint16_t vendor_id, uint16_t product_id, uint16_t product_release)
|
USBCDC_ECM::USBCDC_ECM(USBPhy *phy, uint16_t vendor_id, uint16_t product_id, uint16_t product_release)
|
||||||
: USBDevice(phy, vendor_id, product_id, product_release)
|
: USBDevice(phy, vendor_id, product_id, product_release), _queue(4 * EVENTS_EVENT_SIZE)
|
||||||
{
|
{
|
||||||
|
|
||||||
_init();
|
_init();
|
||||||
|
|
@ -77,6 +80,8 @@ void USBCDC_ECM::_init()
|
||||||
_bulk_out = resolver.endpoint_out(USB_EP_TYPE_BULK, MAX_PACKET_SIZE_BULK);
|
_bulk_out = resolver.endpoint_out(USB_EP_TYPE_BULK, MAX_PACKET_SIZE_BULK);
|
||||||
|
|
||||||
MBED_ASSERT(resolver.valid());
|
MBED_ASSERT(resolver.valid());
|
||||||
|
|
||||||
|
_thread.start(callback(&_queue, &events::EventQueue::dispatch_forever));
|
||||||
}
|
}
|
||||||
|
|
||||||
void USBCDC_ECM::callback_reset()
|
void USBCDC_ECM::callback_reset()
|
||||||
|
|
@ -100,12 +105,6 @@ void USBCDC_ECM::callback_set_configuration(uint8_t configuration)
|
||||||
|
|
||||||
bool ret = false;
|
bool ret = false;
|
||||||
if (configuration == DEFAULT_CONFIGURATION) {
|
if (configuration == DEFAULT_CONFIGURATION) {
|
||||||
// Configure endpoints > 0
|
|
||||||
endpoint_add(_int_in, MAX_PACKET_SIZE_INT, USB_EP_TYPE_INT, &USBCDC_ECM::_int_callback);
|
|
||||||
endpoint_add(_bulk_in, MAX_PACKET_SIZE_BULK, USB_EP_TYPE_BULK, &USBCDC_ECM::_bulk_in_callback);
|
|
||||||
endpoint_add(_bulk_out, MAX_PACKET_SIZE_BULK, USB_EP_TYPE_BULK, &USBCDC_ECM::_bulk_out_callback);
|
|
||||||
|
|
||||||
read_start(_bulk_out, _bulk_buf, MAX_PACKET_SIZE_BULK);
|
|
||||||
ret = true;
|
ret = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -180,6 +179,12 @@ bool USBCDC_ECM::_notify_connection_speed_change(uint32_t up, uint32_t down)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void USBCDC_ECM::_notify_connect()
|
||||||
|
{
|
||||||
|
_notify_network_connection(1);
|
||||||
|
_notify_connection_speed_change(LINK_SPEED, LINK_SPEED);
|
||||||
|
}
|
||||||
|
|
||||||
bool USBCDC_ECM::_write_bulk(uint8_t *buffer, uint32_t size)
|
bool USBCDC_ECM::_write_bulk(uint8_t *buffer, uint32_t size)
|
||||||
{
|
{
|
||||||
bool ret = true;
|
bool ret = true;
|
||||||
|
|
@ -281,6 +286,16 @@ void USBCDC_ECM::callback_set_interface(uint16_t interface, uint8_t alternate)
|
||||||
assert_locked();
|
assert_locked();
|
||||||
/* Called in ISR context */
|
/* Called in ISR context */
|
||||||
|
|
||||||
|
if (alternate) {
|
||||||
|
endpoint_add(_int_in, MAX_PACKET_SIZE_INT, USB_EP_TYPE_INT, &USBCDC_ECM::_int_callback);
|
||||||
|
endpoint_add(_bulk_in, MAX_PACKET_SIZE_BULK, USB_EP_TYPE_BULK, &USBCDC_ECM::_bulk_in_callback);
|
||||||
|
endpoint_add(_bulk_out, MAX_PACKET_SIZE_BULK, USB_EP_TYPE_BULK, &USBCDC_ECM::_bulk_out_callback);
|
||||||
|
|
||||||
|
read_start(_bulk_out, _bulk_buf, MAX_PACKET_SIZE_BULK);
|
||||||
|
|
||||||
|
_queue.call(static_cast<USBCDC_ECM *>(this), &USBCDC_ECM::_notify_connect);
|
||||||
|
}
|
||||||
|
|
||||||
complete_set_interface(true);
|
complete_set_interface(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,11 @@
|
||||||
#include "USBDescriptor.h"
|
#include "USBDescriptor.h"
|
||||||
#include "USBDevice.h"
|
#include "USBDevice.h"
|
||||||
|
|
||||||
|
#include "Mutex.h"
|
||||||
|
#include "EventFlags.h"
|
||||||
|
#include "EventQueue.h"
|
||||||
|
#include "Thread.h"
|
||||||
|
|
||||||
#define MAX_PACKET_SIZE_INT (64)
|
#define MAX_PACKET_SIZE_INT (64)
|
||||||
#define MAX_PACKET_SIZE_BULK (64)
|
#define MAX_PACKET_SIZE_BULK (64)
|
||||||
#define MAX_PACKET_SIZE_EP0 (64)
|
#define MAX_PACKET_SIZE_EP0 (64)
|
||||||
|
|
@ -200,6 +205,9 @@ private:
|
||||||
rtos::EventFlags _flags;
|
rtos::EventFlags _flags;
|
||||||
rtos::Mutex _write_mutex;
|
rtos::Mutex _write_mutex;
|
||||||
|
|
||||||
|
events::EventQueue _queue;
|
||||||
|
rtos::Thread _thread;
|
||||||
|
|
||||||
void _init();
|
void _init();
|
||||||
void _int_callback();
|
void _int_callback();
|
||||||
void _bulk_in_callback();
|
void _bulk_in_callback();
|
||||||
|
|
@ -207,6 +215,7 @@ private:
|
||||||
bool _notify_network_connection(uint8_t value);
|
bool _notify_network_connection(uint8_t value);
|
||||||
bool _notify_connection_speed_change(uint32_t up, uint32_t down);
|
bool _notify_connection_speed_change(uint32_t up, uint32_t down);
|
||||||
bool _write_bulk(uint8_t *buffer, uint32_t size);
|
bool _write_bulk(uint8_t *buffer, uint32_t size);
|
||||||
|
void _notify_connect();
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue