SLIPEncodedUSBSerial.h 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. /*
  2. Extends the Serial class to encode SLIP over serial
  3. */
  4. #include "Arduino.h"
  5. #ifndef SLIPEncodedUSBSerial_h
  6. #define SLIPEncodedUSBSerial_h
  7. #include <Stream.h>
  8. #if (defined(TEENSYDUINO) && defined(USB_SERIAL)) || (!defined(TEENSYDUINO) && defined(__AVR_ATmega32U4__)) || defined(__SAM3X8E__) || (defined(_USB) && defined(_USE_USB_FOR_SERIAL_)) || defined(_SAMD21_) || (defined(__PIC32MX__) || defined(__PIC32MZ__))
  9. //import the serial USB object
  10. #if defined(TEENSYDUINO) && defined (__arm__)
  11. #if !defined(USB_HOST_TEENSY36_)
  12. #include <usb_serial.h>
  13. #endif
  14. #elif defined(TEENSYDUINO) && defined (__AVR__)
  15. #include <usb_api.h>
  16. #elif defined(__SAM3X8E__) || defined(_SAMD21_)
  17. #include <USB/USBAPI.h>
  18. #elif (defined(__PIC32MX__) || defined(__PIC32MZ__))
  19. #include <USB.h>
  20. #elif defined(__AVR_ATmega32U4__)
  21. #include "USBAPI.h"
  22. #include <avr/wdt.h>
  23. #else
  24. #error Unknown USB port
  25. #endif
  26. class SLIPEncodedUSBSerial: public Stream{
  27. private:
  28. enum erstate {CHAR, FIRSTEOT, SECONDEOT, SLIPESC } rstate;
  29. //different type for each platform
  30. #if defined(CORE_TEENSY)
  31. #if defined(USB_HOST_TEENSY36)
  32. USBSerial
  33. #else
  34. usb_serial_class
  35. #endif
  36. #elif defined(__SAM3X8E__) || defined(__AVR_ATmega32U4__) || defined(_SAMD21_) || defined(__ARM__)
  37. Serial_
  38. #elif (defined(__PIC32MX__) || defined(__PIC32MZ__))
  39. CDCACM
  40. #else
  41. #error Unknown USBserial type
  42. #endif
  43. * serial;
  44. public:
  45. SLIPEncodedUSBSerial(
  46. //different constructor for each platform
  47. #if defined(CORE_TEENSY)
  48. #if defined(USB_HOST_TEENSY36)
  49. USBSerial
  50. #else
  51. usb_serial_class
  52. #endif
  53. #elif defined(__SAM3X8E__) || defined(__AVR_ATmega32U4__) || defined(_SAMD21_) || defined(__ARM__)
  54. Serial_
  55. #elif (defined(__PIC32MX__) || defined(__PIC32MZ__))
  56. CDCACM
  57. #else
  58. #error Unknown USBserial type
  59. #endif
  60. & );
  61. int available();
  62. int read();
  63. int readBytes( uint8_t *buffer, size_t size);
  64. int peek();
  65. void flush();
  66. //same as Serial.begin
  67. void begin(unsigned long);
  68. //SLIP specific method which begins a transmitted packet
  69. void beginPacket();
  70. //SLIP specific method which ends a transmittedpacket
  71. void endPacket();
  72. // SLIP specific method which indicates that an EOT was received
  73. bool endofPacket();
  74. //overrides the Stream's write function to encode SLIP
  75. size_t write(uint8_t b);
  76. size_t write(const uint8_t *buffer, size_t size);
  77. //using Print::write;
  78. };
  79. #endif
  80. #endif