#include "hardware/uart.h" #include "tusb.h" String serial_in; String serial1_in; void USBbegin(void) { Serial.begin(115200); //while (!tud_cdc_connected()) { sleep_ms(100); } //printf("start\n"); } boolean USBavailable(void) { if (Serial.available()<=0) return false; else return true; } boolean USBavailable_2(void) { if (tud_cdc_available()) { return true; } else return false; } String USBreadStringUntil(char c) { return Serial.readStringUntil(char(13)); } String USBreadStringUntil_2(char c) { uint32_t count; byte buf[1]; String s; unsigned long long t=millis(); while(1) { count = tud_cdc_read(buf, 1); if (buf[0]==byte(c)) return s; if (count==1) { s+=char(buf[0]); t=millis(); } if ((millis()-t)>10000) return "USB timeout"; } return ""; } void Serials_init(void) { USBbegin(); Serial1.begin(2400,SERIAL_7E1); Serial1.setTX(TX1); Serial1.setRX(RX1); //uart_init(uart0,UART_RATE); //gpio_set_function(TX1, GPIO_FUNC_UART); //gpio_set_function(RX1, GPIO_FUNC_UART); } int serial_data_get(void) { char pp; int i=0; if (Serial.available()<=0) return 0; serial_in=""; while (i<200) { if (Serial.available()>0) { i++; pp=Serial.read(); if ((pp==10) || (i>150)) { return 1; //Serial.println(serial_in); } serial_in+=pp; //Serial.println(serial_in); } else { delay(100); if (!Serial.available()) {Serial.println("timeout serial 0");return 0;} } } return 0; } int serial_data_get_new(void) { if (!USBavailable()) return 0; serial_in=USBreadStringUntil(char(10)); //13 return 1; } int serial1_data_get(void) { char pp; int i=0; if (Serial1.available()<=0) return 0; serial1_in=""; while (i<200) { if (Serial1.available()>0) { i++; pp=Serial1.read(); //Serial.print(i);Serial.print(' ');Serial.print(long(pp));Serial.print(' ');Serial.println(pp); if ((pp==10) || (i>150)) { //Serial.println(serial3_in); return 1; } serial1_in+=pp; } else { delay(100); if (!Serial1.available()) { //error_send("timeout serial 1"); return 0;} } } return 0; } int serial1_data_get_new(void) { int n,i; int read=1; if (!uart_is_readable(uart0)) return 0; n=0; while(read) { if (uart_is_readable_within_us(uart0,10000)) { serial1_in[n]=uart_getc(uart0); if (serial1_in[n]==10) read=0; n++; if (n==32) read=0; } else { read=0; } } return n; } int interpret(String input) { int space_pos=input.indexOf(' '); String data_inst; String dd; int j=0; int done=0; if (space_pos<0) space_pos=input.length(); data_inst=input.substring(0,space_pos); dd=input.substring(space_pos+1,input.length()); while(!done) { if (data_inst.equals(int_names[j].Sname)) { done=1; lastp.param=int_names[j].param; } j++; if (j>INSTNUM) { if (manual) { Serial.println("Illegal intruction"); Serial.println(input); } done=1; return -1; } } lastp.paramdata=dd.toDouble(); return 1; } int do_serials(void) { int i=0; if (serial_data_get()) { if (serial_in.equals("HELP")) {for (i=0;i