From 71074a90363b3674ee2b20102d6cb217124bbe3e Mon Sep 17 00:00:00 2001 From: Libor Tomsik Date: Fri, 17 Feb 2017 20:47:05 +0100 Subject: [PATCH 1/2] Implemented DTR pin feature. --- .../libraries/DigisparkCDC/DigiCDC.cpp | 17 ++++++++++------- digistump-avr/libraries/DigisparkCDC/DigiCDC.h | 1 + 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/digistump-avr/libraries/DigisparkCDC/DigiCDC.cpp b/digistump-avr/libraries/DigisparkCDC/DigiCDC.cpp index 938283a..c72fc30 100644 --- a/digistump-avr/libraries/DigisparkCDC/DigiCDC.cpp +++ b/digistump-avr/libraries/DigisparkCDC/DigiCDC.cpp @@ -16,6 +16,7 @@ and Digistump LLC (digistump.com) uchar sendEmptyFrame; static uchar intr3Status; /* used to control interrupt endpoint transmissions */ +static uchar portB_dtr_bit; DigiCDCDevice::DigiCDCDevice(void){} @@ -143,8 +144,8 @@ void DigiCDCDevice::usbBegin() RingBuffer_InitBuffer(&rxBuf,rxBuf_Data,sizeof(rxBuf_Data)); intr3Status = 0; - sendEmptyFrame = 0; - + sendEmptyFrame = 0; + portB_dtr_bit = 255; sei(); } @@ -186,11 +187,11 @@ void DigiCDCDevice::usbPollWrapper() } - - - - - +void DigiCDCDevice::setDtrPin(uint8_t dtrPin){ + portB_dtr_bit = dtrPin; + PORTB &= ~(_BV(portB_dtr_bit)); + DDRB |= (1 << portB_dtr_bit); +} #ifdef __cplusplus extern "C"{ @@ -320,6 +321,8 @@ usbRequest_t *rq = (usbRequest_t*)((void *)data); /* SET_LINE_CODING -> usbFunctionWrite() */ } if(rq->bRequest == SET_CONTROL_LINE_STATE){ + if(portB_dtr_bit != 0xFF) + PORTB = (PORTB&~(1<wValue.word&1)< Date: Fri, 17 Feb 2017 20:54:18 +0100 Subject: [PATCH 2/2] Added example for DTR --- .../examples/CDC_DTR_LED/DigisparkDTR.ino | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 digistump-avr/libraries/DigisparkCDC/examples/CDC_DTR_LED/DigisparkDTR.ino diff --git a/digistump-avr/libraries/DigisparkCDC/examples/CDC_DTR_LED/DigisparkDTR.ino b/digistump-avr/libraries/DigisparkCDC/examples/CDC_DTR_LED/DigisparkDTR.ino new file mode 100644 index 0000000..8984c5d --- /dev/null +++ b/digistump-avr/libraries/DigisparkCDC/examples/CDC_DTR_LED/DigisparkDTR.ino @@ -0,0 +1,11 @@ +#include +void setup() { + SerialUSB.begin(); + // initialize the digital pin 1 as an DTR output. + SerialUSB.setDtrPin(1); +} + +// the loop routine runs over and over again forever: +void loop() { + SerialUSB.delay(10); +}