12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- #include "main.h"
- #include "cmsis_os.h"
- #include "cdc.h"
- #include "tusb.h"
- // echo to either Serial0 or Serial1
- // with Serial0 as all lower case, Serial1 as all upper case
- static void echo_serial_port(uint8_t itf, uint8_t buf[], uint32_t count)
- {
- uint8_t const case_diff = 'a' - 'A';
- for(uint32_t i=0; i<count; i++)
- {
- if (itf == 0)
- {
- // echo back 1st port as lower case
- if (isupper(buf[i])) buf[i] += case_diff;
- }
- else
- {
- // echo back 2nd port as upper case
- if (islower(buf[i])) buf[i] -= case_diff;
- }
- tud_cdc_n_write_char(itf, buf[i]);
- }
- tud_cdc_n_write_flush(itf);
- }
- //--------------------------------------------------------------------+
- // USB CDC
- //--------------------------------------------------------------------+
- void cdctask(void)
- {
- uint8_t itf;
- for (itf = 0; itf < CFG_TUD_CDC; itf++)
- {
- // connected() check for DTR bit
- // Most but not all terminal client set this when making connection
- // if ( tud_cdc_n_connected(itf) )
- {
- if ( tud_cdc_n_available(itf) )
- {
- uint8_t buf[64];
- uint32_t count = tud_cdc_n_read(itf, buf, sizeof(buf));
- // echo back to both serial ports
- echo_serial_port(0, buf, count);
- echo_serial_port(1, buf, count);
- }
- }
- }
- }
|