1
0
mirror of https://github.com/Oleg-Stepanenko-owo/IEBUS synced 2025-06-12 02:16:10 +00:00
2016-05-15 16:37:44 +03:00

221 lines
7.1 KiB
C++

//--------------------------------------------------------------------------------
#include "AVCLan_BT.h"
#include <SoftwareSerial.h>
#include <avr/pgmspace.h>
#include <EEPROM.h>
//--------------------------------------------------------------------------------
// *1 - Rear camera ON
// *2 - Rear camera Off
// *3 - Display off
// *4 - Button donw
// *5 - >>A:BUTTON UP<<"
// *6 ">>A:B_DISP_OFF<<"
// *7 ">>A:B_DISP_FULL_DOWN<<"
// *8 ">>A:B_DISP_FULL_UP<<"
// *9 ">>A:B_DISP_HILF<<"
// *10 ">>A:TEL<<"
// *11 ">>A:TEL CANCEL<<"
// *12 ">>A:PREP_CAMOFF<<"
// *99 ">>A:UNDEFINED<<");
//--------------------------------------------------------------------------------
#define E_LOGG 0
#define E_DISPLAY 1
//--------------------------------------------------------------------------------
SoftwareSerial mySerial(4, 3); // RX | TX
char command_buff[15];
int command_i;
bool startCommand;
//--------------------------------------------------------------------------------
void AVCLanBT::begin()
//--------------------------------------------------------------------------------
{
dispalyStatus = 0;
mySerial.begin(9600);
mySerial.println("BlueTooth:");
mySerial.println("@l+@");
mySerial.println("@l-@");
mySerial.println("@s@");
mySerial.println("@d0,1,2@");
// d0 - default
// d1 - always HONDA
// d2 - always GVN
logging = false;
command_i = 0;
startCommand = false;
EERPOM_read_config();
}
//--------------------------------------------------------------------------------
void AVCLanBT::println( char* val, bool bLogging )
//--------------------------------------------------------------------------------
{
if ( bLogging || logging )
mySerial.println( val );
}
//--------------------------------------------------------------------------------
void AVCLanBT::print( const char* val, bool bLogging )
//--------------------------------------------------------------------------------
{
if ( bLogging || logging )
mySerial.print( val );
}
//--------------------------------------------------------------------------------
char AVCLanBT::read()
//--------------------------------------------------------------------------------
{
return mySerial.read();
}
//--------------------------------------------------------------------------------
bool AVCLanBT::isLogging()
//--------------------------------------------------------------------------------
{
return logging;
}
//--------------------------------------------------------------------------------
int AVCLanBT::available()
//--------------------------------------------------------------------------------
{
return mySerial.available();
}
//--------------------------------------------------------------------------------
void AVCLanBT::checkCommand( char command )
//--------------------------------------------------------------------------------
{
// Serial.print("command:"); Serial.println(command);
if ( (command == '@') && !startCommand ) {
startCommand = true;
command_i = 0;
} else if ( startCommand && (command != '@') ) {
command_buff[command_i++] = command;
} else if ( startCommand && (command == '@') ) {
command_buff[command_i] = '\0';
startCommand = false;
if ( 0 == strcmp( command_buff, "l+" ) ) {
logging = true;
mySerial.println("#ON");
} else if ( 0 == strcmp( command_buff, "l-" ) ) {
mySerial.println("#OFF");
logging = false;
} else if ( 0 == strcmp( command_buff, "s" ) ) {
EEPROM.write( E_LOGG, (int)logging );
EEPROM.write( E_DISPLAY, dispalyStatus );
mySerial.print("#S:"); mySerial.print(logging); mySerial.print(":"); mySerial.println(dispalyStatus);
} else if ( 0 == strcmp( command_buff, "d0" ) ) {
dispalyStatus = 0;
mySerial.println("#D0");
} else if ( 0 == strcmp( command_buff, "d1" ) ) {
dispalyStatus = 1;
mySerial.println("#D1");
} else if ( 0 == strcmp( command_buff, "d2" ) ) {
dispalyStatus = 2;
mySerial.println("#D2");
}
// println(command_buff);
}
}
//--------------------------------------------------------------------------------
void AVCLanBT::println( bool bLogging )
//--------------------------------------------------------------------------------
{
if ( bLogging || logging )
mySerial.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::printAction( AvcActionID ActionID )
//--------------------------------------------------------------------------------
{
switch ( ActionID )
{
case ACT_CAM_ON: mySerial.println("*1"); break;
case ACT_CAM_OFF: mySerial.println("*2"); break;
case ACT_DISP_OFF: mySerial.println("*3"); break;
case ACT_BUTTON_DOWN: mySerial.println("*4"); break;
case ACT_BUTTON_UP: mySerial.println("*5"); break;
case ACT_B_DISPOFF: mySerial.println("*6"); break;
case ACT_B_DISPFULL_DOWN: mySerial.println("*7"); break;
case ACT_B_DISPFULL_UP: mySerial.println("*8"); break;
case ACT_B_DISPHULF: mySerial.println("*9"); break;
case ACT_TEL: mySerial.println("*10"); break;
case ACT_TEL_CANCEL: mySerial.println("*11"); break;
case ACT_PREP_CAMOFF: mySerial.println("*12"); break;
default: mySerial.println("*99");
}
}
//--------------------------------------------------------------------------------
int AVCLanBT::getDisplayStatus()
//--------------------------------------------------------------------------------
{
return dispalyStatus;
}
//--------------------------------------------------------------------------------
void AVCLanBT::EERPOM_read_config()
//--------------------------------------------------------------------------------
{
if ( EEPROM.read(E_LOGG) == 1 ) logging = true;
dispalyStatus = EEPROM.read(E_DISPLAY);
logging ? mySerial.println("Log+;") : mySerial.println("Log-;");
mySerial.print("Disp:"); mySerial.println(dispalyStatus);
}
AVCLanBT avclanBT;