Created
February 1, 2021 03:06
-
-
Save rwoodr/b8de7ef187912f64287b82291f8da364 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* Edited by Robert Woodruff 2021 | |
* From the USBFTDILoopback.ino example provided with the USB Host Shield 2.0 library | |
* https://github.com/felis/USB_Host_Shield_2.0 | |
* Released under GNU General Public License | |
* | |
* This example will check the UART receive buffer once every program loop | |
* If data is available, one byte will be read in and sent to the MAX3421E | |
* | |
* The MAX3421E USB receive buffer will be checked once every program loop | |
* If data is available, 0 - 62 bytes will be retrieved and sent over UART | |
*/ | |
#include <cdcftdi.h> | |
#include <usbhub.h> | |
#include "pgmstrings.h" | |
// Satisfy the IDE, which needs to see the include statment in the ino too. | |
#ifdef dobogusinclude | |
#include <spi4teensy3.h> | |
#endif | |
#include <SPI.h> | |
class FTDIAsync : public FTDIAsyncOper | |
{ | |
public: | |
uint8_t OnInit(FTDI *pftdi); | |
}; | |
uint8_t FTDIAsync::OnInit(FTDI *pftdi) | |
{ | |
uint8_t rcode = 0; | |
rcode = pftdi->SetBaudRate(115200); | |
if (rcode) | |
{ | |
ErrorMessage<uint8_t>(PSTR("SetBaudRate"), rcode); | |
return rcode; | |
} | |
rcode = pftdi->SetFlowControl(FTDI_SIO_DISABLE_FLOW_CTRL); | |
if (rcode) | |
ErrorMessage<uint8_t>(PSTR("SetFlowControl"), rcode); | |
return rcode; | |
} | |
USB Usb; | |
//USBHub Hub(&Usb); | |
FTDIAsync FtdiAsync; | |
FTDI Ftdi(&Usb, &FtdiAsync); | |
void setup() | |
{ | |
Serial.begin( 115200 ); | |
#if !defined(__MIPSEL__) | |
while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection | |
#endif | |
Serial.println("Start"); | |
if (Usb.Init() == -1) | |
Serial.println("OSC did not start."); | |
delay( 200 ); | |
} | |
void loop() | |
{ | |
Usb.Task(); | |
if( Usb.getUsbTaskState() == USB_STATE_RUNNING ) | |
{ | |
uint8_t rcode; | |
char strbuf[2] = ""; | |
if (Serial.available()) | |
{ | |
// Read character from UART buffer | |
strbuf[0] = Serial.read(); | |
// Echo character to terminal | |
Serial.print(strbuf[0]); | |
// Add LF after a CR | |
if (strbuf[0] == '\r') { | |
Serial.print('\n'); | |
} | |
rcode = Ftdi.SndData(strlen(strbuf), (uint8_t*)strbuf); | |
if (rcode) | |
ErrorMessage<uint8_t>(PSTR("SndData"), rcode); | |
// delay(50); | |
} | |
uint8_t buf[64]; | |
for (uint8_t i=0; i<64; i++) | |
buf[i] = 0; | |
uint16_t rcvd = 64; | |
rcode = Ftdi.RcvData(&rcvd, buf); | |
if (rcode && rcode != hrNAK) | |
ErrorMessage<uint8_t>(PSTR("Ret"), rcode); | |
// The device reserves the first two bytes of data | |
// to contain the current values of the modem and line status registers. | |
if (rcvd > 2) | |
{ | |
// Print buffer at once | |
// Serial.print((char*)(buf+2)); | |
// Print buffer characters individually | |
for (uint8_t i = 2; i < rcvd; i++) | |
{ | |
Serial.print((char)buf[i]); | |
// Check for newline | |
if (buf[i] == '\n') { | |
// Add return | |
Serial.print('\r'); | |
} | |
} | |
} | |
// delay(10); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment