summaryrefslogtreecommitdiff
path: root/tinyusb/class
diff options
context:
space:
mode:
authorhathach <[email protected]>2013-06-21 14:20:08 +0700
committerhathach <[email protected]>2013-06-21 14:20:08 +0700
commit5c564df8c172af0da3badabfa8e813fdd33949ff (patch)
treec0dcc52362aa02e8eb4eb6f45f4354c1bdf2d286 /tinyusb/class
parent3924764dff9d90ccff09e1d657c6f40ed8def8d9 (diff)
add api for hcd: hcd_pipe_is_idle
add api for usbh: tusbh_device_get_mounted_class_flag implement api for custom class - is mounted - read
Diffstat (limited to 'tinyusb/class')
-rw-r--r--tinyusb/class/custom_class.h11
-rw-r--r--tinyusb/class/custom_class_host.c29
-rw-r--r--tinyusb/class/hid_host.c2
3 files changed, 40 insertions, 2 deletions
diff --git a/tinyusb/class/custom_class.h b/tinyusb/class/custom_class.h
index 9a6588a26..1d226d489 100644
--- a/tinyusb/class/custom_class.h
+++ b/tinyusb/class/custom_class.h
@@ -61,6 +61,17 @@ typedef struct {
//--------------------------------------------------------------------+
// USBH-CLASS DRIVER API
//--------------------------------------------------------------------+
+STATIC_ INLINE_ bool tusbh_custom_is_mounted(uint8_t dev_addr, uint16_t vendor_id, uint16_t product_id);
+STATIC_ INLINE_ bool tusbh_custom_is_mounted(uint8_t dev_addr, uint16_t vendor_id, uint16_t product_id)
+{
+ (void) vendor_id; // TODO check this later
+ (void) product_id;
+ return (tusbh_device_get_mounted_class_flag(dev_addr) & BIT_(TUSB_CLASS_MAPPED_INDEX_END-1) ) != 0;
+}
+
+tusb_error_t tusbh_custom_read(uint8_t dev_addr, uint16_t vendor_id, uint16_t product_id, void * p_buffer, uint16_t length);
+tusb_error_t tusbh_custom_write(uint8_t dev_addr, uint16_t vendor_id, uint16_t product_id, void const * p_data, uint16_t length);
+
#ifdef _TINY_USB_SOURCE_FILE_
void cush_init(void);
diff --git a/tinyusb/class/custom_class_host.c b/tinyusb/class/custom_class_host.c
index 723cb06ff..568c20f3f 100644
--- a/tinyusb/class/custom_class_host.c
+++ b/tinyusb/class/custom_class_host.c
@@ -56,8 +56,35 @@
// INTERNAL OBJECT & FUNCTION DECLARATION
//--------------------------------------------------------------------+
custom_interface_info_t custom_interface[TUSB_CFG_HOST_DEVICE_MAX];
+
+//--------------------------------------------------------------------+
+// APPLICATION API
+//--------------------------------------------------------------------+
+tusb_error_t tusbh_custom_read(uint8_t dev_addr, uint16_t vendor_id, uint16_t product_id, void * p_buffer, uint16_t length)
+{
+ if ( !tusbh_custom_is_mounted(dev_addr, vendor_id, product_id) )
+ {
+ return TUSB_ERROR_DEVICE_NOT_READY;
+ }
+
+ ASSERT( p_buffer != NULL && length != 0, TUSB_ERROR_INVALID_PARA);
+ if ( hcd_pipe_is_idle(custom_interface[dev_addr-1].pipe_in) )
+ {
+ return TUSB_ERROR_INTERFACE_IS_BUSY;
+ }
+
+ (void) hcd_pipe_xfer( custom_interface[dev_addr-1].pipe_in, p_buffer, length, false);
+
+ return TUSB_ERROR_NONE;
+}
+
+tusb_error_t tusbh_custom_write(uint8_t dev_addr, uint16_t vendor_id, uint16_t product_id, void const * p_data, uint16_t length)
+{
+ return TUSB_ERROR_NONE;
+}
+
//--------------------------------------------------------------------+
-// IMPLEMENTATION
+// USBH-CLASS API
//--------------------------------------------------------------------+
void cush_init(void)
{
diff --git a/tinyusb/class/hid_host.c b/tinyusb/class/hid_host.c
index 3546a512a..1caea01ee 100644
--- a/tinyusb/class/hid_host.c
+++ b/tinyusb/class/hid_host.c
@@ -95,11 +95,11 @@ tusb_error_t hidh_interface_get_report(uint8_t dev_addr, void * report, hidh_int
tusb_error_t hidh_interface_get_report(uint8_t dev_addr, void * report, hidh_interface_info_t *p_hid)
{
//------------- parameters validation -------------//
+ // TODO change to use is configured function
ASSERT_INT(TUSB_DEVICE_STATE_CONFIGURED, tusbh_device_get_state(dev_addr), TUSB_ERROR_DEVICE_NOT_READY);
ASSERT_PTR(report, TUSB_ERROR_INVALID_PARA);
ASSERT(TUSB_INTERFACE_STATUS_BUSY != p_hid->status, TUSB_ERROR_INTERFACE_IS_BUSY);
- // TODO abstract to use hidh service
ASSERT_STATUS( hcd_pipe_xfer(p_hid->pipe_hdl, report, p_hid->report_size, true) ) ;
p_hid->status = TUSB_INTERFACE_STATUS_BUSY;