USB-Serial Update
This commit is contained in:
parent
7fbe6dee0a
commit
8997abe61b
2 changed files with 25 additions and 12 deletions
|
|
@ -69,6 +69,7 @@ Your Arduino IDE will output errors then if you double click the file and try to
|
|||
* Added USB Wakeup support
|
||||
* Separated USB-Core in its own folder
|
||||
* Added HID Tables
|
||||
* USB-Serial now fully reprogrammable
|
||||
```
|
||||
|
||||
```
|
||||
|
|
|
|||
|
|
@ -2,16 +2,21 @@
|
|||
Copyright (c) 2014 NicoHood
|
||||
See the readme for credit to other people.
|
||||
|
||||
HoodLoader2 USB-Serial
|
||||
USB-Serial
|
||||
|
||||
Transferes from USB to HW Serial and vice versa.
|
||||
It also resets the main MCU on a DTR rise.
|
||||
*/
|
||||
|
||||
// define the reset pin to reset the destination MCU.
|
||||
// this definition is made for HoodLoader2 (pin 20)
|
||||
// but you still can use it with any other USB MCU or pin
|
||||
const int resetPin = MAIN_MCU_RESET_PIN;
|
||||
|
||||
void setup() {
|
||||
// set main MCU by default active
|
||||
pinMode(MAIN_MCU_RESET_PIN, OUTPUT);
|
||||
digitalWrite(MAIN_MCU_RESET_PIN, HIGH);
|
||||
pinMode(resetPin, OUTPUT);
|
||||
digitalWrite(resetPin, HIGH);
|
||||
|
||||
// Start USB and HW Serial
|
||||
Serial.begin(115200);
|
||||
|
|
@ -31,21 +36,28 @@ void loop() {
|
|||
if (Serial1.available()) {
|
||||
Serial.flush();
|
||||
// send maximum one EP_SIZE to give the usb some time to flush the buffer
|
||||
uint8_t buff[USB_EP_SIZE-1];
|
||||
uint8_t buff[USB_EP_SIZE - 1];
|
||||
int i = 0;
|
||||
for (i = 0; i < USB_EP_SIZE-1; i++) {
|
||||
for (i = 0; i < USB_EP_SIZE - 1; i++) {
|
||||
if (Serial1.available())
|
||||
buff[i] = Serial1.read();
|
||||
else break;
|
||||
}
|
||||
Serial.write(buff, i);
|
||||
}
|
||||
|
||||
// reset the main mcu if DTR goes HIGH
|
||||
static bool lastDTR = 0;
|
||||
bool newDTR = (Serial.lineState()&CDC_CONTROL_LINE_OUT_DTR) ? 1 : 0;
|
||||
if (lastDTR ^ newDTR)
|
||||
digitalWrite(MAIN_MCU_RESET_PIN, lastDTR);
|
||||
lastDTR = newDTR;
|
||||
}
|
||||
|
||||
void CDC_LineEncodingEvent(void)
|
||||
{
|
||||
// start HW Serial with new baud rate
|
||||
Serial1.end();
|
||||
Serial1.begin(Serial.baud());
|
||||
}
|
||||
|
||||
void CDC_LineStateEvent(void) {
|
||||
// reset the main mcu if DTR goes HIGH
|
||||
if (Serial.dtr())
|
||||
digitalWrite(resetPin, LOW);
|
||||
else
|
||||
digitalWrite(resetPin, HIGH);
|
||||
}
|
||||
Loading…
Reference in a new issue