#include "LittleFS.h" // LittleFS is declared #include Adafruit_USBD_CDC USBSer1; Adafruit_USBD_CDC USBSer2; Adafruit_USBD_CDC USBSer3; // Serial Port Support // Serial1 (0,1) SerialPIO (2,3 4,5 6,7) Serial2 (8,9) SerialPIO (10,11) //SerialPIO ser3(2,3); //SerialPIO ser4(4,5); //SerialPIO ser5(6,7); //SerialPIO ser6(10,11); extern "C" void BPQLoop(); extern "C" void BPQInit(); File cfg; char line2[] = "NODECALL=GE8BPQ-2\r\n"; char line3[] = "PORT\r\n"; char line4[] = "TYPE=INTERNAL\r\n"; char line5[] = "ENDPORT\r\n"; char line6[] = "PORT\r\n"; char line7[] = "TYPE=ASYNC\r\n"; char line8[] = "ID=KISS USBSer2\r\n"; char line9[] = "COMPORT=USBSer2\r\n"; char line10[] = "SPEED=115200\r\n"; char line11[] = "QUALITY=192\r\n"; char line12[] = "ENDPORT\r\n"; Adafruit_USBD_CDC * CONSOLE; Adafruit_USBD_CDC * CONTERM[4]; Adafruit_USBD_CDC * DEBUG; Adafruit_USBD_CDC * U1 = &USBSer1; Adafruit_USBD_CDC * U2 = &USBSer2; void setup() { // put your setup code here, to run once: LittleFS.begin(); delay(2000); Serial.begin(115200); if ( CFG_TUD_CDC < 2 ) { while(1) { Serial.printf("CFG_TUD_CDC must be at least 2, current value is %u\n", CFG_TUD_CDC); Serial.println(" Config file is located in Adafruit_TinyUSB_Arduino/src/arduino/ports/{platform}/tusb_config_{platform}.h"); Serial.println(" where platform is one of: nrf, rp2040, samd"); delay(5000); } } USBSer1.begin(115200); USBSer2.begin(115200); USBSer3.begin(115200); //ser3.begin(115200); //ser4.begin(115200); //ser5.begin(115200); //ser6.begin(115200); CONSOLE = &Serial; DEBUG = &Serial; CONTERM[0] = &Serial; CONTERM[1] = &USBSer1; CONTERM[2] = &USBSer2; CONSOLE->println("Starting"); /* cfg = LittleFS.open("bpq32.cfg", "w"); if (!cfg) { CONSOLE->println("file create failed"); } cfg.write("SIMPLE\r\n", 8); cfg.write(line2, strlen(line2)); cfg.write(line3, strlen(line3)); cfg.write(line4, strlen(line4)); cfg.write(line5, strlen(line5)); cfg.write(line6, strlen(line6)); cfg.write(line7, strlen(line7)); cfg.write(line8, strlen(line8)); cfg.write(line9, strlen(line9)); cfg.write(line10, strlen(line10)); cfg.write(line11, strlen(line11)); cfg.write(line12, strlen(line12)); cfg.close(); CONSOLE->println("cfg created"); */ delay(3000); BPQInit(); CONSOLE->println("Init Complete"); } void loop() { delay(100); BPQLoop(); } extern "C" void OutputDebugString(char * Mess) { CONSOLE->print(Mess); } extern "C" int WritetoConsoleLocal(char * buff) { return CONSOLE->printf("%s", buff); } extern "C" void Debugprintf(const char * format, ...) { char Mess[10000]; va_list(arglist); va_start(arglist, format); vsprintf(Mess, format, arglist); strcat(Mess, "\r\n"); OutputDebugString(Mess); return; } extern "C" void Contermprintf(int n, const char * format, ...) { char Mess[1000]; va_list(arglist); va_start(arglist, format); vsprintf(Mess, format, arglist); CONTERM[n]->print(Mess); return; } extern "C" uint64_t GetTickCount() { return millis(); } extern "C" void Sleep(int mS) { delay(mS); } char * xxConfig; int n; char * rest; extern "C" char * strlop(char * buf, char delim); extern "C" int cfgOpen(char * FN, char * Mode) { CONSOLE->printf("Open cfg %s\r\n", FN); cfg = LittleFS.open(FN, Mode); if (!cfg) { CONSOLE->println("file open failed"); return 0; } xxConfig = (char *)malloc(8192); int n = cfg.read((unsigned char *)xxConfig, 8190); xxConfig[n] = 0; rest = xxConfig; cfg.close(); return 1; } extern "C" int cfgClose() { free(xxConfig); return 0; } extern "C" int cfgRead(unsigned char * Buffer, int Len) { // return a line at a time if (rest == 0 || rest[0] == 0) return 0; char * p = strlop(rest, '\r'); strcpy((char *)Buffer, rest); int n = strlen(p); rest = p; if (rest && rest[0] == '\n') rest++; return n; } extern "C" int ConTermKbhit(int n) { return CONTERM[n]->read(); } extern "C" int getFreeHeap() { return rp2040.getFreeHeap(); } // Serial Port Support // Serial1 (0,1) SerialPIO (2,3 4,5 6,7) Serial2 (8,9) SerialPIO (10,11) #define maxHandles 8 HardwareSerial * Handles[maxHandles] = {0}; Adafruit_USBD_CDC * USBHandles[maxHandles] = {0}; int isUSB[maxHandles] = {0}; extern "C" int picoOpenSerial(char * Name, int speed) { // Find a free handle int i; for (i = 0; i < maxHandles; i++) { if (Handles[i] == 0) break; } if (i == 8) { DEBUG->println("No Serial Handles free"); return 0; } if (strcmp(Name, "Serial1") == 0) Handles[i] = &Serial1; else if (strcmp(Name, "Serial2") == 0) Handles[i] = &Serial2; else if (strcmp(Name, "USBSer2") == 0) { USBHandles[i] = &USBSer2; isUSB[i] = 1; } else { DEBUG->printf("Unknown port name %s\n", Name); return 0; } if (isUSB[i]) USBHandles[i]->begin(speed); else Handles[i]->begin(speed); return i + 1; } extern "C" int picoCloseSerial(int Chan) { return 0; } extern "C" int picoWriteSerial(int Chan, char * Buffer, int Len) { Chan--; if (isUSB[Chan]) return USBHandles[Chan]->write(Buffer,Len); return Handles[Chan]->write(Buffer,Len); } extern "C" int picoReadSerial(int Chan, char * Buffer, int Len) { int ptr = 0; int ret; Chan--; if (isUSB[Chan]) { while (USBHandles[Chan]->available() && ptr < Len) { ret = USBHandles[Chan]->read(); if (ret == -1) break; Buffer[ptr++] = ret; } } else { while (Handles[Chan]->available() && ptr < Len) { ret = Handles[Chan]->read(); if (ret == -1) break; Buffer[ptr++] = ret; } } return ptr; } extern "C" int DoRoutes(); extern "C" int DoNodes(); extern "C" int SaveNodes () { cfg = LittleFS.open("BPQNODES.dat", "w"); if (!cfg) { CONSOLE->println("BPQNODES create failed"); return 0; } DoRoutes(); DoNodes(); cfg.close(); return (0); } extern "C" void writeNodesLine(char * line) { cfg.write(line, strlen(line)); } File root; File file; extern "C" void OpenDirectory() { root = LittleFS.open("/", "r"); file = root.openNextFile(); } extern "C" void GetNextDirEntry(char * line) { if (file) { if (file.isDirectory()) sprintf(line, " DIR : %s", file.name()); else sprintf(line, (" FILE: %s\tSIZE: %d"), file.name(), file.size()); file = root.openNextFile(); return; } line[0] = 0; file.close(); root.close(); return; } extern "C" int picoOpenFile(char * FN) { file = LittleFS.open(FN, "r"); if (file) return 1; return 0; } extern "C" void GetNextFileBlock(char * line) { int n = file.read((unsigned char *)line, 128); line[n] = 0; if (n == 0) file.close(); }