summaryrefslogtreecommitdiff
path: root/tinyusb/class
diff options
context:
space:
mode:
authorhathach <[email protected]>2013-07-19 02:30:22 +0700
committerhathach <[email protected]>2013-07-19 02:30:22 +0700
commita522263a9d43679ea9ffa499c1ea0efba4a523ad (patch)
treefef67ed8ab6eff8347e30fbe8b6ac7cbf82e173d /tinyusb/class
parentce865721a56bade9a99661e425b9dd85d7510296 (diff)
add implementation for
- tusbh_cdc_rndis_is_mounted - tusbh_cdc_rndis_get_mac_addr
Diffstat (limited to 'tinyusb/class')
-rw-r--r--tinyusb/class/cdc_host.c5
-rw-r--r--tinyusb/class/cdc_host.h12
-rw-r--r--tinyusb/class/cdc_rndis_host.c19
3 files changed, 31 insertions, 5 deletions
diff --git a/tinyusb/class/cdc_host.c b/tinyusb/class/cdc_host.c
index 5dd37810b..49899c63b 100644
--- a/tinyusb/class/cdc_host.c
+++ b/tinyusb/class/cdc_host.c
@@ -91,6 +91,11 @@ bool tusbh_cdc_serial_is_mounted(uint8_t dev_addr)
(cdch_data[dev_addr-1].interface_protocol <= CDC_COMM_PROTOCOL_ATCOMMAND_CDMA);
}
+bool tusbh_cdc_rndis_is_mounted(uint8_t dev_addr)
+{
+ return tusbh_cdc_is_mounted(dev_addr) && cdch_data[dev_addr-1].is_rndis;
+}
+
tusb_error_t tusbh_cdc_send(uint8_t dev_addr, void const * p_data, uint32_t length, bool is_notify)
{
ASSERT( tusbh_cdc_is_mounted(dev_addr), TUSB_ERROR_CDCH_DEVICE_NOT_MOUNTED);
diff --git a/tinyusb/class/cdc_host.h b/tinyusb/class/cdc_host.h
index d45b047ab..9d6c559c6 100644
--- a/tinyusb/class/cdc_host.h
+++ b/tinyusb/class/cdc_host.h
@@ -64,7 +64,7 @@ typedef enum {
// APPLICATION PUBLIC API
//--------------------------------------------------------------------+
bool tusbh_cdc_serial_is_mounted(uint8_t dev_addr) ATTR_PURE ATTR_WARN_UNUSED_RESULT;
-bool tusbh_cdc_rndis_is_mounted(uint8_t dev_addr) ATTR_PURE ATTR_WARN_UNUSED_RESULT;
+
tusb_error_t tusbh_cdc_send(uint8_t dev_addr, void const * p_data, uint32_t length, bool is_notify);
tusb_error_t tusbh_cdc_receive(uint8_t dev_addr, void * p_buffer, uint32_t length, bool is_notify);
@@ -73,13 +73,21 @@ void tusbh_cdc_mounted_cb(uint8_t dev_addr) ATTR_WEAK;
void tusbh_cdc_unmounted_isr(uint8_t dev_addr) ATTR_WEAK;
void tusbh_cdc_xfer_isr(uint8_t dev_addr, tusb_event_t event, cdc_pipeid_t pipe_id, uint32_t xferred_bytes) ATTR_WEAK;
-//------------- RNDIS Application Callback (overshadow CDC callbacks) -------------//
+
#if TUSB_CFG_HOST_CDC_RNDIS
+//--------------------------------------------------------------------+
+// RNDIS APPLICATION API
+//--------------------------------------------------------------------+
+bool tusbh_cdc_rndis_is_mounted(uint8_t dev_addr) ATTR_PURE ATTR_WARN_UNUSED_RESULT;
+tusb_error_t tusbh_cdc_rndis_get_mac_addr(uint8_t dev_addr, uint8_t mac_address[6]);
+//------------- RNDIS Application Callback (overshadow CDC callbacks) -------------//
void tusbh_cdc_rndis_mounted_cb(uint8_t dev_addr) ATTR_WEAK;
void tusbh_cdc_rndis_unmounted_isr(uint8_t dev_addr) ATTR_WEAK;
void tusbh_cdc_rndis_xfer_isr(uint8_t dev_addr, tusb_event_t event, cdc_pipeid_t pipe_id, uint32_t xferred_bytes) ATTR_WEAK;
+
+
#endif
//--------------------------------------------------------------------+
diff --git a/tinyusb/class/cdc_rndis_host.c b/tinyusb/class/cdc_rndis_host.c
index 35ee88500..1f6720ef4 100644
--- a/tinyusb/class/cdc_rndis_host.c
+++ b/tinyusb/class/cdc_rndis_host.c
@@ -59,17 +59,30 @@ static uint8_t msg_payload[RNDIS_MSG_PAYLOAD_MAX] TUSB_CFG_ATTR_USBRAM ATTR_ALI
STATIC_ rndish_data_t rndish_data[TUSB_CFG_HOST_DEVICE_MAX];
-// TODO Microsoft requires message length for any get command must be at least 0x400 bytes
+// TODO Microsoft requires message length for any get command must be at least 4096 bytes
//--------------------------------------------------------------------+
// INTERNAL OBJECT & FUNCTION DECLARATION
//--------------------------------------------------------------------+
static tusb_error_t rndis_body_subtask(void);
static tusb_error_t send_message_get_response_subtask( uint8_t dev_addr, cdch_data_t *p_cdc,
- uint8_t const * p_mess, uint32_t mess_length,
+ uint8_t * p_mess, uint32_t mess_length,
uint8_t *p_response );
//--------------------------------------------------------------------+
+// APPLICATION API
+//--------------------------------------------------------------------+
+tusb_error_t tusbh_cdc_rndis_get_mac_addr(uint8_t dev_addr, uint8_t mac_address[6])
+{
+ ASSERT( tusbh_cdc_rndis_is_mounted(dev_addr), TUSB_ERROR_CDCH_DEVICE_NOT_MOUNTED);
+ ASSERT_PTR( mac_address, TUSB_ERROR_INVALID_PARA);
+
+ memcpy(mac_address, rndish_data[dev_addr-1].mac_address, 6);
+
+ return TUSB_ERROR_NONE;
+}
+
+//--------------------------------------------------------------------+
// IMPLEMENTATION
//--------------------------------------------------------------------+
@@ -219,7 +232,7 @@ void rndish_xfer_isr(cdch_data_t *p_cdc, pipe_handle_t pipe_hdl, tusb_event_t ev
//}
static tusb_error_t send_message_get_response_subtask( uint8_t dev_addr, cdch_data_t *p_cdc,
- uint8_t const * p_mess, uint32_t mess_length,
+ uint8_t * p_mess, uint32_t mess_length,
uint8_t *p_response)
{
tusb_error_t error;