d
Dependencies: TS_DISCO_F746NG LCD_DISCO_F746NG BSP_DISCO_F746NG BD_SD_DISCO_F746NG
Revision 0:2e2716e8edb3, committed 2020-04-28
- Comitter:
- Photonium
- Date:
- Tue Apr 28 12:10:04 2020 +0000
- Commit message:
- d
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/BD_SD_DISCO_F746NG.lib Tue Apr 28 12:10:04 2020 +0000 @@ -0,0 +1,1 @@ +https://os.mbed.com/users/Photonium/code/BD_SD_DISCO_F746NG/#77f8ecef87fd
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/BSP_DISCO_F746NG.lib Tue Apr 28 12:10:04 2020 +0000 @@ -0,0 +1,1 @@ +https://developer.mbed.org/teams/ST/code/BSP_DISCO_F746NG/#df2ea349c37a
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/LCD_DISCO_F746NG.lib Tue Apr 28 12:10:04 2020 +0000 @@ -0,0 +1,1 @@ +https://developer.mbed.org/teams/ST/code/LCD_DISCO_F746NG/#d44525b1de98
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TS_DISCO_F746NG.lib Tue Apr 28 12:10:04 2020 +0000 @@ -0,0 +1,1 @@ +https://developer.mbed.org/teams/ST/code/TS_DISCO_F746NG/#fe0cf5e2960f
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Tue Apr 28 12:10:04 2020 +0000 @@ -0,0 +1,640 @@ +#include "mbed.h" +#include "FATFileSystem.h" +#include "SDBlockDeviceDISCOF746NG.h" +#include <stdio.h> +#include <errno.h> +#include "TS_DISCO_F746NG.h" +#include "LCD_DISCO_F746NG.h" +#include <string> +#include <fstream> //library für file streams +//#include <iostream> //für input/output von streams +LCD_DISCO_F746NG lcd; +TS_DISCO_F746NG ts; +TS_StateTypeDef TS_State; +I2C i2c(I2C_SDA, I2C_SCL ); +SDBlockDeviceDISCOF746NG bd; +FATFileSystem fs ("fs"); +uint32_t linecheck(uint8_t Channel); //Function to Check a wire connection +uint8_t channel; +uint8_t g=0,lc=0,gmax=0; +uint8_t channel_max =32; +char channel_result[32]; //Array for test-result +string Result = "NOK"; +uint8_t mode=0,quad=0,cp=0,bc=0; //Modus of program (1:1==1, Load from SDCard==2, Learn==3) +uint8_t escrep=0;//escape=1 or repeat=2 same mode? +uint8_t trippelchoose (uint8_t mode); +uint8_t quadchoose (uint8_t quad); +uint8_t readCabletext(); +uint16_t x, y,temp_count; +uint32_t rv,cv; //32Bitvariable rv=resultvector cv=channelvector +uint8_t idx; +uint8_t prev_nb_touches = 0; +uint8_t cleared = 0; +string ws,sz,ls; +//################# +struct Cable { + string internal_name; // Kabelname und Bezeichnung ggf. interne Nummer + string navision_number; + char wiring_in[32]; + char wiring_out[32]; +} CableIndex [127]; + + +void +return_error (int ret_val) +{ + if(ret_val) + printf ("Failure. %d\r\n", ret_val); + else + printf ("done.\r\n"); +} + +void +errno_error (void* ret_val) +{ + if(ret_val == NULL) + printf (" Failure. %d \r\n", errno); + else + printf (" done.\r\n"); +} + +int main() +{ + + Serial pc (SERIAL_TX, SERIAL_RX); + pc.baud(115200); +//################ INIT I2C devices +const int I2C_ChOut = 0x20<<1; // I2C address for input devices + char cmd [2]; //Variable for commandstring (send / read )input + + for(int i=0;i<4;i++) { //set all I2C output to LOW + cmd[0] = 0x03;//configuration-register I2C device + cmd[1] = 0x00;//sets this device for output + i2c.write(I2C_ChOut+2*i, cmd, 2);//send 2 configbyte to I2C device + cmd[0] = 0x01;// I2C device for output + cmd[1] = 0x00;//bitpattern == 8bit LOW + i2c.write(I2C_ChOut+2*i, cmd, 2);//Send bitpattern for output + } + +//################ Init Touchsreen and LCD + TS_StateTypeDef TS_State; + char text[30]; + uint8_t status; + uint8_t idx; + //uint32_t PURPLE=0xffC800C8; //Colorcode + uint32_t DBLUE=0xff000064; //Colorcode + uint8_t channel_idx; + //uint8_t escrep;//escape=1 or repeat=2 same mode? + + lcd.SetFont(&Font20); + status = ts.Init(lcd.GetXSize(), lcd.GetYSize()); + if (status != TS_OK) { + lcd.Clear(LCD_COLOR_RED); + lcd.SetBackColor(LCD_COLOR_RED); + lcd.SetTextColor(LCD_COLOR_WHITE); + lcd.DisplayStringAt(0, LINE(5), (uint8_t *)"TOUCHSCREEN INIT FAIL", CENTER_MODE); + } else { + lcd.Clear(LCD_COLOR_GREEN); + lcd.SetBackColor(LCD_COLOR_GREEN); + lcd.SetTextColor(LCD_COLOR_WHITE); + lcd.DisplayStringAt(0, LINE(5), (uint8_t *)"TOUCHSCREEN INIT OK", CENTER_MODE); + } + lcd.Clear(DBLUE); + lcd.SetBackColor(DBLUE); + lcd.SetTextColor(LCD_COLOR_WHITE); + lcd.SetFont(&Font24); + sprintf((char*)text, "Advanced Cable Tester"); + lcd.DisplayStringAt(0, LINE(2), (uint8_t *)&text, CENTER_MODE); + lcd.SetBackColor(DBLUE); + lcd.SetTextColor(LCD_COLOR_WHITE); + lcd.SetFont(&Font20); + lcd.DisplayStringAt(0, LINE(5), (uint8_t *)"Reading cabledata from sd-card...", CENTER_MODE); + + printf("Start\n"); + int error = 0; + return_error(error); + + printf("Mounting the filesystem on \"/fs\". "); + error = fs.mount(&bd); + return_error(error); + gmax=readCabletext(); + sprintf((char*)text, "Read %d cables from file", gmax); + lcd.DisplayStringAt(0, LINE(6), (uint8_t *)&text, CENTER_MODE); + printf("Read %d cables from file \r\n", gmax); // + wait(2); + do { + mode=0; + + lcd.Clear(DBLUE); + lcd.SetBackColor(DBLUE); + lcd.SetTextColor(LCD_COLOR_WHITE); + lcd.SetFont(&Font24); + sprintf((char*)text, "Advanced Cable Tester"); + lcd.DisplayStringAt(0, LINE(2), (uint8_t *)&text, CENTER_MODE); + sprintf((char*)text, "choose Mode"); + lcd.DisplayStringAt(0, LINE(3), (uint8_t *)&text, CENTER_MODE); + lcd.SetFont(&Font16); + // lcd.DisplayStringAt(0, LINE(10), (uint8_t *)"IPG", CENTER_MODE); + + while(mode==0) { + + mode=trippelchoose (mode); + //printf("Modus=%d \r\n",mode); + } + switch(mode) { + case 1: { + // Check of 1:1 Cable here (32 Positions) + lcd.DisplayStringAt(20, LINE(1), (uint8_t *)&text, LEFT_MODE); + lcd.Clear(DBLUE); + lcd.SetBackColor(DBLUE); + lcd.SetFont(&Font16); + lcd.SetTextColor(LCD_COLOR_WHITE); + sprintf((char*)text, "+++++++++ 1:1 Test running +++++++++"); + lcd.DisplayStringAt(0, LINE(0), (uint8_t *)&text, CENTER_MODE); + lcd.SetTextColor(LCD_COLOR_RED); + lcd.FillRect(200, 15, 50, 250); + //lcd.Clear(LCD_COLOR_BLUE); + lcd.SetBackColor(LCD_COLOR_RED); + lcd.SetTextColor(LCD_COLOR_WHITE); + lcd.SetFont(&Font24); + sprintf((char*)text, "E"); + lcd.DisplayStringAt(216, LINE(3), (uint8_t *)&text, LEFT_MODE); + sprintf((char*)text, "S"); + lcd.DisplayStringAt(216, LINE(4), (uint8_t *)&text, LEFT_MODE); + sprintf((char*)text, "C"); + lcd.DisplayStringAt(216, LINE(5), (uint8_t *)&text, LEFT_MODE); + sprintf((char*)text, "A"); + lcd.DisplayStringAt(216, LINE(6), (uint8_t *)&text, LEFT_MODE); + sprintf((char*)text, "P"); + lcd.DisplayStringAt(216, LINE(7), (uint8_t *)&text, LEFT_MODE); + sprintf((char*)text, "E"); + lcd.DisplayStringAt(216, LINE(8), (uint8_t *)&text, LEFT_MODE); + lcd.SetFont(&Font16); + lcd.SetBackColor(DBLUE); + while(mode==1) { + for (channel_idx = 0 ; channel_idx < channel_max/2; channel_idx++) { + rv=linecheck(channel_idx); //Line check (#) + cv=1<<channel_idx; + printf ("Index%d CV:%d RV:%d \r\n",channel_idx,cv,rv); + if (channel_idx <16) { + if(rv==cv) { + lcd.SetTextColor(LCD_COLOR_GREEN); + Result = "Okay"; + } else { + lcd.SetTextColor(LCD_COLOR_RED); + Result = "Error"; + } + sprintf(text,"Line(%d)=%s",channel_idx+1," "); + lcd.DisplayStringAt(35, LINE(channel_idx+1), (uint8_t *)&text, LEFT_MODE); + wait(.005); + sprintf(text,"Line(%d)=%s",channel_idx+1,Result.c_str()); + lcd.DisplayStringAt(35, LINE(channel_idx+1), (uint8_t *)&text, LEFT_MODE); + } + rv=linecheck(channel_idx+16); //Line check (#) + cv=1<<channel_idx+16; + if (channel_idx+16 >15) { + if(rv==cv) { + lcd.SetTextColor(LCD_COLOR_GREEN); + Result = "Okay"; + } else { + lcd.SetTextColor(LCD_COLOR_RED); + Result = "Error"; + } + sprintf((char*)text,"Line(%d)=%s",channel_idx+16+1," "); + lcd.DisplayStringAt(260, LINE(channel_idx+16-16+1), (uint8_t *)&text, LEFT_MODE); + wait(.005); + sprintf((char*)text,"Line(%d)=%s",channel_idx+16+1,Result.c_str()); + lcd.DisplayStringAt(260, LINE(channel_idx+16-16+1), (uint8_t *)&text, LEFT_MODE); + } + ts.ResetTouchData(&TS_State); + ts.GetState(&TS_State); + if (TS_State.touchDetected) { + x = TS_State.touchX[idx]; + y = TS_State.touchY[idx]; + if (y>15 and y<275) { + if (x>200 and x<250) { + printf("Stop running 1:1 checking"); + mode=0; + break; + } + } + } + } + wait (.1); + } + } + case 2: { + while(mode==2) { + lcd.Clear(DBLUE); + lcd.SetBackColor(DBLUE); + lcd.SetFont(&Font16); + lcd.SetTextColor(LCD_COLOR_WHITE); + sprintf((char*)text, "++++++++++++ Choose Cable ++++++++++++"); + lcd.DisplayStringAt(0, LINE(0), (uint8_t *)&text, CENTER_MODE); + //printf("gmax= %d, g= %d CP=%d \r\n",gmax,g,g+10*bc); + cp=1; //Cablepointer inside this codeblock (--> point actuell index onto cabledata ) + bc=0; //blockcounter (usage for second decimal value 10th) + for (g=0; g<10; g++) { + //.substr(0, myString.size()-2); + //sprintf((char*)text,"(%d) %s\n",g+1,CableIndex[g].internal_name.c_str()); + sprintf((char*)text,"(%d) %s", g+1,CableIndex[g].internal_name.substr(0, CableIndex[g].internal_name.size()-1).c_str()); + lcd.DisplayStringAt(25, LINE(g+1), (uint8_t *)&text, LEFT_MODE); + lcd.SetTextColor(LCD_COLOR_GREEN); + lcd.DisplayStringAt(5, LINE(cp), (uint8_t *)"=>", LEFT_MODE); + lcd.SetTextColor(LCD_COLOR_WHITE); + } + do { + quad=quadchoose (quad); + //printf("Quad=%c ",quad); + if (quad=='>') { + for(int n=1; n<11; n++) { + lcd.DisplayStringAt(5, LINE(n), (uint8_t *)" ", LEFT_MODE); + } //Clear of old ">" indicator + cp++; + if (cp==11) { + if (gmax > cp+10*bc) { + bc++; + cp=1; + } else { + cp=10; + } + lcd.Clear(DBLUE); + lcd.SetBackColor(DBLUE); + sprintf((char*)text, "++++++++++++ Choose Cable ++++++++++++"); + lcd.DisplayStringAt(0, LINE(0), (uint8_t *)&text, CENTER_MODE); + for (g=0; g<10; g++) { + //sprintf((char*)text,"(%d) %s",(bc*10+g+1),CableIndex[(bc*10)+g].internal_name.c_str()); + sprintf((char*)text,"(%d) %s", (bc*10+g+1),CableIndex[(bc*10)+g].internal_name.substr(0, CableIndex[(bc*10)+g].internal_name.size()-1).c_str()); + lcd.DisplayStringAt(25, LINE(g+1), (uint8_t *)&text, LEFT_MODE); + printf("(%d) %s",(bc*10+g+1),CableIndex[(bc*10)+g].internal_name.c_str()); + } + } + lcd.SetTextColor(LCD_COLOR_GREEN); + lcd.DisplayStringAt(5, LINE(cp), (uint8_t *)"=>", LEFT_MODE); + lcd.SetTextColor(LCD_COLOR_WHITE); + } + if (quad=='<') { + for(int n=1; n<11; n++) { + + lcd.DisplayStringAt(5, LINE(n), (uint8_t *)" ", LEFT_MODE); + } //Clear of old ">" indicator + cp--; + printf("cp=%d\r\n",cp); + if (cp==0) { + if(bc>0) { + bc--; + cp=10; + } else { + cp=1; + } + lcd.Clear(DBLUE); + lcd.SetBackColor(DBLUE); + sprintf((char*)text, "++++++++++++ Choose Cable ++++++++++++"); + lcd.DisplayStringAt(0, LINE(0), (uint8_t *)&text, CENTER_MODE); + for (g=0; g<10; g++) { + printf("g=%d, bc=%d \r\n",g,bc); + //sprintf((char*)text,"(%d) %s",(bc*10+g+1),CableIndex[bc*10+g].internal_name.c_str()); + sprintf((char*)text,"(%d) %s", (bc*10+g+1),CableIndex[(bc*10)+g].internal_name.substr(0, CableIndex[(bc*10)+g].internal_name.size()-1).c_str()); + lcd.DisplayStringAt(25, LINE(g+1), (uint8_t *)&text, LEFT_MODE); + } + } + lcd.SetFont(&Font16); + lcd.SetTextColor(LCD_COLOR_GREEN); + lcd.DisplayStringAt(5, LINE(cp), (uint8_t *)"=>", LEFT_MODE); + lcd.SetTextColor(LCD_COLOR_WHITE); + } + + + if (quad==13) { + printf("ENTER DETECTED"); + mode=0; + + //Testfunktion aufrufen + //break; + } + if (quad==27) { + printf("Escape DETECTED"); + mode=0; + break; + } + + printf("CableIndex=%d \r\n",cp+10*bc); + printf("---->Quad=%d \r\n",quad); + + wait(.1); + } while ((quad!=0x13)or(quad!=0x1b)); + } + + break; + //escrep=1; + } + default : + printf("Switch/Case default code here"); + break; + } + + + /*wait(1); + lcd.SetFont(&Font20); + lcd.SetBackColor(DBLUE); + lcd.SetTextColor(LCD_COLOR_WHITE); + sprintf((char*)text,"ENDE ? Advanced Cable Tester" ); + lcd.DisplayStringAt(0, LINE(0), (uint8_t *)&text, LEFT_MODE); + while(1) { + lcd.SetFont(&Font24); + sprintf((char*)text, "Advanced Cable Tester"); + lcd.DisplayStringAt(60, LINE(4), (uint8_t *)&text, LEFT_MODE); + sprintf((char*)text, "(Touch to start test)"); + lcd.DisplayStringAt(60, LINE(6), (uint8_t *)&text, LEFT_MODE); + lcd.SetFont(&Font16); + ts.GetState(&TS_State); + if (TS_State.touchDetected) { + // Clear lines corresponding to old touches coordinates + if (TS_State.touchDetected < prev_nb_touches) { + for (idx = (TS_State.touchDetected + 1); idx <= 5; idx++) { + lcd.ClearStringLine(idx); + } + } + prev_nb_touches = TS_State.touchDetected; + cleared = 0; + lcd.SetBackColor(DBLUE); + lcd.SetTextColor(LCD_COLOR_WHITE); + wait(1); + x = TS_State.touchX[idx]; + y = TS_State.touchY[idx]; + } else { + if (!cleared) { + lcd.Clear(DBLUE); + //sprintf((char*)text, "Touches: 0"); + //lcd.DisplayStringAt(0, LINE(0), (uint8_t *)&text, LEFT_MODE); + cleared = 1; + } + } + } + */ + } while (1); +} + +uint32_t linecheck(uint8_t channel) +{ + //#################################################################### + //Strategy: set only ONE bit ON of 32 channels and read all 32channel input + //Save result in Array + //then repeat that for next bit + const int I2C_ChOut = 0x20<<1; // I2C address for input devices + const int I2C_ChIn = 0x24<<1; // I2C address for output devices + char channel_set [8] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; + char cmd [2]; //Variable for commandstring (send / read )input + + char channel_result[4]; //Array for test-result + uint8_t ChOffset=0; + //uint8_t text[30]; + uint8_t channel_idx; + //uint8_t channel_result=0; + + channel_idx = channel;//-1; + //wait (.005); + ChOffset = abs(channel_idx/8); + cmd[0] = 0x03;//configuration-register I2C device + cmd[1] = 0x00;//sets this device for output + i2c.write(I2C_ChOut+2*ChOffset, cmd, 2);//send 2 configbyte to I2C device + cmd[0] = 0x01;// I2C device for output + //cmd[1] = 0xFF & (channel_set[channel_idx%8]); //set bit for channel + cmd[1] = channel_set[channel_idx%8];//bitpattern + i2c.write(I2C_ChOut+2*ChOffset, cmd, 2);//Send bitpattern for output + //wait(0.001);// on for 5ms !!!!!!!!!!! modified + /////cmd[0] = 0x03;//configurationregister I2C device + /////cmd[1] = 0xFF;//set this 8Bit device for Input + /////i2c.write(I2C_ChIn, cmd, 2);//send 2 configbyte to I2C device + cmd[0] = 0x00; + i2c.write(I2C_ChIn+0, cmd, 1); + i2c.read(I2C_ChIn+0, cmd, 1); + channel_result[0]=cmd[0]; + //printf ("R=%d ch=%d \r\n", cmd[0],channel_idx); + cmd[0] = 0x00; + i2c.write(I2C_ChIn+2, cmd, 1); + i2c.read(I2C_ChIn+2, cmd, 1); + channel_result[1]=cmd[0]; + //printf ("R=%d ch=%d \r\n", cmd[0],channel_idx); + cmd[0] = 0x00; + i2c.write(I2C_ChIn+4, cmd, 1); + i2c.read(I2C_ChIn+4, cmd, 1); + channel_result[2]=cmd[0]; + //printf ("R=%d ch=%d \r\n", cmd[0],channel_idx); + cmd[0] = 0x00; + i2c.write(I2C_ChIn+6, cmd, 1); + i2c.read(I2C_ChIn+6, cmd, 1); + channel_result[3]=cmd[0]; + printf ("Ch:%d R%d %d %d %d \r\n",channel_idx,channel_result[0],channel_result[1],channel_result[2],channel_result[3]); + /////////------ read + /*cmd[0] = 0x03;//configurationregister I2C device + cmd[1] = 0xFF;//sets 8bit of this device for intput + i2c.write(I2C_ChIn+2*0, cmd, 2);//send config I2C device for output + cmd[0]= 0x0; + i2c.write(I2C_ChIn+2*0, cmd, 1);// prepare to read + i2c.read(I2C_ChIn+2*0, cmd, 1); + printf ("R=%d ch=%d \r\n", cmd[0],channel_idx);*/ + //channel_result=cmd[0]; + //////// + + cmd[0] = 0x03; + cmd[1] = 0x00;//config to out + i2c.write(I2C_ChOut+2*ChOffset, cmd, 2); + cmd[0] = 0x01; + cmd[1] = 0x00; //bitpattern + i2c.write(I2C_ChOut+2*ChOffset, cmd, 2); + //wait (.001); + rv=256*256*256*channel_result[3]+256*256*channel_result[2]+256*channel_result[1]+channel_result[0]; + printf ("RV: %d \r\n",rv); + return rv; // 32Bit in 4 Byte +} + +uint8_t trippelchoose (uint8_t mode) +{ + + lcd.DrawRect(13, 185, 135, 40); + lcd.DisplayStringAt(25, LINE(12), (uint8_t *)"1:1 Cable", LEFT_MODE); + + lcd.DrawRect(173, 185, 135, 40); + lcd.DisplayStringAt(180, LINE(12), (uint8_t *)"Choose from", LEFT_MODE); + lcd.DisplayStringAt(180, LINE(13), (uint8_t *)" SD-Card", LEFT_MODE); + + lcd.DrawRect(333, 185, 135, 40); + lcd.DisplayStringAt(340, LINE(12), (uint8_t *)"Learn new", LEFT_MODE); + wait(.1); + //printf("#####\r\n"); + ts.ResetTouchData(&TS_State); + ts.GetState(&TS_State); + if (TS_State.touchDetected) { + x = TS_State.touchX[idx]; + y = TS_State.touchY[idx]; + + if (y>185 and y<185+40) { + if (x>13 and x<135+13) { + mode=1; + } + if (x>173 and x<173+135) { + mode=2; + } + if (x>333 and x<333+135) { + mode=3; + } + } + printf("X=%d Y=%d Modus=%d \r\n",TS_State.touchX[idx],y,mode); + //prev_nb_touches = TS_State.touchDetected; + //cleared = 0; + } + + return mode; +} +uint8_t readCabletext() + { + //Read and Parsing of intput file "cable.txt" from SD-Card + printf("Opening file read-only."); +//FILE* fd = fopen("/fs/numbers5.txt", "w"); +//FILE* fd = fopen("/fs/cable.txt", "r"); + + std::ifstream fd("/fs/cable.txt"); //öffnet die Datei als c++ stream. fd = name der variable + std::string line; //variable für die aktuelle Zeile + printf("geoeffnet ?\n"); + while(std::getline(fd, line)) { //solange die zeilen gelesen werden können + printf("%s\n", line.c_str()); //gelesene zeile als c-string ausgeben + //printf("inWhile ?\n"); + } + //Der zweite Teil ist C++ aber mit ein bisschen C an einigen Stellen + FILE* fd2 = fopen("/fs/cable.txt", "r"); //datei zum "lesen als textdatei" öffnen + std::string line2; + printf("geoeffnet ?\r\n"); + int lc=0; + while(!feof(fd2)) { + char buffer[1] = {0}; //buffer für das zu lesende byte + int bytes_read = fread(&buffer, 1, sizeof(char), fd2); // 1 byte (zeichen) lesen + if (*buffer != '\n') { //wenn buffer nicht '\n' (neue zeile) ist + line2 = line2 + &buffer[0]; //string um aktuelles zeichen erweitern + } + if (*buffer == '\n') { //wenn neue zeile gefunden + //printf("(%d) %s\n",lc%4, line2.c_str()); //zeile ausgeben + switch(lc%4) { + case 0:{ + CableIndex[g].internal_name=line2.c_str(); + printf("(g=%d)(lc=%d) Internal-Name= %s\r\n",g,lc, CableIndex[g].internal_name.c_str()); + line2 = ""; //zeile löschen + lc++; + break; + } + case 1:{ + CableIndex[g].navision_number=line2.c_str(); + printf("(g=%d) (lc=%d) Navision-Number= %s\r\n", g,lc,CableIndex[g].navision_number.c_str()); + line2 = ""; //zeile löschen + lc++; + break; + } + case 2:{ + string hs=line2.c_str(); + string::iterator zg; + uint8_t cf=0; + for (zg=hs.begin();zg<hs.end(); zg++) { + if ((*zg>47)&&(*zg<59)) { + CableIndex[g].wiring_in[cf] = (*(zg)-48)*10+(*(zg+1)-48); + zg=zg+2; + cf++; + }//end_if + }// end_for + line2 = ""; //zeile löschen + for (int ci = 0; ci < 32; ci++) //Fertige Zeile einmal ausgeben + { + printf("[%d]", CableIndex[g].wiring_in[ci]); + } //end_for + printf("\r\n"); + line2 = ""; //zeile löschen + lc++; + break; + } + case 3:{ + string hs=line2.c_str(); + string::iterator zg; + uint8_t cf=0; + for (zg=hs.begin();zg<hs.end(); zg++) { + if ((*zg>47)&&(*zg<59)) { + CableIndex[g].wiring_out[cf] = (*(zg)-48)*10+(*(zg+1)-48); + zg=zg+2; + cf++; + }//end_if + }// end_for + line2 = ""; //zeile löschen + for (int ci = 0; ci < 32; ci++) //Fertige Zeile einmal ausgeben + { + printf("(%d)", CableIndex[g].wiring_out[ci]); + } //end_for + printf("\r\n"); + + line2 = ""; //zeile löschen + lc++; + break; + } + + + + + + } + + line2 = ""; //zeile löschen + + if (lc==4) { + lc=0; + g++;} + } + } + fclose(fd2);//datei nach dem lesen schließen + //return 0; + + //fd.close(); //datei nach lesen schließen + //errno_error(fd); + + gmax=g; + return gmax; + + } + +uint8_t quadchoose (uint8_t quad) +{ + quad =0; + lcd.SetFont(&Font24); + lcd.DrawRect(15, 200, 90, 60); + lcd.DisplayStringAt(45, LINE(9), (uint8_t *)"<", LEFT_MODE); + + lcd.DrawRect(135, 200, 90,60); + lcd.DisplayStringAt(155, LINE(9), (uint8_t *)"ESC", LEFT_MODE); + + lcd.DrawRect(255, 200, 90, 60); + lcd.DisplayStringAt(275, LINE(9), (uint8_t *)"ENT", LEFT_MODE); + + lcd.DrawRect(375, 200, 90, 60); + lcd.DisplayStringAt(405, LINE(9), (uint8_t *)">", LEFT_MODE); + + lcd.SetFont(&Font16); + do { + ts.ResetTouchData(&TS_State); + ts.GetState(&TS_State); + if (TS_State.touchDetected) { + x = TS_State.touchX[idx]; + y = TS_State.touchY[idx]; + if (y>200 and y<200+60) { + if (x>15 and x<15+90) { + quad='<';//back + } + if (x>135 and x<135+90) { + quad=0x1b;//escape + } + if (x>255 and x<255+90) { + quad=0x0d;//enter + } + if (x>375 and x<375+90) { + quad='>';//forward + } + } + } + } while (quad==0); + return quad; +} \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed-os.lib Tue Apr 28 12:10:04 2020 +0000 @@ -0,0 +1,1 @@ +https://github.com/ARMmbed/mbed-os/#16bac101a6b7b4724023dcf86ece1548e3a23cbf