diff --git a/sw/include/tester.h b/sw/include/tester.h new file mode 100644 index 0000000..b92edb6 --- /dev/null +++ b/sw/include/tester.h @@ -0,0 +1,6 @@ +#ifndef TESTER_H__ +#define TESTER_H__ + +void tester_poll(void); + +#endif /* TESTER_H__ */ \ No newline at end of file diff --git a/sw/include/usb-cdc.h b/sw/include/usb-cdc.h index 20b7836..63b2b9e 100644 --- a/sw/include/usb-cdc.h +++ b/sw/include/usb-cdc.h @@ -38,6 +38,8 @@ LGPL License Terms @ref lgpl_license #ifndef __CDC_H #define __CDC_H +#include + /* Definitions of Communications Device Class from * "Universal Serial Bus Class Definitions for Communications Devices * Revision 1.2" @@ -156,6 +158,9 @@ struct usb_cdc_notification { uint16_t wLength; } __attribute__((packed)); +int cdc_connected(); +void cdc_set_connected(int is_connected); + #endif /**@}*/ diff --git a/sw/src/main.c b/sw/src/main.c index c191409..9e9802e 100644 --- a/sw/src/main.c +++ b/sw/src/main.c @@ -41,6 +41,9 @@ int main(int argc, char **argv) while (1) { usb_poll(); + if (cdc_connected()) { + tester_poll(); + } } return 0; } diff --git a/sw/src/tester.c b/sw/src/tester.c new file mode 100644 index 0000000..6350a15 --- /dev/null +++ b/sw/src/tester.c @@ -0,0 +1,5 @@ +#include + +void tester_poll(void) { + return; +} \ No newline at end of file diff --git a/sw/src/usb-cdc.c b/sw/src/usb-cdc.c new file mode 100644 index 0000000..52d511c --- /dev/null +++ b/sw/src/usb-cdc.c @@ -0,0 +1,13 @@ +#include + +static int connected = 0; + +int cdc_connected(void) +{ + return connected; +} + +void cdc_set_connected(int is_connected) +{ + connected = is_connected; +} \ No newline at end of file diff --git a/sw/src/usb-setup.c b/sw/src/usb-setup.c index 5ca3160..59e76b3 100644 --- a/sw/src/usb-setup.c +++ b/sw/src/usb-setup.c @@ -3,6 +3,7 @@ #include #include +#include static uint8_t reply_buffer[8]; static uint8_t usb_configuration = 0; @@ -15,6 +16,14 @@ void usb_setup(const struct usb_setup_request *setup) switch (setup->wRequestAndType) { + + case 0x2021: // Set Line Coding + break; + + case 0x2221: // Set control line state + cdc_set_connected(setup->wValue & 1); /* Check RTS bit */ + break; + case 0x0500: // SET_ADDRESS case 0x0b01: // SET_INTERFACE break;