mirror of
				https://github.com/Oleg-Stepanenko-owo/IEBUS
				synced 2025-10-29 09:27:32 +00:00 
			
		
		
		
	BF-infinitely loop; added new action
This commit is contained in:
		
							parent
							
								
									50d76d478e
								
							
						
					
					
						commit
						67457e86ea
					
				| @ -1,5 +1,6 @@ | |||||||
| #include "AVCLanDrv.h" | #include "AVCLanDrv.h" | ||||||
| #include "AVCLanHonda.h" | #include "AVCLanHonda.h" | ||||||
|  | #include "AVCLan_BT.h" | ||||||
| 
 | 
 | ||||||
| //--------------------------------------------------------------------------------
 | //--------------------------------------------------------------------------------
 | ||||||
| void AVCLanDrv::begin () | void AVCLanDrv::begin () | ||||||
| @ -503,41 +504,36 @@ bool AVCLanDrv::isAvcBusFree (void) | |||||||
| void AVCLanDrv::printMessage(bool incoming) | void AVCLanDrv::printMessage(bool incoming) | ||||||
| //--------------------------------------------------------------------------------
 | //--------------------------------------------------------------------------------
 | ||||||
| { | { | ||||||
|   /*   if (!bSDLog.bRedyToLog) return;
 |   if (!avclanBT.isLogging()) return; | ||||||
| 
 | 
 | ||||||
|     char sss[15] = {0}; |   if (incoming) | ||||||
|     sprintf(sss, "[%u]", millis()); |   { | ||||||
|     bSDLog.print(sss); |     avclanBT.print("< "); | ||||||
|  |   } else { | ||||||
|  |     avclanBT.print("> "); | ||||||
|  |   } | ||||||
|  |   if (broadcast == AVC_MSG_BROADCAST) { | ||||||
|  |     avclanBT.print("b "); | ||||||
|  |   } else { | ||||||
|  |     avclanBT.print("d "); | ||||||
|  |   } | ||||||
|  |   avclanBT.printHex4(masterAddress >> 8); | ||||||
|  |   avclanBT.printHex8(masterAddress); | ||||||
|  |   avclanBT.print(" "); | ||||||
| 
 | 
 | ||||||
|     if (incoming) { |   avclanBT.printHex4(slaveAddress >> 8); | ||||||
|       bSDLog.print('<'); |   avclanBT.printHex8(slaveAddress); | ||||||
|     } else { |   avclanBT.print(" "); | ||||||
|       bSDLog.print('>'); |   avclanBT.printHex8(dataSize); | ||||||
|     } |  | ||||||
|     if (broadcast == AVC_MSG_BROADCAST) { |  | ||||||
|       bSDLog.print("b "); |  | ||||||
|     } else { |  | ||||||
|       bSDLog.print("d "); |  | ||||||
|     } |  | ||||||
| 
 | 
 | ||||||
|     bSDLog.printHex4((uint8_t)(masterAddress >> 8)); |   for (byte i = 0; i < dataSize; i++) { | ||||||
|     bSDLog.printHex8((uint8_t)(masterAddress)); |     avclanBT.printHex8(message[i]); | ||||||
|     bSDLog.print(' '); |   } | ||||||
|  |   avclanBT.println(); | ||||||
| 
 | 
 | ||||||
|     bSDLog.printHex4(uint8_t(slaveAddress >> 8)); |  | ||||||
|     bSDLog.printHex8((uint8_t) slaveAddress); |  | ||||||
|     bSDLog.print(' '); |  | ||||||
| 
 |  | ||||||
|     bSDLog.printHex8((uint8_t) dataSize); |  | ||||||
|     bSDLog.print(' '); |  | ||||||
| 
 |  | ||||||
|     for (byte i = 0; i < dataSize; i++) { |  | ||||||
|       bSDLog.printHex8((uint8_t)message[i]); |  | ||||||
|     } |  | ||||||
|     bSDLog.println(); */ |  | ||||||
|   // bSDLog._update();
 |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
| // Use the last received message to determine the corresponding action ID
 | // Use the last received message to determine the corresponding action ID
 | ||||||
| //--------------------------------------------------------------------------------
 | //--------------------------------------------------------------------------------
 | ||||||
| byte AVCLanDrv::getActionID(const AvcInCmdTable messageTable[], byte mtSize) | byte AVCLanDrv::getActionID(const AvcInCmdTable messageTable[], byte mtSize) | ||||||
| @ -548,7 +544,7 @@ byte AVCLanDrv::getActionID(const AvcInCmdTable messageTable[], byte mtSize) | |||||||
|     return ACT_NONE; |     return ACT_NONE; | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   byte idx = ((dataSize == 8) ? 0 : (dataSize == 9 ? 4 : 7)); // position in AvcInMessageTable
 |   byte idx = ((dataSize == 8) ? 0 : (dataSize == 9 ? 6 : 9)); // position in AvcInMessageTable
 | ||||||
| 
 | 
 | ||||||
|   for (; idx < mtSize; ++idx) { |   for (; idx < mtSize; ++idx) { | ||||||
|     if (dataSize != pgm_read_byte_near(&messageTable[idx].dataSize)) return ACT_NONE; // Because first unsized value from other range
 |     if (dataSize != pgm_read_byte_near(&messageTable[idx].dataSize)) return ACT_NONE; // Because first unsized value from other range
 | ||||||
|  | |||||||
| @ -8,7 +8,7 @@ | |||||||
| 
 | 
 | ||||||
| //--------------------------------------------------------------------------------
 | //--------------------------------------------------------------------------------
 | ||||||
| //const AvcInMessageTable  mtSearchHead[] PROGMEM = {
 | //const AvcInMessageTable  mtSearchHead[] PROGMEM = {
 | ||||||
| //  { ACT_BUTTON_PRESS,   0x08,    0x05, {0x59, 0x0D, 0x31, 0x02, 0x01}, 0x03, {0x21, 0x01, 0xBE}},         // Button press
 | //  { ACT_BUTTON_UP,   0x08,    0x05, {0x59, 0x0D, 0x31, 0x02, 0x01}, 0x03, {0x21, 0x01, 0xBE}},         // Button press
 | ||||||
| //  { ACT_B_DISPOFF,      0x08,    0x05, {0x59, 0x0D, 0x31, 0x02, 0x01}, 0x03, {0x22, 0x71, 0x2F}},
 | //  { ACT_B_DISPOFF,      0x08,    0x05, {0x59, 0x0D, 0x31, 0x02, 0x01}, 0x03, {0x22, 0x71, 0x2F}},
 | ||||||
| //  { ACT_B_DISPFULL,     0x08,    0x05, {0x59, 0x0D, 0x31, 0x02, 0x01}, 0x03, {0x20, 0x01, 0xBD}},
 | //  { ACT_B_DISPFULL,     0x08,    0x05, {0x59, 0x0D, 0x31, 0x02, 0x01}, 0x03, {0x20, 0x01, 0xBD}},
 | ||||||
| //  { ACT_B_DISPHULF,     0x08,    0x05, {0x59, 0x0D, 0x31, 0x02, 0x01}, 0x03, {0x22, 0x11, 0xCF}},
 | //  { ACT_B_DISPHULF,     0x08,    0x05, {0x59, 0x0D, 0x31, 0x02, 0x01}, 0x03, {0x22, 0x11, 0xCF}},
 | ||||||
| @ -23,18 +23,25 @@ | |||||||
| //  // 10 680231020200 05 13000000001D0000DE - vol = 1
 | //  // 10 680231020200 05 13000000001D0000DE - vol = 1
 | ||||||
| //};
 | //};
 | ||||||
| 
 | 
 | ||||||
|  | //TODO: master -> 131
 | ||||||
|  | // 09780D3103024B000009 - next track ?
 | ||||||
|  | // 08590D3102012212D0
 | ||||||
|  | // 08590D3102012213D1
 | ||||||
|  | // 08590D3102012214D2
 | ||||||
|  | 
 | ||||||
| // { action_name,  packed_size, end_off_packege_word(check_sum)  }
 | // { action_name,  packed_size, end_off_packege_word(check_sum)  }
 | ||||||
| const AvcInCmdTable  mtSearchHead[] PROGMEM = { | const AvcInCmdTable  mtSearchHead[] PROGMEM = { | ||||||
|   { ACT_BUTTON_PRESS,   0x08,   0xBE},     // Button press
 |   { ACT_BUTTON_DOWN,       0x08,   0xBC},	    // 08590D3102012000BC
 | ||||||
|   { ACT_B_DISPOFF,      0x08,   0x2F}, |   { ACT_BUTTON_UP,         0x08,   0xBE},     // 08590D3102012101BE
 | ||||||
|   { ACT_B_DISPFULL,     0x08,   0xBD}, |   { ACT_B_DISPOFF,         0x08,   0x2F},     // 08590D31020122712F
 | ||||||
|   { ACT_B_DISPHULF,     0x08,   0xCF}, |   { ACT_B_DISPFULL_DOWN,   0x08,   0x43},     // 08590D310201228543
 | ||||||
|   { ACT_CAM_ON,         0x09,   0x31},    // Cam ON
 |   { ACT_B_DISPFULL_UP,     0x08,   0xBD},     // 08590D3102012001BD
 | ||||||
|   { ACT_CAM_OFF,        0x09,   0x30},    // Cam OFF
 |   { ACT_B_DISPHULF,        0x08,   0xCF},     // 08590D3102012211CF
 | ||||||
|   //        { ACT_DISP_HULF,      0x09,     0x30},    // display hulf color ???
 |   { ACT_CAM_ON,            0x09,   0x31},     // 09590D31020194000031
 | ||||||
|   { ACT_DISP_OFF,       0x09,   0x2E},    // display off
 |   { ACT_CAM_OFF,           0x09,   0x30},     // 09590D31020191020030
 | ||||||
|   { ACT_TEL,            0x0A,   0xE3},	  // start Tel Action
 |   { ACT_DISP_OFF,          0x09,   0x2E},     // 09590D3102019100002E
 | ||||||
|   { ACT_TEL_CANCEL,     0x0A,   0xDC}	  // Cancel or End Call_ACTION
 |   { ACT_TEL,               0x0A,   0xE3},	    // start Tel Action
 | ||||||
|  |   { ACT_TEL_CANCEL,        0x0A,   0xDC}	    // Cancel or End Call_ACTION
 | ||||||
|   //        { ACT_VOL,            0x0A,    0x06, {0x68, 0x02, 0x31, 0x02, 0x02, 0x00}, 0x00, {0x00}}  //0x05 = 1
 |   //        { ACT_VOL,            0x0A,    0x06, {0x68, 0x02, 0x31, 0x02, 0x02, 0x00}, 0x00, {0x00}}  //0x05 = 1
 | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| @ -95,7 +102,7 @@ void AVCLanHonda::processAction( AvcActionID ActionID ) | |||||||
|   if ( bFirstStart_20 && (20000 < millis()) ) bFirstStart_20 = false; |   if ( bFirstStart_20 && (20000 < millis()) ) bFirstStart_20 = false; | ||||||
| 
 | 
 | ||||||
|   switch ( ActionID ) { |   switch ( ActionID ) { | ||||||
|     case ACT_BUTTON_PRESS: |     case ACT_BUTTON_UP: | ||||||
|       { |       { | ||||||
|         if ( !bShowRearCam || !isWait() ) |         if ( !bShowRearCam || !isWait() ) | ||||||
|         { |         { | ||||||
| @ -111,9 +118,10 @@ void AVCLanHonda::processAction( AvcActionID ActionID ) | |||||||
|       bShowHondaDisp = true; |       bShowHondaDisp = true; | ||||||
|       setWaitTime(0L); |       setWaitTime(0L); | ||||||
|       break; |       break; | ||||||
|     case ACT_DISP_OFF: |     case ACT_B_DISPOFF: | ||||||
|       if ( !bShowRearCam ) |     case ACT_B_DISPFULL_UP: | ||||||
|       { |     case ACT_B_DISPHULF: | ||||||
|  |       if ( !bShowRearCam ) { | ||||||
|         // need freeze on 2000 sec after code receiving.
 |         // need freeze on 2000 sec after code receiving.
 | ||||||
|         bShowHondaDisp = false; |         bShowHondaDisp = false; | ||||||
|         bHondaDisLast = false; |         bHondaDisLast = false; | ||||||
|  | |||||||
| @ -36,11 +36,12 @@ | |||||||
| typedef enum { | typedef enum { | ||||||
|   ACT_CAM_ON = 1, |   ACT_CAM_ON = 1, | ||||||
|   ACT_CAM_OFF, |   ACT_CAM_OFF, | ||||||
|   //  ACT_DISP_HULF,
 |  | ||||||
|   ACT_DISP_OFF, |   ACT_DISP_OFF, | ||||||
|   ACT_BUTTON_PRESS, |   ACT_BUTTON_DOWN, | ||||||
|  |   ACT_BUTTON_UP, | ||||||
|   ACT_B_DISPOFF, |   ACT_B_DISPOFF, | ||||||
|   ACT_B_DISPFULL, |   ACT_B_DISPFULL_DOWN, | ||||||
|  |   ACT_B_DISPFULL_UP, | ||||||
|   ACT_B_DISPHULF, |   ACT_B_DISPHULF, | ||||||
|   ACT_TEL, |   ACT_TEL, | ||||||
|   ACT_TEL_CANCEL |   ACT_TEL_CANCEL | ||||||
|  | |||||||
| @ -2,21 +2,30 @@ | |||||||
| #include "AVCLan_BT.h" | #include "AVCLan_BT.h" | ||||||
| #include <SoftwareSerial.h> | #include <SoftwareSerial.h> | ||||||
| #include <avr/pgmspace.h> | #include <avr/pgmspace.h> | ||||||
|  | #include <EEPROM.h> | ||||||
|  | 
 | ||||||
|  | //--------------------------------------------------------------------------------
 | ||||||
|  | #define E_LOGG 0 | ||||||
|  | 
 | ||||||
| //--------------------------------------------------------------------------------
 | //--------------------------------------------------------------------------------
 | ||||||
| SoftwareSerial mySerial(4, 3); // RX | TX
 | SoftwareSerial mySerial(4, 3); // RX | TX
 | ||||||
| char command_buff[15]; | char command_buff[15]; | ||||||
| int command_i; | int command_i; | ||||||
|  | bool startCommand; | ||||||
| //--------------------------------------------------------------------------------
 | //--------------------------------------------------------------------------------
 | ||||||
| void AVCLanBT::begin() | void AVCLanBT::begin() | ||||||
| //--------------------------------------------------------------------------------
 | //--------------------------------------------------------------------------------
 | ||||||
| { | { | ||||||
|   mySerial.begin(9600); |   mySerial.begin(9600); | ||||||
|   mySerial.println("BlueTooth is ready"); |   mySerial.println("BlueTooth is ready"); | ||||||
|   mySerial.println("log_on@ - start logging"); |   mySerial.println("@log+@ - start logging"); | ||||||
|   mySerial.println("log_off@ - end logging"); |   mySerial.println("@log-@ - end logging"); | ||||||
|   mySerial.println("save@ - save logging in EEPROM"); |   mySerial.println("@save@ - save logging in EEPROM"); | ||||||
|   logging = false; |   logging = false; | ||||||
|   command_i = 0; |   command_i = 0; | ||||||
|  |   startCommand = false; | ||||||
|  | 
 | ||||||
|  |   EERPOM_read_config(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| //--------------------------------------------------------------------------------
 | //--------------------------------------------------------------------------------
 | ||||||
| @ -58,22 +67,92 @@ int AVCLanBT::available() | |||||||
| void AVCLanBT::checkCommand( char command ) | void AVCLanBT::checkCommand( char command ) | ||||||
| //--------------------------------------------------------------------------------
 | //--------------------------------------------------------------------------------
 | ||||||
| { | { | ||||||
|   if ( command == '@' ) //end of command;
 |   if ( (command == '@')  && !startCommand ) { | ||||||
|   { |     startCommand = true; | ||||||
|     command_buff[command_i + 1] = '\0'; |  | ||||||
|     command_i = 0; |     command_i = 0; | ||||||
|  |   } else if ( startCommand && (command != '@') ) { | ||||||
| 
 | 
 | ||||||
|     if ( 0 == strcmp( command_buff, "log_on" )  ) logging = true; |  | ||||||
|     else if ( 0 == strcmp( command_buff, "log_off" )  ) logging = false; |  | ||||||
|     println(command_buff); |  | ||||||
|     Serial.print("logging - "); Serial.println(logging); |  | ||||||
|   } |  | ||||||
|   else |  | ||||||
|   { |  | ||||||
|     command_buff[command_i++] = command; |     command_buff[command_i++] = command; | ||||||
|  |   }	else if ( startCommand && (command == '@') ) { | ||||||
|  |     command_buff[command_i] = '\0'; | ||||||
|  |     startCommand = false; | ||||||
|  | 
 | ||||||
|  |     if ( 0 == strcmp( command_buff, "log+" )  ) { | ||||||
|  |       logging = true; | ||||||
|  |       mySerial.println(">>Logging ON<<"); | ||||||
|  |       //      Serial.println(">>Logging ON<<");
 | ||||||
|  |     } else if ( 0 == strcmp( command_buff, "log-" )  ) { | ||||||
|  |       mySerial.println(">>Logging OFF<<"); | ||||||
|  |       //      Serial.println(">>Logging OFF<<");
 | ||||||
|  |       logging = false; | ||||||
|  |     } else if ( 0 == strcmp( command_buff, "save" ) ) { | ||||||
|  |       EEPROM.write( E_LOGG, (int)logging ); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     println(command_buff); | ||||||
|  |     //    Serial.println(command_buff);
 | ||||||
|   } |   } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | //--------------------------------------------------------------------------------
 | ||||||
|  | void AVCLanBT::println(void) | ||||||
|  | //--------------------------------------------------------------------------------
 | ||||||
|  | { | ||||||
|  |   print("\r\n"); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | //--------------------------------------------------------------------------------
 | ||||||
|  | void AVCLanBT::printHex4(uint8_t data) | ||||||
|  | //--------------------------------------------------------------------------------
 | ||||||
|  | { | ||||||
|  |   uint8_t c = data & 0x0f; | ||||||
|  |   c += c < 10 ? '0' : 'A' - 10 ; | ||||||
|  |   sendByte(c); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | //--------------------------------------------------------------------------------
 | ||||||
|  | void AVCLanBT::printHex8(uint8_t data) | ||||||
|  | //--------------------------------------------------------------------------------
 | ||||||
|  | { | ||||||
|  |   printHex4(data >> 4); | ||||||
|  |   printHex4(data); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | //--------------------------------------------------------------------------------
 | ||||||
|  | void AVCLanBT::printDec(uint8_t data) | ||||||
|  | //--------------------------------------------------------------------------------
 | ||||||
|  | { | ||||||
|  |   uint8_t buf[3]; | ||||||
|  |   uint8_t i = 0; | ||||||
|  |   if (data == 0) { | ||||||
|  |     sendByte('0'); | ||||||
|  |     return; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   while (data > 0) { | ||||||
|  |     buf[i++] = data % 10; | ||||||
|  |     data /= 10; | ||||||
|  |   } | ||||||
|  |   for (; i > 0; i--) | ||||||
|  |     sendByte((buf[i - 1] < 10 ? '0' + buf[i - 1] : 'A' + buf[i - 1] - 10)); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | //--------------------------------------------------------------------------------
 | ||||||
|  | void AVCLanBT::sendByte(uint8_t val) | ||||||
|  | //--------------------------------------------------------------------------------
 | ||||||
|  | { | ||||||
|  |   mySerial.write( val ); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | //--------------------------------------------------------------------------------
 | ||||||
|  | void AVCLanBT::EERPOM_read_config() | ||||||
|  | //--------------------------------------------------------------------------------
 | ||||||
|  | { | ||||||
|  |   if (EEPROM.read(E_LOGG) == 1 ) logging = true; | ||||||
|  | 
 | ||||||
|  |   logging ? mySerial.println(">>Logging ON<<") : mySerial.println(">>Logging OFF<<"); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| AVCLanBT avclanBT; | AVCLanBT avclanBT; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -17,7 +17,12 @@ class AVCLanBT | |||||||
| 
 | 
 | ||||||
|     void println( char*); |     void println( char*); | ||||||
|     void print(const char*); |     void print(const char*); | ||||||
|  |     void printHex4(uint8_t); | ||||||
|  |     void printHex8(uint8_t); | ||||||
|  |     void printDec(uint8_t); | ||||||
|  |     void println(void); | ||||||
| 
 | 
 | ||||||
|  |     void sendByte(uint8_t); | ||||||
|     char read(); |     char read(); | ||||||
| 
 | 
 | ||||||
|     bool isLogging(); |     bool isLogging(); | ||||||
| @ -25,6 +30,7 @@ class AVCLanBT | |||||||
|     void checkCommand(char command ); |     void checkCommand(char command ); | ||||||
| 
 | 
 | ||||||
|   private: |   private: | ||||||
|  |     void EERPOM_read_config(); | ||||||
|     bool logging; |     bool logging; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -23,7 +23,7 @@ int len = 0; //stores the length of the commands | |||||||
| void setup() | void setup() | ||||||
| //--------------------------------------------------------------------------------
 | //--------------------------------------------------------------------------------
 | ||||||
| { | { | ||||||
|   Serial.begin(9600); |   //  Serial.begin(9600);
 | ||||||
| 
 | 
 | ||||||
|   avclan.begin(); |   avclan.begin(); | ||||||
|   avclanHonda.begin(); |   avclanHonda.begin(); | ||||||
| @ -42,9 +42,8 @@ void loop() | |||||||
|   if (avclanBT.available()) |   if (avclanBT.available()) | ||||||
|   { |   { | ||||||
|     len = avclanBT.available(); |     len = avclanBT.available(); | ||||||
|     int i; |     //    Serial.print("len ="); Serial.println(len);
 | ||||||
|     Serial.print("len ="); Serial.println(len); |     for (int i = 0; i < len; i++) | ||||||
|     for (i = 0; i < len; i++) |  | ||||||
|     { |     { | ||||||
|       avclanBT.checkCommand(avclanBT.read()); |       avclanBT.checkCommand(avclanBT.read()); | ||||||
|     } |     } | ||||||
| @ -67,8 +66,8 @@ void loop() | |||||||
|   if ( INPUT_IS_SET ) { |   if ( INPUT_IS_SET ) { | ||||||
|     byte res = avclan.readMessage(); |     byte res = avclan.readMessage(); | ||||||
|     if ( !res ) { |     if ( !res ) { | ||||||
|  |       avclan.printMessage(true); | ||||||
|       error_count = 0; |       error_count = 0; | ||||||
| 
 |  | ||||||
|       avclanHonda.getActionID(); |       avclanHonda.getActionID(); | ||||||
|       if ( avclan.actionID != ACT_NONE ) { |       if ( avclan.actionID != ACT_NONE ) { | ||||||
|         sprintf( BUFFF, "Action: %d", avclan.actionID ); |         sprintf( BUFFF, "Action: %d", avclan.actionID ); | ||||||
| @ -97,13 +96,17 @@ void loop() | |||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   if ( error_count > MAX_ERROR_COUNT ) { |   if ( error_count > MAX_ERROR_COUNT ) { | ||||||
|  |     avclanHonda.bFirstStart_20 = false; | ||||||
|     error_count = 0; |     error_count = 0; | ||||||
|     avclanHonda.setHondaDis(true); |     avclanHonda.setHondaDis(true); | ||||||
| 
 | 
 | ||||||
|     LED_OFF; |     LED_OFF; | ||||||
|  |     HONDA_DIS_ON; | ||||||
| 
 | 
 | ||||||
|     sprintf(BUFFF, "Error: %d", errorID ); |     sprintf(BUFFF, "Error: %d", errorID ); | ||||||
|     avclanBT.println( BUFFF ); |     avclanBT.println( BUFFF ); | ||||||
|  |     avclan.begin(); | ||||||
|  |     cli(); | ||||||
|   } |   } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user