WIP: usb host lib
This commit is contained in:
@@ -17,11 +17,16 @@
|
||||
#include <Arduino.h>
|
||||
|
||||
|
||||
class SerialUSBHost
|
||||
{
|
||||
class SerialUSBHost {
|
||||
|
||||
public:
|
||||
SerialUSBHost(/* args */);
|
||||
SemaphoreHandle_t device_disconnected_sem;
|
||||
SerialUSBHost() = delete;
|
||||
static void init();
|
||||
|
||||
static void handle_event(const cdc_acm_host_dev_event_data_t *event, void *user_ctx);
|
||||
static bool handle_rx(const uint8_t *data, size_t data_len, void *arg);
|
||||
|
||||
static void takeSem();//XXX
|
||||
private:
|
||||
/**
|
||||
* @brief USB Host library handling task
|
||||
|
@@ -1,7 +1,53 @@
|
||||
#include "../include/SerialUSBHost.h"
|
||||
|
||||
|
||||
static SemaphoreHandle_t device_disconnected_sem;//XXX
|
||||
|
||||
static const char *TAG = "VCP example";
|
||||
|
||||
/**
|
||||
* @brief Data received callback
|
||||
*
|
||||
* Just pass received data to stdout
|
||||
*
|
||||
* @param[in] data Pointer to received data
|
||||
* @param[in] data_len Length of received data in bytes
|
||||
* @param[in] arg Argument we passed to the device open function
|
||||
* @return
|
||||
* true: We have processed the received data
|
||||
* false: We expect more data
|
||||
*/
|
||||
bool SerialUSBHost::handle_rx(const uint8_t *data, size_t data_len, void *arg)
|
||||
{
|
||||
printf("%.*s", data_len, data);
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Device event callback
|
||||
*
|
||||
* Apart from handling device disconnection it doesn't do anything useful
|
||||
*
|
||||
* @param[in] event Device event type and data
|
||||
* @param[in] user_ctx Argument we passed to the device open function
|
||||
*/
|
||||
void SerialUSBHost::handle_event(const cdc_acm_host_dev_event_data_t *event, void *user_ctx)
|
||||
{
|
||||
switch (event->type) {
|
||||
case CDC_ACM_HOST_ERROR:
|
||||
ESP_LOGE(TAG, "CDC-ACM error has occurred, err_no = %d", event->data.error);
|
||||
break;
|
||||
case CDC_ACM_HOST_DEVICE_DISCONNECTED:
|
||||
ESP_LOGI(TAG, "Device suddenly disconnected");
|
||||
xSemaphoreGive(device_disconnected_sem);
|
||||
break;
|
||||
case CDC_ACM_HOST_SERIAL_STATE:
|
||||
ESP_LOGI(TAG, "Serial state notif 0x%04X", event->data.serial_state.val);
|
||||
break;
|
||||
case CDC_ACM_HOST_NETWORK_CONNECTION:
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
|
||||
void SerialUSBHost::usb_lib_task(void* arg) {
|
||||
const String TAG = "SerialUSBHost_usb_lib_task";
|
||||
@@ -19,11 +65,9 @@ void SerialUSBHost::usb_lib_task(void* arg) {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
SerialUSBHost::SerialUSBHost() {
|
||||
void SerialUSBHost::init() {
|
||||
const String TAG = "SerialUSBHost_constructor";
|
||||
this->device_disconnected_sem = xSemaphoreCreateBinary();
|
||||
device_disconnected_sem = xSemaphoreCreateBinary();
|
||||
assert(device_disconnected_sem);
|
||||
|
||||
// Install USB Host driver. Should only be called once in entire application
|
||||
@@ -48,3 +92,8 @@ SerialUSBHost::SerialUSBHost() {
|
||||
esp_usb::VCP::register_driver<esp_usb::CH34x>();
|
||||
|
||||
}
|
||||
|
||||
|
||||
void SerialUSBHost::takeSem(){//XXX
|
||||
xSemaphoreTake(device_disconnected_sem, portMAX_DELAY);
|
||||
}
|
Reference in New Issue
Block a user