3230 lines
79 KiB
C++
3230 lines
79 KiB
C++
#define ESP32
|
||
|
||
#include "HardwareSerial.h"
|
||
#include "Timers_ADI.h"
|
||
|
||
// Colors
|
||
#define WHITE_ADI 16777215
|
||
#define RED_ADI 16711680
|
||
#define BLACK_ADI 0
|
||
#define TEAL_ADI 65535
|
||
#define LT_RED_ADI 16002606 // #f42e2e
|
||
#define LT_YELLOW_ADI 16051202 // #f3ed2e
|
||
|
||
#define LIDARADDRESS 161
|
||
|
||
// Screens
|
||
// #define displayAddr 1
|
||
#define CONFIGSCREEN5 401
|
||
#define CONFIGSCREEN2 13
|
||
#define LOGOSCREEN 8
|
||
#define ARROWSCREEN 4
|
||
#define ARROWSCREENnb 1
|
||
#define NUMBERPAD 6 // 101
|
||
#define REPLYTIME 40 // 1 second max wait for reply //increase for wifi delays
|
||
#define SCREENTIMEOUT 300 // reset screen if no activity
|
||
#define LF 10
|
||
#define ESC 27
|
||
#define BACKDOOR 2430
|
||
#define ARROWSCREEN2 10
|
||
#define ARROWSCREEN2nb 11
|
||
#define CLARITYADSCREEN 20
|
||
#define CLARITYOKSCREEN 21
|
||
#define EVOWIFI0 22
|
||
#define EVOWIFI1 23
|
||
#define EVOWIFI2 24
|
||
#define EVOWIFI3 25
|
||
|
||
#define MAX_DISPLAYS 5
|
||
#define CLARITY_VER 14
|
||
|
||
int16_t rssiWIFI;
|
||
|
||
int displayAddr = 1;
|
||
int16_t countLF = 0;
|
||
byte instr[61];
|
||
int16_t indx;
|
||
int16_t address, xxx, yyy, zzz;
|
||
int16_t parmChoice = 0;
|
||
int16_t displayCase = 0;
|
||
int16_t lastDisplayCase = -1;
|
||
int16_t sendingDisplayCase = 0;
|
||
int32_t workvariable;
|
||
int16_t displayForward;
|
||
|
||
int8_t parmBank = 0; // multipage change
|
||
int motorFault = 0;
|
||
int obstructionFault = 0;
|
||
// int batteryFault = 0;
|
||
int battV;
|
||
int lidarObstruction = 0;
|
||
int lidarLearn;
|
||
int lidarTest = 0;
|
||
uint8_t slaveCommand;
|
||
int32_t clarityRepeatCount;
|
||
int32_t remoteParmFetchSerial = 0;
|
||
int32_t extParmsWrite[4];
|
||
int16_t remoteParmNum = -1;
|
||
uint16_t remoteParmLast = -1;
|
||
int16_t remoteParmCounter = -1;
|
||
int16_t parmRetryCounter = -1;
|
||
|
||
int attachedDisplays[MAX_DISPLAYS + 1];
|
||
|
||
/* define in main
|
||
int cDOOROPEN = 0;
|
||
int cDOORCLOSE = 0;
|
||
int cDOORSTOP = 0;
|
||
bool SCREENOPEN = 0;
|
||
bool SCREENCLOSE = 0;
|
||
bool SCREENSTOP = 0;
|
||
*/
|
||
|
||
int16_t X_OFFSET = 0;
|
||
int16_t Y_OFFSET = 0;
|
||
|
||
void init485(void)
|
||
{
|
||
Serial2.begin(9600, SERIAL_8N1, 34, 27); // 485
|
||
delay(400);
|
||
|
||
setBacklightLevel(displayAddr, 50);
|
||
delay(200);
|
||
}
|
||
|
||
void inSerial2(void) // run every pass in mainline
|
||
{
|
||
while (Serial2.available() != 0) // check char buffer
|
||
{
|
||
instr[indx] = Serial2.read(); // store it
|
||
if (instr[indx] == LF)
|
||
countLF++;
|
||
indx++;
|
||
|
||
if (indx >= sizeof(instr))
|
||
{
|
||
indx = 0; // oops overrun
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
|
||
/*
|
||
Write Text
|
||
<ESC>],aaa,xxx,yyy,TEXTTOPRINT…….,ccc<LF>
|
||
x – column
|
||
y – row
|
||
TEXT - text characters to print 70 chars max
|
||
*/
|
||
void showDisplayText(int16_t adr, int16_t x, int16_t y, char *txtstr)
|
||
{
|
||
char tmpstr[100];
|
||
sprintf(tmpstr, "%c],%d,%d,%d,%s,", 27, adr, x, y, txtstr);
|
||
sendDisplayCommand(tmpstr);
|
||
}
|
||
|
||
/*
|
||
Fill Screen
|
||
<ESC>#,aaa,rgb,ccc<LF>
|
||
rgb – Screen color
|
||
*/
|
||
|
||
void fillDisplay(int16_t adr, int32_t rgb)
|
||
{
|
||
char tmpstr[100];
|
||
sprintf(tmpstr, "%c#,%d,%d,", 27, adr, rgb);
|
||
sendDisplayCommand(tmpstr);
|
||
}
|
||
|
||
void setBacklightLevel(int16_t adr, int32_t bklt)
|
||
{
|
||
char tmpstr[100];
|
||
sprintf(tmpstr, "%c*,%d,%d,", 27, adr, bklt);
|
||
sendDisplayCommand(tmpstr);
|
||
}
|
||
|
||
/*
|
||
Draw Rectangle
|
||
<ESC>L,aaa,ttt,xxx,yyy,www,hhh,rgb,rrr,ccc<LF>
|
||
ttt Type
|
||
0 – default
|
||
1 – filled
|
||
xxx,yyy Rectangle origin
|
||
www width
|
||
hhh height
|
||
rgb Outline or Fill Color
|
||
rrr Corner radius 0 if not a rounded rectangle will be drawn
|
||
|
||
*/
|
||
|
||
void showDisplayRectangle(int16_t adr, int16_t mmm, int16_t x, int16_t y, int16_t www, int16_t hhh, int16_t ttt, uint32_t rgb, int16_t rrr)
|
||
{
|
||
char tmpstr1[100];
|
||
sprintf(tmpstr1, "%cR,%d,%d,%d,%d,%d,%d,%d,%d,%d,", 27, adr, mmm, x, y, www, hhh, ttt, rgb, rrr);
|
||
Serial.println(tmpstr1);
|
||
sendDisplayCommand(tmpstr1);
|
||
}
|
||
|
||
void showDisplayGraphic(int16_t adr, int16_t x, int16_t y, int16_t img, int16_t tp, int16_t tpenable)
|
||
{
|
||
char tmpstr[100];
|
||
sprintf(tmpstr, "%c^,%d,%d,%d,%d,%d,%d,", 27, adr, x, y, img, tp, tpenable);
|
||
sendDisplayCommand(tmpstr);
|
||
lastDisplayedGraphic = img;
|
||
}
|
||
|
||
// Ping <ESC>%,aaa,ccc<LF>
|
||
void pingDisplay(int16_t adr)
|
||
{
|
||
char tmpstr[100];
|
||
sprintf(tmpstr, "%c%c,%d,%d,", 27, 37, adr, displayCase);
|
||
|
||
// sprintf(tmpstr, "%c%c,%d,", 27, 37, adr);
|
||
sendDisplayCommand(tmpstr);
|
||
}
|
||
|
||
// Beep <ESC>%,aaa,ccc<LF>
|
||
void beepDisplay(int16_t adr)
|
||
{
|
||
char tmpstr[100];
|
||
sprintf(tmpstr, "%c%c,%d,%d,", 27, 66, adr, 1000);
|
||
sendDisplayCommand(tmpstr);
|
||
}
|
||
|
||
// Status <ESC>$,aaa,ccc<LF>
|
||
void statusDisplay(int16_t adr)
|
||
{
|
||
char tmpstr[100];
|
||
sprintf(tmpstr, "%c$,%d,", 27, adr);
|
||
sendDisplayCommand(tmpstr);
|
||
}
|
||
|
||
/*
|
||
Text Attributes
|
||
<ESC>2,font,bold,width,height,highlight,color,opacity<LF>
|
||
font – 1 System_5x7 *bold 0 - off
|
||
2 System_8x8 1 - on
|
||
3(default) System_8x12
|
||
4 System_12x6 *width 1 – 16 default 1
|
||
5 MS_SanSerif8X12 *height 1 – 16 default 1
|
||
6 dejaVuSans9pt
|
||
7 dejaVuSansBold9pt highlight 0 – 65535 Text background color default BLACK
|
||
8 dejaVuSansCondensed9pt
|
||
9 System_3X6 color 0 – 65535 Text foreground color default WHITE
|
||
10 plotted
|
||
11 EGA 8 x 12 font *opacity 0 - transparent background pixels drawn
|
||
1 – opaque background p
|
||
*/
|
||
void setTextAttributes(int16_t adr, int8_t fnt, int16_t bld, int16_t wdth, int16_t hgth, int32_t bkgd, int32_t frgd, int16_t opacity)
|
||
{
|
||
char tmpstr[100];
|
||
sprintf(tmpstr, "%c%c,%d,%d,%d,%d,%d,%d,%d,%d,", 27, 2, adr, fnt, bld, wdth, hgth, bkgd, frgd, opacity);
|
||
sendDisplayCommand(tmpstr);
|
||
}
|
||
|
||
void showObstructionScreen(void)
|
||
{
|
||
obstructionFault = 1;
|
||
// displayCase = 710;
|
||
cDOORCLOSE = 0; // v117
|
||
DOORCLOSE = 0;
|
||
}
|
||
|
||
void setMotorFault(int f)
|
||
{
|
||
motorFault = f + 1;
|
||
// parm[33] = 0;
|
||
parms.write(33, 0);
|
||
faultNum = 2;
|
||
faultAB = 0;
|
||
faultData = 0;
|
||
}
|
||
|
||
void sendDisplayCommand(char *tmpstr)
|
||
{
|
||
uint8_t i;
|
||
uint16_t csum = 0;
|
||
uint8_t bte;
|
||
|
||
indx = 0;
|
||
countLF = 0;
|
||
Timers[COMMSREPLYTIMER] = 0; // restart it
|
||
memset(instr, 0, sizeof(instr));
|
||
|
||
// send the first part
|
||
for (i = 0; tmpstr[i] != 0; i++)
|
||
Serial2.write(tmpstr[i]);
|
||
// if (VB) Serial.print(tmpstr);
|
||
|
||
// calc the csum from ESC to final ","
|
||
for (i = 0; tmpstr[i] != 0; i++)
|
||
csum += tmpstr[i];
|
||
if (VB)
|
||
{
|
||
// Serial.print("Raw CSUM = ");
|
||
// Serial.println(csum);
|
||
}
|
||
csum = csum & 0xff;
|
||
if (VB)
|
||
{
|
||
// Serial.print("Raw 8 bit CSUM = ");
|
||
// Serial.println(csum);
|
||
}
|
||
csum = (0 - csum) & 0xff; // 2's comp
|
||
bte = csum;
|
||
if (VB)
|
||
{
|
||
// Serial.print("2's Comp CSUM = ");
|
||
// Serial.println(bte);
|
||
}
|
||
if (bte == 255)
|
||
bte = 0; // adjust it if 255
|
||
if (VB)
|
||
{
|
||
// Serial.print("Check for 255 CSUM = ");
|
||
// Serial.println(bte);
|
||
}
|
||
|
||
// send out the rest of it
|
||
sprintf(tmpstr, "%u\n", bte);
|
||
// if (VB) Serial.print(tmpstr);
|
||
|
||
for (i = 0; tmpstr[i] != 0; i++)
|
||
Serial2.write(tmpstr[i]);
|
||
}
|
||
|
||
void serviceDisplay(void)
|
||
{
|
||
char tmpstr[80];
|
||
float f;
|
||
int16_t v10;
|
||
int16_t v11;
|
||
int16_t v;
|
||
int i;
|
||
// int16_t ig;
|
||
|
||
switch (displayCase)
|
||
{
|
||
// init
|
||
case 0:
|
||
displayCase = 600; // multi displays always check
|
||
displayAddr = 1;
|
||
Timers[SCREENTIMEOUTTIMER] = 0;
|
||
break;
|
||
|
||
case 1:
|
||
displayCase = 2;
|
||
if (parm[12] == 0)
|
||
displayCase = 140; // question screens
|
||
displayAddr = 1;
|
||
Timers[SCREENTIMEOUTTIMER] = 0;
|
||
break;
|
||
|
||
case 2:
|
||
displayCase = 3;
|
||
if (parm[54] != 0)
|
||
displayCase = 300; // we have Lidar to configure
|
||
displayAddr = 1;
|
||
break;
|
||
|
||
case 3:
|
||
displayCase = 9;
|
||
displayAddr = 1;
|
||
break;
|
||
|
||
// poll
|
||
case 9:
|
||
displayCase = 20; // logo screens.. scan displays
|
||
|
||
break;
|
||
|
||
case 10:
|
||
displayCase = 22; // scan displays
|
||
if (isDoorIdle() == 1)
|
||
if (Timers[SCREENTIMEOUTTIMER] > SCREENTIMEOUT)
|
||
{
|
||
displayCase = 19; // too long
|
||
Timers[SCREENTIMEOUTTIMER] = 0;
|
||
}
|
||
break;
|
||
|
||
case 11: // check ioExpanders
|
||
displayCase = 12;
|
||
displayForward = 12;
|
||
if (parm[25] != 0)
|
||
displayCase = 200;
|
||
break;
|
||
|
||
case 12: // check lidar
|
||
displayCase = 13;
|
||
displayForward = 13;
|
||
if (parm[54] != 0)
|
||
displayCase = 310;
|
||
break;
|
||
|
||
case 13: // check if lidar learn
|
||
displayCase = 14;
|
||
if (lidarLearn)
|
||
displayCase = 315;
|
||
if (lidarTest)
|
||
displayCase = 1310;
|
||
break;
|
||
|
||
case 14: // second slave motor?
|
||
displayCase = 15;
|
||
if (parm[52] != 0) // got slaves
|
||
{
|
||
displayCase = 350;
|
||
displayForward = 15;
|
||
}
|
||
break;
|
||
|
||
case 15:
|
||
displayCase = 10;
|
||
|
||
break;
|
||
|
||
case 19: // shut off lidar
|
||
displayCase = 20;
|
||
displayForward = 20; // shut off lidar
|
||
if (parm[54] != 0)
|
||
displayCase = 310;
|
||
break;
|
||
|
||
//***LOGO Screen
|
||
case 20:
|
||
|
||
displayCase = 21;
|
||
|
||
if (Timers[BLANKSCREENTIMER] > parm[67])
|
||
fillDisplay(displayAddr, BLACK_ADI); // v525 clear screen
|
||
else
|
||
{ // enough cycles? clarity enabled?
|
||
if (parm[displayAddr + 130] >= CLARITY_VER)
|
||
{
|
||
if (parm[11] >= (parm[101] + clarityRepeatCount) &&
|
||
(parm[101] > 0) &&
|
||
(parm[9] == 0)) // let's show clarity screen
|
||
{
|
||
clarityRepeatCount = parm[11];
|
||
showDisplayGraphic(displayAddr, 0, 0, CLARITYADSCREEN, 0, 0);
|
||
}
|
||
else
|
||
{
|
||
showDisplayGraphic(displayAddr, 0, 0, LOGOSCREEN, 0, 0);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
showDisplayGraphic(displayAddr, 0, 0, LOGOSCREEN, 0, 0);
|
||
}
|
||
}
|
||
|
||
if (parm[9] != 0 && (Timers[BLANKSCREENTIMER] < parm[67]))
|
||
{
|
||
displayCase = 400;
|
||
displayForward = 21;
|
||
}
|
||
|
||
// v525
|
||
if (parm[67] != 0)
|
||
if (Timers[BLANKSCREENTIMER] == -1)
|
||
Timers[BLANKSCREENTIMER] = 0; // start it
|
||
|
||
break;
|
||
|
||
case 21:
|
||
|
||
sendingDisplayCase = displayCase;
|
||
if (countLF >= 2) // got our response
|
||
{
|
||
displayAddr++;
|
||
displayCase = 22;
|
||
|
||
// displayForward = displayCase; //v534 show WiFi RSSI
|
||
// displayCase = 400; //v534
|
||
|
||
if (attachedDisplays[displayAddr] == 0 || displayAddr > MAX_DISPLAYS) // no more displays
|
||
{
|
||
displayAddr = 1; // move on
|
||
}
|
||
else // got another display
|
||
{
|
||
displayCase = 20;
|
||
}
|
||
}
|
||
|
||
if (Timers[COMMSREPLYTIMER] > REPLYTIME * 3)
|
||
displayCase = 999; // too long
|
||
break;
|
||
|
||
case 22:
|
||
|
||
displayCase++;
|
||
pingDisplay(displayAddr);
|
||
|
||
break;
|
||
|
||
case 23:
|
||
|
||
sendingDisplayCase = displayCase;
|
||
if (countLF >= 2) // got our response
|
||
{
|
||
parseXY();
|
||
displayCase = 22;
|
||
displayForward = 999;
|
||
|
||
if ((xxx + yyy) >= 0) // got a valid touch
|
||
{
|
||
Timers[BLANKSCREENTIMER] = -1; // v525 turn it off
|
||
|
||
if (attachedDisplays[displayAddr] == 1)
|
||
{
|
||
X_OFFSET = 530;
|
||
Y_OFFSET = 95;
|
||
}
|
||
else
|
||
{
|
||
X_OFFSET = 0;
|
||
Y_OFFSET = 0;
|
||
}
|
||
|
||
if (check_TouchBox(200, 240, 280, 320) || check_TouchBox(700, 900, 400, 500)) // go to config
|
||
{
|
||
displayCase = 60; // numpad
|
||
displayForward = 160;
|
||
parmChoice = -1;
|
||
|
||
if (parm[8] == 0)
|
||
displayCase = 90; // config .. no access code
|
||
}
|
||
|
||
if (check_TouchBox(200, 240, 0, 50) || check_TouchBox(700, 900, 0, 100)) // go to wifi enabled
|
||
{
|
||
if (parm[9] == 0)
|
||
{
|
||
if (parm[displayAddr + 130] >= CLARITY_VER)
|
||
{
|
||
displayCase = 410;
|
||
displayForward = 410;
|
||
}
|
||
else
|
||
{
|
||
displayCase = 420;
|
||
displayForward = 420;
|
||
}
|
||
parms.write(9, 1);
|
||
}
|
||
}
|
||
|
||
if (displayForward == 999) // none of above..wanna run door
|
||
{
|
||
clearMotorError();
|
||
motorFault = 0;
|
||
|
||
displayCase = 60; // go to keypad
|
||
displayForward = 162;
|
||
parmChoice = -1;
|
||
if (parm[8] == 0)
|
||
displayCase = 24;
|
||
}
|
||
}
|
||
else // no touch
|
||
{
|
||
displayAddr++;
|
||
displayCase = 22;
|
||
if (attachedDisplays[displayAddr] == 00) // no more displays
|
||
{
|
||
displayAddr = 1; // move on
|
||
|
||
displayForward = 22; // v125
|
||
displayCase = 11;
|
||
}
|
||
}
|
||
}
|
||
|
||
if (obstructionFault)
|
||
{
|
||
displayCase = 710;
|
||
break;
|
||
}
|
||
|
||
if (Timers[COMMSREPLYTIMER] > REPLYTIME)
|
||
displayCase = 999; // too long
|
||
break;
|
||
|
||
case 24:
|
||
if (parm[1] == 0) // normal v550
|
||
if (parm[52] == 0) // no slaves
|
||
if (parm[3] != 0) // bug-nobug
|
||
showDisplayGraphic(displayAddr, 0, 0, ARROWSCREEN, 0, 0); // show the arrow with bug screen
|
||
else
|
||
showDisplayGraphic(displayAddr, 0, 0, ARROWSCREENnb, 0, 0); // show the arrow no bug screen
|
||
|
||
if (parm[1] == 0) // 2door v550 master
|
||
if (parm[52] != 0) // got slaves
|
||
if (parm[3] != 0) // bug-nobug
|
||
showDisplayGraphic(displayAddr, 0, 0, ARROWSCREEN2, 0, 0); // show the arrow with bug screen
|
||
else
|
||
showDisplayGraphic(displayAddr, 0, 0, ARROWSCREEN2nb, 0, 0); // show the arrow no bug screen
|
||
|
||
displayCase++;
|
||
lidarObstruction = 0;
|
||
break;
|
||
|
||
case 25:
|
||
sendingDisplayCase = displayCase;
|
||
if (countLF >= 2) // got our response
|
||
displayCase++;
|
||
|
||
if (Timers[COMMSREPLYTIMER] > REPLYTIME * 3)
|
||
displayCase = 999; // too long
|
||
break;
|
||
|
||
case 26:
|
||
displayForward = 27;
|
||
if (getMotorError())
|
||
{
|
||
// parm[33] = 0;
|
||
parms.write(33, 0);
|
||
displayCase = 810;
|
||
faultNum = 4;
|
||
faultAB = 0;
|
||
faultData = getMotorError();
|
||
if (parm[52] != 0)
|
||
displayCase = 360;
|
||
qualifyFault(33, getMotorError());
|
||
break;
|
||
}
|
||
else
|
||
restoreFault(33);
|
||
if (motorFault)
|
||
{
|
||
parms.write(33, 0);
|
||
displayCase = 810;
|
||
faultNum = 2;
|
||
faultAB = 0;
|
||
faultData = motorFault;
|
||
if (parm[52] != 0)
|
||
displayCase = 360;
|
||
qualifyFault(34, motorFault);
|
||
break;
|
||
}
|
||
else
|
||
restoreFault(34);
|
||
|
||
if (obstructionFault)
|
||
{
|
||
parms.write(33, 0);
|
||
displayCase = 710;
|
||
faultNum = 1;
|
||
faultAB = 0;
|
||
faultData = 0;
|
||
qualifyFault(25, 0);
|
||
if (parm[52] != 0)
|
||
displayCase = 360;
|
||
break;
|
||
}
|
||
else
|
||
restoreFault(25);
|
||
|
||
if (LowBattery() == 1)
|
||
{
|
||
parms.write(33, 0);
|
||
displayCase = 910;
|
||
if (parm[52] != 0)
|
||
displayCase = 360;
|
||
cDOOROPEN = 0;
|
||
cDOORCLOSE = 0;
|
||
cDOORSTOP = 1;
|
||
qualifyFault(2, 0); // push
|
||
break;
|
||
}
|
||
else
|
||
restoreFault(2); // push
|
||
|
||
if (isDoorIdle() == 1)
|
||
if (Timers[SCREENTIMEOUTTIMER] > SCREENTIMEOUT)
|
||
{
|
||
displayCase = 19; // too long
|
||
Timers[SCREENTIMEOUTTIMER] = 0;
|
||
break;
|
||
}
|
||
|
||
displayCase++;
|
||
pingDisplay(displayAddr);
|
||
break;
|
||
|
||
case 27:
|
||
sendingDisplayCase = displayCase;
|
||
if (countLF >= 2) // got our response
|
||
{
|
||
parseXY();
|
||
if ((xxx + yyy) >= 0) // got a touch
|
||
{
|
||
Serial.print(attachedDisplays[displayAddr]);
|
||
if (attachedDisplays[displayAddr] == 2) // 2.4"
|
||
{
|
||
displayCase = 28;
|
||
X_OFFSET = 0;
|
||
Y_OFFSET = 0;
|
||
Serial.println(" 2.4 inch");
|
||
}
|
||
if (attachedDisplays[displayAddr] == 1) // 5"
|
||
{
|
||
displayCase = 528;
|
||
X_OFFSET = 530;
|
||
Y_OFFSET = 95;
|
||
Serial.println(" 5 inch");
|
||
}
|
||
}
|
||
else
|
||
{
|
||
displayCase = 30; // no touch.. ping again
|
||
// displayCase = 200;
|
||
// displaycase = 10; //test
|
||
displayForward = 26;
|
||
cDOOROPEN = 0;
|
||
cDOORCLOSE = 0;
|
||
cDOORSTOP = 0;
|
||
SCREENCLOSE = SCREENOPEN = SCREENSTOP = 0;
|
||
}
|
||
}
|
||
|
||
if (Timers[COMMSREPLYTIMER] > REPLYTIME)
|
||
displayCase = 999; // too long
|
||
break;
|
||
|
||
case 28: // process touch 2.4"
|
||
displayForward = 26;
|
||
displayCase = 30;
|
||
if (parm[54] != 0)
|
||
displayCase = 310;
|
||
|
||
if (parm[3] != 0) // we gotta bug screen
|
||
{
|
||
if (check_TouchBox(0, 118, 0, 132))
|
||
{
|
||
// Serial.println("DOWN Arrow");
|
||
|
||
cDOORCLOSE = 1;
|
||
}
|
||
|
||
if (check_TouchBox(119, 230, 0, 132))
|
||
{
|
||
// Serial.println("UP Arrow");
|
||
|
||
cDOOROPEN = 1;
|
||
}
|
||
|
||
if (check_TouchBox(67, 167, 143, 271))
|
||
{
|
||
// Serial.println("DOOR STOP");
|
||
cDOORSTOP = 1;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
if (check_TouchBox(0, 118, 0, 193))
|
||
{
|
||
// Serial.println("DOWN Arrow");
|
||
|
||
cDOORCLOSE = 1;
|
||
}
|
||
if (check_TouchBox(119, 230, 0, 193))
|
||
{
|
||
// Serial.println("UP Arrow");
|
||
|
||
cDOOROPEN = 1;
|
||
}
|
||
if (check_TouchBox(54, 174, 194, 320))
|
||
{
|
||
// Serial.println("DOOR STOP");
|
||
cDOORSTOP = 1;
|
||
}
|
||
}
|
||
|
||
if (check_TouchBox(12, 80, 273, 303))
|
||
{
|
||
displayText("Screen DOWN");
|
||
if (parm[28] == 0)
|
||
rfSendKey(RF_KEY_DN, myCHAN);
|
||
else
|
||
SCREENCLOSE = 1; // v521
|
||
}
|
||
|
||
if (check_TouchBox(80, 153, 273, 303))
|
||
{
|
||
displayText("Screen STOP");
|
||
|
||
if (parm[28] == 0)
|
||
rfSendKey(RF_KEY_STOP, myCHAN);
|
||
else
|
||
SCREENSTOP = 1; // v521
|
||
}
|
||
|
||
if (check_TouchBox(153, 227, 273, 303))
|
||
{
|
||
displayText("Screen UP");
|
||
if (parm[28] == 0)
|
||
rfSendKey(RF_KEY_UP, myCHAN);
|
||
else
|
||
SCREENOPEN = 1; // v521
|
||
}
|
||
|
||
xxx = yyy = 0;
|
||
break;
|
||
|
||
case 528: // process touch 5"
|
||
displayForward = 26;
|
||
displayCase = 30;
|
||
if (parm[54] != 0)
|
||
displayCase = 310;
|
||
|
||
//*** single door
|
||
if (parm[52] == 0) // single door normal
|
||
{
|
||
if (parm[3] != 0) // we gotta bug screen
|
||
{
|
||
if (check_TouchBox(249, 395, 268, 335)) // 5"
|
||
{
|
||
Serial.println("5 DOWN Arrow");
|
||
cDOORCLOSE = 1;
|
||
}
|
||
if (check_TouchBox(249, 395, 185, 239)) // 5"
|
||
{
|
||
Serial.println("5 UP Arrow");
|
||
cDOOROPEN = 1;
|
||
}
|
||
if (check_TouchBox(249, 395, 358, 426)) // 5"
|
||
{
|
||
Serial.println("5 DOOR STOP");
|
||
cDOORSTOP = 1;
|
||
}
|
||
|
||
// bug screen stuff
|
||
if (check_TouchBox(412, 545, 286, 338)) // 5"
|
||
{
|
||
Serial.println("Screen DOWN");
|
||
if (parm[28] == 0)
|
||
rfSendKey(RF_KEY_DN, myCHAN);
|
||
else
|
||
SCREENCLOSE = 1; // v521
|
||
}
|
||
if (check_TouchBox(412, 545, 363, 418)) // 5"
|
||
{
|
||
Serial.println("Screen STOP");
|
||
if (parm[28] == 0)
|
||
rfSendKey(RF_KEY_STOP, myCHAN);
|
||
else
|
||
SCREENSTOP = 1; // v521
|
||
}
|
||
if (check_TouchBox(412, 545, 200, 264)) // 5"
|
||
{
|
||
Serial.println("Screen UP");
|
||
if (parm[28] == 0)
|
||
rfSendKey(RF_KEY_UP, myCHAN);
|
||
else
|
||
SCREENOPEN = 1; // v521
|
||
}
|
||
}
|
||
else // no bug screen
|
||
{
|
||
if (check_TouchBox(335, 485, 268, 335)) // 5"
|
||
{
|
||
Serial.println("DOWN Arrow");
|
||
cDOORCLOSE = 1;
|
||
}
|
||
if (check_TouchBox(335, 485, 185, 239)) // 5"
|
||
{
|
||
Serial.println("UP Arrow");
|
||
cDOOROPEN = 1;
|
||
}
|
||
if (check_TouchBox(335, 485, 358, 426)) // 5"
|
||
{
|
||
Serial.println("DOOR STOP");
|
||
cDOORSTOP = 1;
|
||
}
|
||
}
|
||
} // end of single door
|
||
|
||
//*** double door
|
||
if (parm[52] == 1) // 2 door master
|
||
{
|
||
if (parm[3] != 0) // we gotta bug screen
|
||
{
|
||
if (check_TouchBox(35, 35 + 163, 259, 259 + 77)) // 5"
|
||
{
|
||
Serial.println("Master 5 DOWN Arrow");
|
||
cDOORCLOSE = 1;
|
||
}
|
||
if (check_TouchBox(35, 35 + 163, 172, 172 + 77)) // 5"
|
||
{
|
||
Serial.println("Master 5 UP Arrow");
|
||
cDOOROPEN = 1;
|
||
}
|
||
if (check_TouchBox(35, 35 + 163, 357, 357 + 77)) // 5"
|
||
{
|
||
Serial.println("Master 5 DOOR STOP");
|
||
cDOORSTOP = 1;
|
||
}
|
||
|
||
// slave door
|
||
if (check_TouchBox(426, 582, 259, 259 + 77)) // 5"
|
||
{
|
||
Serial.println("Slave 5 DOWN Arrow");
|
||
slaveCommand = 4;
|
||
}
|
||
if (check_TouchBox(426, 582, 172, 172 + 77)) // 5"
|
||
{
|
||
Serial.println("Slave 5 UP Arrow");
|
||
slaveCommand = 5;
|
||
}
|
||
if (check_TouchBox(426, 582, 357, 357 + 77)) // 5"
|
||
{
|
||
Serial.println("Slave 5 DOOR STOP");
|
||
slaveCommand = 6;
|
||
}
|
||
|
||
// master's bug screen
|
||
|
||
if (check_TouchBox(218, 218 + 135, 274, 274 + 65)) // 5"
|
||
{
|
||
Serial.println("Master Screen DOWN");
|
||
if (parm[28] == 0)
|
||
rfSendKey(RF_KEY_DN, myCHAN);
|
||
else
|
||
SCREENCLOSE = 1; // v521
|
||
}
|
||
if (check_TouchBox(218, 218 + 135, 351, 351 + 65)) // 5"
|
||
{
|
||
Serial.println("Master Screen STOP");
|
||
if (parm[28] == 0)
|
||
rfSendKey(RF_KEY_STOP, myCHAN);
|
||
else
|
||
SCREENSTOP = 1; // v521
|
||
}
|
||
if (check_TouchBox(218, 218 + 135, 194, 194 + 65)) // 5"
|
||
{
|
||
Serial.println("Master Screen UP");
|
||
if (parm[28] == 0)
|
||
rfSendKey(RF_KEY_UP, myCHAN);
|
||
else
|
||
SCREENOPEN = 1; // v521
|
||
}
|
||
|
||
// slave's bug screen
|
||
if (check_TouchBox(605, 605 + 135, 274, 274 + 65)) // 5"
|
||
{
|
||
Serial.println("Slave Screen DOWN");
|
||
slaveCommand = 1;
|
||
// rfSendKey(RF_KEY_DN, myCHAN + 1);
|
||
// SCREENCLOSE = 1;
|
||
}
|
||
if (check_TouchBox(605, 605 + 135, 351, 351 + 65)) // 5"
|
||
{
|
||
Serial.println("Screen STOP");
|
||
// rfSendKey(RF_KEY_STOP, myCHAN + 1);
|
||
slaveCommand = 2;
|
||
// SCREENSTOP = 1;
|
||
}
|
||
if (check_TouchBox(605, 605 + 135, 194, 194 + 65)) // 5"
|
||
{
|
||
Serial.println("Screen UP");
|
||
// rfSendKey(RF_KEY_UP, myCHAN + 1);
|
||
slaveCommand = 3;
|
||
// SCREENOPEN = 1;
|
||
}
|
||
}
|
||
else // no bug screen
|
||
{
|
||
if (check_TouchBox(128, 284, 268, 335)) // 5"
|
||
{
|
||
Serial.println("Master DOWN Arrow");
|
||
cDOORCLOSE = 1;
|
||
}
|
||
if (check_TouchBox(128, 284, 173, 245)) // 5"
|
||
{
|
||
Serial.println("Master UP Arrow");
|
||
cDOOROPEN = 1;
|
||
}
|
||
if (check_TouchBox(128, 284, 358, 426)) // 5"
|
||
{
|
||
Serial.println("Master DOOR STOP");
|
||
cDOORSTOP = 1;
|
||
}
|
||
|
||
if (check_TouchBox(515, 671, 259, 259 + 77)) // 5"
|
||
{
|
||
Serial.println("Slave DOWN Arrow");
|
||
slaveCommand = 4;
|
||
}
|
||
if (check_TouchBox(515, 671, 172, 172 + 77)) // 5"
|
||
{
|
||
Serial.println("Slave UP Arrow");
|
||
slaveCommand = 5;
|
||
}
|
||
if (check_TouchBox(515, 671, 357, 357 + 77)) // 5"
|
||
{
|
||
Serial.println("Slave DOOR STOP");
|
||
slaveCommand = 6;
|
||
}
|
||
}
|
||
}
|
||
|
||
xxx = yyy = 0;
|
||
break;
|
||
|
||
case 30:
|
||
displayCase = 31;
|
||
if (parm[25] != 0)
|
||
displayCase = 200; // ioExpanders?
|
||
displayForward = 31;
|
||
break;
|
||
|
||
case 31:
|
||
displayCase = 32;
|
||
if (parm[52] != 0)
|
||
displayCase = 350; // slave door?
|
||
displayForward = 32;
|
||
break;
|
||
|
||
case 32:
|
||
displayCase = 26;
|
||
if (parm[54] != 0)
|
||
displayCase = 310; // Lidar?
|
||
displayForward = 26;
|
||
break;
|
||
|
||
/*
|
||
case 29:
|
||
Serial.print(workvariable);
|
||
Serial.print(" Parm 8 = ");
|
||
Serial.println(parm[8]);
|
||
if ((workvariable == parm[8]) || (workvariable == BACKDOOR))
|
||
displayCase = 24;
|
||
else
|
||
displayCase = 0;
|
||
break;
|
||
|
||
|
||
|
||
case 80:
|
||
Serial.println(workvariable);
|
||
Serial.print(" Parm 8 = ");
|
||
Serial.println(parm[8]);
|
||
if ((workvariable == parm[8]) || (workvariable == BACKDOOR))
|
||
displayCase = 39;//multipage change
|
||
else
|
||
displayCase = 0;
|
||
break;
|
||
*/
|
||
|
||
////***** Parms Screens
|
||
#define PARMSPERPAGE 21 // 33 //must be divisable by 3
|
||
|
||
case 39: // multipage change
|
||
displayCase++;
|
||
parmBank = 0;
|
||
break;
|
||
|
||
case 40:
|
||
Timers[SCREENTIMEOUTTIMER] = 0;
|
||
fillDisplay(displayAddr, BLACK_ADI);
|
||
// delay(200);
|
||
displayCase++;
|
||
break;
|
||
|
||
case 41:
|
||
sendingDisplayCase = displayCase;
|
||
if (countLF >= 2) // got our response
|
||
displayCase++;
|
||
|
||
if (Timers[COMMSREPLYTIMER] > REPLYTIME)
|
||
displayCase = 999; // too long
|
||
break;
|
||
|
||
case 42:
|
||
if (attachedDisplays[displayAddr] == 1) // 5 inch
|
||
setTextAttributes(displayAddr, 7, 0, 0, 0, 0, TEAL_ADI, 0);
|
||
else
|
||
setTextAttributes(displayAddr, 3, 0, 0, 0, 0, TEAL_ADI, 0);
|
||
|
||
displayCase++;
|
||
break;
|
||
|
||
case 43:
|
||
if (countLF >= 2) // got our response
|
||
{
|
||
displayCase++;
|
||
}
|
||
parmChoice = 1;
|
||
if (Timers[COMMSREPLYTIMER] > REPLYTIME)
|
||
displayCase = 1; // too long
|
||
break;
|
||
|
||
case 44: // multipage change
|
||
|
||
if (attachedDisplays[displayAddr] == 1) // 5 inch
|
||
sprintf(tmpstr, "%2d# %7d %3d# %7d %3d#%7d",
|
||
parmChoice + (parmBank * PARMSPERPAGE),
|
||
parm[parmChoice + (parmBank * PARMSPERPAGE)],
|
||
parmChoice + (PARMSPERPAGE / 3) + (parmBank * PARMSPERPAGE),
|
||
parm[parmChoice + (PARMSPERPAGE / 3) + (parmBank * PARMSPERPAGE)],
|
||
parmChoice + ((PARMSPERPAGE / 3) * 2) + (parmBank * PARMSPERPAGE),
|
||
parm[parmChoice + ((PARMSPERPAGE / 3) * 2) + (parmBank * PARMSPERPAGE)]);
|
||
else
|
||
sprintf(tmpstr, "%2d#%5d %2d#%5d %2d#%5d",
|
||
parmChoice + (parmBank * 33),
|
||
parm[parmChoice + (parmBank * 33)],
|
||
parmChoice + 11 + (parmBank * 33),
|
||
parm[parmChoice + 11 + (parmBank * 33)],
|
||
parmChoice + 22 + (parmBank * 33),
|
||
parm[parmChoice + 22 + (parmBank * 33)]);
|
||
|
||
#define PARMLINEHEIGHT (380 / (PARMSPERPAGE / 3))
|
||
|
||
if (attachedDisplays[displayAddr] == 1) // 5 inch
|
||
// showDisplayText(displayAddr, 5, ((parmChoice - 1) * 40) + 4, tmpstr);
|
||
showDisplayText(displayAddr, 5, ((parmChoice - 0) * PARMLINEHEIGHT), tmpstr);
|
||
else
|
||
showDisplayText(displayAddr, 5, ((parmChoice - 1) * 27) + 4, tmpstr);
|
||
|
||
displayCase++;
|
||
break;
|
||
|
||
case 45:
|
||
sendingDisplayCase = displayCase;
|
||
if (countLF >= 2) // got our response
|
||
{
|
||
displayCase = 44;
|
||
if (attachedDisplays[displayAddr] == 1) // 5 inch
|
||
{
|
||
if (++parmChoice > (PARMSPERPAGE / 3))
|
||
displayCase = 47;
|
||
}
|
||
else // 2"
|
||
{
|
||
if (++parmChoice > (11))
|
||
displayCase = 47;
|
||
}
|
||
}
|
||
|
||
if (Timers[COMMSREPLYTIMER] > REPLYTIME)
|
||
displayCase = 999; // too long
|
||
break;
|
||
|
||
case 47: // multipage change
|
||
|
||
if (attachedDisplays[displayAddr] == 1) // 5 inch
|
||
{
|
||
switch (parmBank)
|
||
{
|
||
case 0:
|
||
showDisplayText(displayAddr, 150, 442, " EXIT NEXT");
|
||
break;
|
||
|
||
case (PARMSIZE / PARMSPERPAGE):
|
||
showDisplayText(displayAddr, 150, 442, " PREV EXIT ");
|
||
break;
|
||
|
||
default:
|
||
showDisplayText(displayAddr, 150, 442, " PREV EXIT NEXT");
|
||
break;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
if (parmBank == 0)
|
||
showDisplayText(displayAddr, 110, 300 - 2, "EXIT NEXT");
|
||
else
|
||
showDisplayText(displayAddr, 110, 300 - 2, "EXIT PREV");
|
||
}
|
||
|
||
displayCase++;
|
||
break;
|
||
|
||
case 48:
|
||
sendingDisplayCase = displayCase;
|
||
if (countLF >= 2) // got our response
|
||
displayCase++;
|
||
if (Timers[COMMSREPLYTIMER] > REPLYTIME)
|
||
displayCase = 999; // too long
|
||
break;
|
||
|
||
case 49:
|
||
displayCase = 50;
|
||
if (attachedDisplays[displayAddr] == 1) // 5 inch
|
||
displayCase = 550;
|
||
|
||
pingDisplay(displayAddr);
|
||
break;
|
||
|
||
case 50:
|
||
sendingDisplayCase = displayCase;
|
||
if (countLF >= 2) // got our response
|
||
{
|
||
parseXY();
|
||
displayCase = 49;
|
||
|
||
if ((xxx + yyy) >= 0) // got a valid touch
|
||
{
|
||
if (yyy < 298) // v115
|
||
{
|
||
parmChoice = (yyy / 27); // v117
|
||
|
||
parmChoice++;
|
||
|
||
if (xxx > 87)
|
||
parmChoice += 11;
|
||
if (xxx > 162)
|
||
parmChoice += 11;
|
||
|
||
parmChoice = parmChoice + (parmBank * 33); // multipage
|
||
|
||
Serial.print("Parm: ");
|
||
Serial.println(parmChoice);
|
||
displayCase = 60; // go to numberpad
|
||
displayForward = 164;
|
||
}
|
||
else // Exit
|
||
{
|
||
if (xxx < 160)
|
||
{
|
||
displayCase = 0; // EXIT
|
||
Serial.println("Exit to LOGO");
|
||
}
|
||
if (xxx >= 160) // NEXT PREV
|
||
{
|
||
displayCase = 40;
|
||
if (parmBank == 0)
|
||
parmBank = 1;
|
||
else
|
||
parmBank = 0; // toggle it //multipage
|
||
}
|
||
}
|
||
}
|
||
}
|
||
if (Timers[COMMSREPLYTIMER] > REPLYTIME)
|
||
displayCase = 999; // too long
|
||
break;
|
||
|
||
case 550: // 5"
|
||
sendingDisplayCase = displayCase;
|
||
if (countLF >= 2) // got our response
|
||
{
|
||
parseXY();
|
||
displayCase = 49;
|
||
|
||
if ((xxx + yyy) >= 0) // got a valid touch
|
||
{
|
||
if (yyy < 420) // parm area
|
||
{
|
||
if (yyy > 20)
|
||
{
|
||
parmChoice = ((yyy - 20) / PARMLINEHEIGHT);
|
||
|
||
parmChoice++;
|
||
|
||
if (xxx > 268)
|
||
parmChoice += (PARMSPERPAGE / 3);
|
||
if (xxx > (268 * 2))
|
||
parmChoice += (PARMSPERPAGE / 3);
|
||
|
||
parmChoice = parmChoice + (parmBank * PARMSPERPAGE); // multipage
|
||
|
||
Serial.print("Parm: ");
|
||
Serial.println(parmChoice);
|
||
if (parmChoice < PARMSIZE)
|
||
{
|
||
displayCase = 60; // go to numberpad
|
||
displayForward = 164;
|
||
}
|
||
}
|
||
}
|
||
|
||
else // prev/exit/next area
|
||
{
|
||
if (xxx > 270)
|
||
if (xxx < (800 - 270))
|
||
{
|
||
displayCase = 0; // EXIT
|
||
Serial.println("Exit to LOGO");
|
||
}
|
||
|
||
if (parmBank < ((PARMSIZE / PARMSPERPAGE)))
|
||
if (xxx >= (800 - 270)) // NEXT
|
||
{
|
||
displayCase = 40;
|
||
parmBank++; // toggle it //multipage
|
||
}
|
||
|
||
if (xxx < (270)) // PREV
|
||
{
|
||
displayCase = 40;
|
||
if (parmBank > 0)
|
||
parmBank--;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
if (Timers[COMMSREPLYTIMER] > REPLYTIME)
|
||
displayCase = 999; // too long
|
||
break;
|
||
|
||
//****NUMBERPAD Screens
|
||
case 60:
|
||
Timers[SCREENTIMEOUTTIMER] = 0;
|
||
|
||
showDisplayGraphic(displayAddr, 0, 0, NUMBERPAD, 0, 0);
|
||
|
||
if (attachedDisplays[displayAddr] == 2) // V996
|
||
{ // 2.4" screen
|
||
// showDisplayGraphic(displayAddr, 0, 0, NUMBERPAD, 0, 0);
|
||
X_OFFSET = 0;
|
||
Y_OFFSET = 0;
|
||
}
|
||
else
|
||
{
|
||
// showDisplayGraphic(displayAddr, 0, 0, NUMBERPAD5, 0, 0);
|
||
X_OFFSET = 530;
|
||
Y_OFFSET = 95;
|
||
}
|
||
|
||
displayCase++;
|
||
break;
|
||
|
||
case 61:
|
||
sendingDisplayCase = displayCase;
|
||
if (countLF >= 2) // got our response
|
||
displayCase++;
|
||
// Serial.println(instr);
|
||
if (Timers[COMMSREPLYTIMER] > (REPLYTIME * 3))
|
||
displayCase = 999; // too long
|
||
break;
|
||
|
||
case 62:
|
||
setTextAttributes(displayAddr, 5, 0, 0, 0, BLACK_ADI, WHITE_ADI, 0);
|
||
displayCase++;
|
||
break;
|
||
|
||
case 63:
|
||
sendingDisplayCase = displayCase;
|
||
if (countLF >= 2) // got our response
|
||
displayCase++;
|
||
if (Timers[COMMSREPLYTIMER] > REPLYTIME)
|
||
displayCase = 999; // too long
|
||
break;
|
||
|
||
case 64:
|
||
if (parmChoice > 0) // parm entry
|
||
sprintf(tmpstr, "#%d", parmChoice);
|
||
else // number entry
|
||
sprintf(tmpstr, ">");
|
||
|
||
if (attachedDisplays[displayAddr] == 1) // 5"
|
||
showDisplayText(displayAddr, 462, 28, tmpstr);
|
||
else
|
||
showDisplayText(displayAddr, 15, 13, tmpstr);
|
||
|
||
displayCase++;
|
||
break;
|
||
|
||
case 65:
|
||
sendingDisplayCase = displayCase;
|
||
workvariable = 0;
|
||
if (countLF >= 2) // got our response
|
||
displayCase++;
|
||
if (Timers[COMMSREPLYTIMER] > REPLYTIME)
|
||
displayCase = 999; // too long
|
||
break;
|
||
|
||
case 66:
|
||
displayCase++;
|
||
pingDisplay(displayAddr);
|
||
break;
|
||
|
||
case 67:
|
||
sendingDisplayCase = displayCase;
|
||
if (countLF >= 2) // got our response
|
||
{
|
||
parseXY();
|
||
displayCase = 66;
|
||
|
||
if ((xxx + yyy) >= 0) // got a valid touch
|
||
{
|
||
displayCase = 68;
|
||
if (attachedDisplays[displayAddr] == 1) // 5"
|
||
{
|
||
if (check_TouchBox(440, 557, 64, 146))
|
||
workvariable = (workvariable * 10) + 7;
|
||
if (check_TouchBox(557, 672, 64, 146))
|
||
workvariable = (workvariable * 10) + 8;
|
||
if (check_TouchBox(672, 786, 64, 146))
|
||
workvariable = (workvariable * 10) + 9;
|
||
if (check_TouchBox(440, 557, 146, 229))
|
||
workvariable = (workvariable * 10) + 4;
|
||
if (check_TouchBox(557, 672, 146, 229))
|
||
workvariable = (workvariable * 10) + 5;
|
||
if (check_TouchBox(672, 786, 146, 229))
|
||
workvariable = (workvariable * 10) + 6;
|
||
if (check_TouchBox(440, 557, 229, 308))
|
||
workvariable = (workvariable * 10) + 1;
|
||
if (check_TouchBox(557, 672, 229, 308))
|
||
workvariable = (workvariable * 10) + 2;
|
||
if (check_TouchBox(672, 786, 229, 308))
|
||
workvariable = (workvariable * 10) + 3;
|
||
if (check_TouchBox(557, 672, 308, 391))
|
||
workvariable = (workvariable * 10) + 0;
|
||
if (check_TouchBox(672, 786, 308, 391))
|
||
workvariable = (workvariable * -1);
|
||
if (check_TouchBox(440, 557, 308, 391))
|
||
workvariable = (workvariable /= 10);
|
||
|
||
if (check_TouchBox(440, 672, 391, 469)) // ENTER
|
||
{
|
||
displayCase = displayForward;
|
||
}
|
||
|
||
if (check_TouchBox(672, 786, 391, 469)) // Exit
|
||
{
|
||
displayCase = displayForward + 1;
|
||
}
|
||
}
|
||
else // 2"
|
||
{
|
||
if (check_TouchBox(0 + X_OFFSET, 72 + X_OFFSET, 40 + Y_OFFSET, 98 + Y_OFFSET))
|
||
workvariable = (workvariable * 10) + 7;
|
||
if (check_TouchBox(73 + X_OFFSET, 154 + X_OFFSET, 40 + Y_OFFSET, 98 + Y_OFFSET))
|
||
workvariable = (workvariable * 10) + 8;
|
||
if (check_TouchBox(155 + X_OFFSET, 240 + X_OFFSET, 40 + Y_OFFSET, 98 + Y_OFFSET))
|
||
workvariable = (workvariable * 10) + 9;
|
||
if (check_TouchBox(0 + X_OFFSET, 72 + X_OFFSET, 98 + Y_OFFSET, 154 + Y_OFFSET))
|
||
workvariable = (workvariable * 10) + 4;
|
||
if (check_TouchBox(73 + X_OFFSET, 154 + X_OFFSET, 98 + Y_OFFSET, 154 + Y_OFFSET))
|
||
workvariable = (workvariable * 10) + 5;
|
||
if (check_TouchBox(155 + X_OFFSET, 240 + X_OFFSET, 98 + Y_OFFSET, 154 + Y_OFFSET))
|
||
workvariable = (workvariable * 10) + 6;
|
||
if (check_TouchBox(0 + X_OFFSET, 72 + X_OFFSET, 154 + Y_OFFSET, 210 + Y_OFFSET))
|
||
workvariable = (workvariable * 10) + 1;
|
||
if (check_TouchBox(73 + X_OFFSET, 154 + X_OFFSET, 154 + Y_OFFSET, 210 + Y_OFFSET))
|
||
workvariable = (workvariable * 10) + 2;
|
||
if (check_TouchBox(154 + X_OFFSET, 240 + X_OFFSET, 154 + Y_OFFSET, 210 + Y_OFFSET))
|
||
workvariable = (workvariable * 10) + 3;
|
||
if (check_TouchBox(73 + X_OFFSET, 154 + X_OFFSET, 211 + Y_OFFSET, 264 + Y_OFFSET))
|
||
workvariable = (workvariable * 10) + 0;
|
||
|
||
if (check_TouchBox(154 + X_OFFSET, 240 + X_OFFSET, 211 + Y_OFFSET, 264 + Y_OFFSET))
|
||
workvariable = (workvariable * -1);
|
||
if (check_TouchBox(0 + X_OFFSET, 72 + X_OFFSET, 211 + Y_OFFSET, 264 + Y_OFFSET))
|
||
workvariable = (workvariable /= 10);
|
||
|
||
if (check_TouchBox(1 + X_OFFSET, 153 + X_OFFSET, 264 + Y_OFFSET, 319 + Y_OFFSET)) // ENTER
|
||
{
|
||
displayCase = displayForward;
|
||
}
|
||
|
||
if (check_TouchBox(154 + X_OFFSET, 240 + X_OFFSET, 264 + Y_OFFSET, 319 + Y_OFFSET)) // Exit
|
||
{
|
||
displayCase = displayForward + 1;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
if (Timers[COMMSREPLYTIMER] > REPLYTIME)
|
||
displayCase = 999; // too long
|
||
if (Timers[SCREENTIMEOUTTIMER] > SCREENTIMEOUT)
|
||
displayCase = 999; // v525 too long, no activity
|
||
|
||
break;
|
||
|
||
case 266: // go here to wait for touch release
|
||
displayCase++;
|
||
pingDisplay(displayAddr);
|
||
break;
|
||
|
||
case 267:
|
||
// sendingDisplayCase = displayCase;
|
||
if (countLF >= 2) // got our response
|
||
{
|
||
parseXY();
|
||
if ((xxx + yyy) >= 0) // or got a valid touch
|
||
displayCase = 266;
|
||
else
|
||
displayCase = 66;
|
||
}
|
||
if (Timers[COMMSREPLYTIMER] > REPLYTIME)
|
||
displayCase = 999; // too long
|
||
if (Timers[SCREENTIMEOUTTIMER] > SCREENTIMEOUT)
|
||
displayCase = 999; // v525 too long, no activity
|
||
|
||
break;
|
||
|
||
case 68:
|
||
Timers[SCREENTIMEOUTTIMER] = 0;
|
||
|
||
if (attachedDisplays[displayAddr] == 1) // 5"
|
||
showDisplayRectangle(displayAddr, 1, 510, 20, 140, 20, 1, BLACK_ADI, 1);
|
||
else // 2"
|
||
showDisplayRectangle(displayAddr, 1, 88, 13, 140, 20, 1, BLACK_ADI, 1);
|
||
|
||
displayCase++;
|
||
break;
|
||
|
||
case 69:
|
||
sendingDisplayCase = displayCase;
|
||
|
||
if (countLF >= 2) // got our response
|
||
displayCase++;
|
||
|
||
if (Timers[COMMSREPLYTIMER] > REPLYTIME)
|
||
displayCase = 999; // too long
|
||
break;
|
||
|
||
case 70:
|
||
sprintf(tmpstr, "%10d", workvariable);
|
||
|
||
if (attachedDisplays[displayAddr] == 1) // 5"
|
||
showDisplayText(displayAddr, 584, 28, tmpstr);
|
||
else // 2"
|
||
showDisplayText(displayAddr, 95, 13, tmpstr);
|
||
displayCase = 267;
|
||
break;
|
||
|
||
//***** Numpad Landing Screens
|
||
|
||
// access entry
|
||
case 160: // enter
|
||
displayCase = 0;
|
||
if ((parm[8] == workvariable) || (workvariable == BACKDOOR))
|
||
displayCase = 90;
|
||
break;
|
||
case 161: // exit
|
||
displayCase = 0;
|
||
break;
|
||
|
||
// access run door
|
||
case 162: // enter
|
||
displayCase = 0;
|
||
if ((parm[8] == workvariable) || (workvariable == BACKDOOR))
|
||
displayCase = 24;
|
||
break;
|
||
case 163: // exit
|
||
displayCase = 0;
|
||
break;
|
||
|
||
// parm change
|
||
case 164: // enter
|
||
displayCase = 40;
|
||
|
||
if ((parmChoice == 30) || (parmChoice == 31) || (parmChoice == 32)) // virtual writes
|
||
{
|
||
parms.write(parmChoice, workvariable);
|
||
if (parmChoice == 32)
|
||
displayCase = 300; // send it
|
||
}
|
||
else // not virtual write
|
||
{
|
||
parms.write(parmChoice, workvariable);
|
||
}
|
||
break;
|
||
|
||
case 165: // exit
|
||
displayCase = 40;
|
||
break;
|
||
|
||
case 166: // enter
|
||
displayCase = 159;
|
||
parms.write(parmChoice, workvariable);
|
||
break;
|
||
|
||
case 167: // exit
|
||
displayCase = 159;
|
||
break;
|
||
|
||
//***** Config Screen
|
||
|
||
case 90:
|
||
Timers[SCREENTIMEOUTTIMER] = 0;
|
||
if (attachedDisplays[displayAddr] == 1) // 5 inch
|
||
showDisplayGraphic(displayAddr, 0, 0, CONFIGSCREEN5, 0, 0);
|
||
else
|
||
showDisplayGraphic(displayAddr, 0, 0, CONFIGSCREEN2, 0, 0);
|
||
displayCase++;
|
||
delay(1000); // getting double presses
|
||
break;
|
||
|
||
case 91:
|
||
sendingDisplayCase = displayCase;
|
||
if (countLF >= 2) // got our response
|
||
displayCase++;
|
||
if (Timers[COMMSREPLYTIMER] > (REPLYTIME * 3))
|
||
displayCase = 999; // too long
|
||
break;
|
||
|
||
case 92:
|
||
displayCase++;
|
||
pingDisplay(displayAddr);
|
||
|
||
break;
|
||
|
||
case 93:
|
||
sendingDisplayCase = displayCase;
|
||
if (countLF >= 2) // got our response
|
||
{
|
||
parseXY();
|
||
displayCase = 92;
|
||
|
||
if ((xxx + yyy) >= 0) // got a valid touch
|
||
{
|
||
// displayCase = 0;//v515
|
||
|
||
if (attachedDisplays[displayAddr] == 1) // 5 inch
|
||
{
|
||
Serial.println("5 inch display");
|
||
if (check_TouchBox(257, 225 + 293, 28, 28 + 59)) // parms button
|
||
{
|
||
displayCase = 39;
|
||
Serial.println("Parms Button");
|
||
|
||
parmChoice = -1;
|
||
}
|
||
if (check_TouchBox(257, 225 + 293, 105, 105 + 105)) // learn-level open button
|
||
{
|
||
displayCase = 92;
|
||
|
||
parms.write(48, motorGetPosition(0) - motorGetPosition(1));
|
||
parms.write(40, motorGetPosition(0));
|
||
Serial.printf("Learn Level P48 = %d, P40 = %d", parm[48], parm[40]);
|
||
}
|
||
if (check_TouchBox(257, 225 + 293, 231, 231 + 59)) // learn-close button
|
||
{
|
||
displayCase = 92;
|
||
Serial.println("Learn Close");
|
||
parms.write(39, motorGetPosition(0));
|
||
}
|
||
if (check_TouchBox(257, 225 + 293, 312, 312 + 49)) // fenetex pgm button
|
||
{
|
||
displayCase = 92;
|
||
displayText("Learn Fenetex");
|
||
rfSendKey(RF_KEY_PROG, myCHAN);
|
||
lidarLearn = 1;
|
||
}
|
||
|
||
// 515 add
|
||
if (check_TouchBox(257, 225 + 293, 393, 393 + 49)) // exit
|
||
{
|
||
displayCase = 0;
|
||
Serial.println("Exit");
|
||
}
|
||
}
|
||
else // 2 inch
|
||
{
|
||
|
||
Serial.println("2 inch display");
|
||
if (check_TouchBox(22, 22 + 195, 17, 17 + 39)) // parms button
|
||
{
|
||
displayCase = 39;
|
||
Serial.println("Parms Button");
|
||
|
||
// displayCase = 60;
|
||
// displayForward = 80;
|
||
parmChoice = -1;
|
||
}
|
||
|
||
if (check_TouchBox(22, 22 + 195, 68, 68 + 70)) // learn-level button
|
||
{
|
||
displayCase = 92;
|
||
|
||
parms.write(48, motorGetPosition(0) - motorGetPosition(1));
|
||
parms.write(40, motorGetPosition(0));
|
||
Serial.printf("Learn Level P48 = %d, P40 = %d", parm[48], parm[40]);
|
||
}
|
||
if (check_TouchBox(22, 22 + 195, 152, 152 + 39)) // learn-close button
|
||
{
|
||
displayCase = 92;
|
||
Serial.println("Learn Close");
|
||
parms.write(39, motorGetPosition(0));
|
||
}
|
||
if (check_TouchBox(22, 22 + 195, 206, 206 + 39)) // fenetex pgm button
|
||
{
|
||
displayCase = 92;
|
||
Serial.println("Learn Fenetex");
|
||
rfSendKey(RF_KEY_PROG, myCHAN);
|
||
lidarLearn = 1;
|
||
}
|
||
// 515 add
|
||
if (check_TouchBox(22, 22 + 195, 263, 263 + 39)) // exit
|
||
{
|
||
displayCase = 0;
|
||
Serial.println("Exit");
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
if (Timers[COMMSREPLYTIMER] > REPLYTIME)
|
||
displayCase = 999; // too long
|
||
break;
|
||
|
||
////***** Setup Screens
|
||
|
||
case 140:
|
||
Timers[SCREENTIMEOUTTIMER] = 0;
|
||
fillDisplay(displayAddr, BLACK_ADI);
|
||
// delay(200);
|
||
displayCase++;
|
||
break;
|
||
|
||
case 141:
|
||
sendingDisplayCase = displayCase;
|
||
if (countLF >= 2) // got our response
|
||
displayCase++;
|
||
if (Timers[COMMSREPLYTIMER] > REPLYTIME)
|
||
displayCase = 999; // too long
|
||
break;
|
||
|
||
case 142:
|
||
setTextAttributes(1, 5, 0, 0, 0, 0, TEAL_ADI, 0);
|
||
displayCase++;
|
||
break;
|
||
|
||
case 143:
|
||
sendingDisplayCase = displayCase;
|
||
if (countLF >= 2) // got our response
|
||
displayCase++;
|
||
if (Timers[COMMSREPLYTIMER] > REPLYTIME)
|
||
displayCase = 999; // too long
|
||
break;
|
||
|
||
//***first question
|
||
|
||
case 144:
|
||
sprintf(tmpstr, "Bug Screen? Y / N");
|
||
// sprintf(tmpstr, "Shade/Scrn? Y / N");
|
||
showDisplayText(1, 5, 30, tmpstr);
|
||
displayCase++;
|
||
break;
|
||
|
||
case 145:
|
||
sendingDisplayCase = displayCase;
|
||
if (countLF >= 2) // got our response
|
||
displayCase++;
|
||
if (Timers[COMMSREPLYTIMER] > REPLYTIME)
|
||
displayCase = 999; // too long
|
||
break;
|
||
|
||
case 146:
|
||
displayCase++;
|
||
pingDisplay(1);
|
||
|
||
break;
|
||
|
||
case 147:
|
||
sendingDisplayCase = displayCase;
|
||
if (countLF >= 2) // got our response
|
||
{
|
||
parseXY();
|
||
displayCase = 146;
|
||
|
||
if ((xxx + yyy) >= 0) // got a valid touch
|
||
{
|
||
if (check_TouchBox(156, 189, 25, 60)) // yes
|
||
{
|
||
displayCase = 148;
|
||
parms.write(3, 5);
|
||
}
|
||
if (check_TouchBox(190, 240, 25, 60)) // NO
|
||
{
|
||
displayCase = 148;
|
||
parms.write(3, 0);
|
||
}
|
||
}
|
||
}
|
||
if (Timers[COMMSREPLYTIMER] > REPLYTIME)
|
||
displayCase = 999; // too long
|
||
break;
|
||
|
||
//***** second question
|
||
case 148:
|
||
// sprintf(tmpstr, "Bug Screen? Y / N");
|
||
sprintf(tmpstr, "Gasket? Y / N");
|
||
showDisplayText(1, 5, 70, tmpstr);
|
||
displayCase++;
|
||
break;
|
||
|
||
case 149:
|
||
sendingDisplayCase = displayCase;
|
||
if (countLF >= 2) // got our response
|
||
displayCase++;
|
||
if (Timers[COMMSREPLYTIMER] > REPLYTIME)
|
||
displayCase = 999; // too long
|
||
break;
|
||
|
||
case 150:
|
||
displayCase++;
|
||
pingDisplay(1);
|
||
|
||
break;
|
||
|
||
case 151:
|
||
sendingDisplayCase = displayCase;
|
||
if (countLF >= 2) // got our response
|
||
{
|
||
parseXY();
|
||
displayCase = 150;
|
||
|
||
if ((xxx + yyy) >= 0) // got a valid touch
|
||
{
|
||
if (check_TouchBox(156, 189, 70, 100)) // yes
|
||
{
|
||
displayCase = 152;
|
||
parms.write(2, 15);
|
||
parms.write(12, 1);
|
||
}
|
||
if (check_TouchBox(190, 240, 70, 100)) // NO
|
||
{
|
||
displayCase = 152;
|
||
parms.write(2, 0);
|
||
parms.write(12, 1);
|
||
}
|
||
}
|
||
}
|
||
if (Timers[COMMSREPLYTIMER] > REPLYTIME)
|
||
displayCase = 999; // too long
|
||
break;
|
||
|
||
//***** third question
|
||
case 152:
|
||
// sprintf(tmpstr, "Bug Screen? Y / N");
|
||
sprintf(tmpstr, "Security ? Y / N");
|
||
showDisplayText(1, 5, 110, tmpstr);
|
||
displayCase++;
|
||
break;
|
||
|
||
case 153:
|
||
sendingDisplayCase = displayCase;
|
||
if (countLF >= 2) // got our response
|
||
displayCase++;
|
||
if (Timers[COMMSREPLYTIMER] > REPLYTIME)
|
||
displayCase = 999; // too long
|
||
break;
|
||
|
||
case 154:
|
||
displayCase++;
|
||
pingDisplay(1);
|
||
|
||
break;
|
||
|
||
case 155:
|
||
sendingDisplayCase = displayCase;
|
||
if (countLF >= 2) // got our response
|
||
{
|
||
parseXY();
|
||
displayCase = 154;
|
||
|
||
if ((xxx + yyy) >= 0) // got a valid touch
|
||
{
|
||
if (check_TouchBox(156, 189, 110, 140)) // yes
|
||
{
|
||
parmChoice = 8;
|
||
displayForward = 166; // 159;
|
||
displayCase = 60; // numberpad
|
||
parms.write(12, 1);
|
||
}
|
||
if (check_TouchBox(190, 240, 110, 140)) // NO
|
||
{
|
||
displayCase = 159;
|
||
parms.write(8, 0);
|
||
parms.write(12, 1);
|
||
}
|
||
}
|
||
}
|
||
if (Timers[COMMSREPLYTIMER] > REPLYTIME)
|
||
displayCase = 999; // too long
|
||
break;
|
||
|
||
case 159: // outta here
|
||
displayCase = 12;
|
||
break;
|
||
|
||
//****** ioExpander Pings v125
|
||
case 200:
|
||
exIndx = 0;
|
||
displayCase++;
|
||
break;
|
||
|
||
case 201:
|
||
displayCase++;
|
||
exIndx++;
|
||
|
||
if (exIndx > parm[25])
|
||
{
|
||
displayCase = displayForward; // done with io
|
||
if (VB)
|
||
Serial.println("Done with exIO");
|
||
}
|
||
break;
|
||
|
||
case 202:
|
||
// make the byte
|
||
i = exRly[((exIndx - 1) * 4) + 0];
|
||
i |= (exRly[((exIndx - 1) * 4) + 1] * 2);
|
||
i |= (exRly[((exIndx - 1) * 4) + 2] * 4);
|
||
i |= (exRly[((exIndx - 1) * 4) + 3] * 8);
|
||
|
||
c_send(99, 170 + exIndx, i, 3, exParmIndx + 114);
|
||
displayCase++;
|
||
break;
|
||
|
||
case 203:
|
||
sendingDisplayCase = displayCase;
|
||
if (indx >= 16)
|
||
if (comms8Csum(&instr[10], 6, 0) == instr[15]) // csum ok
|
||
{
|
||
displayCase = 201;
|
||
// Serial.print("InByte: ");Serial.println(instr[13]);
|
||
|
||
for (i = 0; i < 4; i++) // v518
|
||
{
|
||
exOptoTransition[i] = 0;
|
||
if (exOpto[((exIndx - 1) * 4) + i] == 0) // off last time
|
||
if (bitRead(instr[13], i) != 0) // on this time
|
||
exOptoTransition[i] = 1; // set transition
|
||
|
||
exOpto[((exIndx - 1) * 4) + i] = bitRead(instr[13], i);
|
||
}
|
||
|
||
/* v1518
|
||
exOpto[((exIndx - 1) * 4) + 0] = bitRead(instr[13], 0);
|
||
exOpto[((exIndx - 1) * 4) + 1] = bitRead(instr[13], 1);
|
||
exOpto[((exIndx - 1) * 4) + 2] = bitRead(instr[13], 2);
|
||
exOpto[((exIndx - 1) * 4) + 3] = bitRead(instr[13], 3);
|
||
*/
|
||
|
||
i = instr[14]; // get some data via parms
|
||
i *= 8;
|
||
i += instr[12];
|
||
|
||
if (exParmIndx < 12) // valid parm number
|
||
{
|
||
exParm[exParmIndx] = i;
|
||
}
|
||
|
||
if (++exParmIndx > 11)
|
||
exParmIndx = 0;
|
||
}
|
||
else // bad csum
|
||
{
|
||
Serial.println("Bad CSUM");
|
||
displayCase = 999; // error
|
||
}
|
||
|
||
if (Timers[COMMSREPLYTIMER] > REPLYTIME)
|
||
{
|
||
displayCase = 0; // error
|
||
Serial.print("**** Receive Error ioEx: ");
|
||
Serial.print(exIndx);
|
||
Serial.print(" Indx: ");
|
||
Serial.println(indx);
|
||
}
|
||
break;
|
||
|
||
//************* Config Lidar parms
|
||
case 300:
|
||
exIndx = 0;
|
||
displayCase++;
|
||
break;
|
||
|
||
case 301:
|
||
c_send(6, LIDARADDRESS, parm[55 + exIndx] & 0xff, 2 + exIndx, parm[55 + exIndx] >> 8);
|
||
Serial.printf("Sending local parm# %d (%d)to Lidar parm# %d ->", 55 + exIndx, parm[55 + exIndx], 2 + exIndx);
|
||
displayCase++;
|
||
break;
|
||
|
||
case 302:
|
||
sendingDisplayCase = displayCase;
|
||
if (indx >= 16)
|
||
if (comms8Csum(&instr[10], 6, 0) == instr[15]) // csum ok
|
||
{
|
||
Serial.println("OK");
|
||
displayCase = 301;
|
||
exIndx++;
|
||
if (exIndx >= 6)
|
||
displayCase = 303;
|
||
}
|
||
else // bad csum
|
||
{
|
||
Serial.println("Bad CSUM");
|
||
displayCase = 999; // error
|
||
}
|
||
|
||
if (Timers[COMMSREPLYTIMER] > REPLYTIME)
|
||
{
|
||
displayCase = 0; // error
|
||
Serial.printf("**** Receive Timeout Lidar: %d Indx: %d\n", exIndx, indx);
|
||
}
|
||
break;
|
||
|
||
case 303: // all done
|
||
displayCase = 3;
|
||
break;
|
||
|
||
//***************Check Lidar for obstruction
|
||
|
||
case 310:
|
||
displayCase++;
|
||
break;
|
||
|
||
case 311:
|
||
if (isDoorIdle())
|
||
{
|
||
c_send(1, LIDARADDRESS, 0, 0, 0); // turn off
|
||
Timers[LIDARTIMER] = -1;
|
||
}
|
||
else
|
||
{
|
||
c_send(1, LIDARADDRESS, 75, 0, 0); // turn on
|
||
if (Timers[LIDARTIMER] < 0)
|
||
Timers[LIDARTIMER] = 1;
|
||
}
|
||
displayCase++;
|
||
break;
|
||
|
||
case 312:
|
||
sendingDisplayCase = displayCase;
|
||
if (indx >= 16)
|
||
if (comms8Csum(&instr[10], 6, 0) == instr[15]) // csum ok
|
||
{
|
||
// displayCase = 13;
|
||
displayCase = displayForward;
|
||
|
||
if (Timers[LIDARTIMER] > 15)
|
||
{
|
||
Serial.println("-");
|
||
if (instr[13] != 0)
|
||
{
|
||
lidarObstruction = 1;
|
||
int ii = instr[14];
|
||
ii << 8;
|
||
ii += instr[12];
|
||
|
||
Serial.println("****");
|
||
|
||
sprintf(tmpstr, "LIDAR A%d D%d P%d", ii, instr[13], motorGetPosition(0));
|
||
displayText(String(tmpstr));
|
||
Timers[OLEDHOLDTIMER] = 1;
|
||
|
||
Serial.println("****");
|
||
displayCase = 313;
|
||
}
|
||
}
|
||
}
|
||
else // bad csum
|
||
{
|
||
Serial.println("Bad CSUM");
|
||
displayCase = 999; // error
|
||
}
|
||
|
||
if (Timers[COMMSREPLYTIMER] > REPLYTIME)
|
||
{
|
||
displayCase = 0; // error
|
||
Serial.printf("**** Receive Error Lidar\n");
|
||
}
|
||
break;
|
||
|
||
case 313: // Lidar stop
|
||
c_send(1, LIDARADDRESS, 0, 0, 0); // turn off
|
||
// Timers[LIDARTIMER] = -1; // remove v530
|
||
|
||
displayCase++;
|
||
break;
|
||
|
||
case 314:
|
||
if (indx >= 16)
|
||
displayCase = displayForward;
|
||
|
||
if (Timers[COMMSREPLYTIMER] > REPLYTIME)
|
||
{
|
||
displayCase = 0; // error
|
||
|
||
Serial.printf("**** Receive Error Lidar\n");
|
||
}
|
||
break;
|
||
|
||
case 315: // Lidar learn
|
||
c_send(100, LIDARADDRESS, 75, 0, 10);
|
||
Serial.println("-> Learn Lidar Command");
|
||
lidarLearn = 0;
|
||
displayCase++;
|
||
break;
|
||
|
||
case 316:
|
||
if (indx >= 16)
|
||
displayCase = 14;
|
||
|
||
if (Timers[COMMSREPLYTIMER] > REPLYTIME)
|
||
{
|
||
displayCase = 0; // error
|
||
Serial.printf("**** Receive Error Lidar\n");
|
||
}
|
||
break;
|
||
|
||
//***************Check slave motor
|
||
|
||
case 350:
|
||
displayCase++;
|
||
// break;
|
||
|
||
case 351:
|
||
c_send(10, 100, slaveCommand, 0, wiFiOK); //
|
||
if (VB)
|
||
Serial.printf("Slave poll wiFiOK -> %d\n", wiFiOK);
|
||
slaveCommand = 0;
|
||
displayCase++;
|
||
break;
|
||
|
||
case 352:
|
||
sendingDisplayCase = displayCase;
|
||
if (indx >= 16)
|
||
if (comms8Csum(&instr[10], 6, 0) == instr[15]) // csum ok
|
||
{
|
||
displayCase = displayForward;
|
||
if (instr[13] != 0) // status coming back from slave
|
||
{
|
||
faultNum = instr[13];
|
||
faultData = ((instr[14] << 8) + instr[12]);
|
||
faultAB = 1; // slave
|
||
|
||
Serial.printf("\nSlave Fault = %d, Motor = %d Data = %d\n\n", faultNum, faultAB, faultData);
|
||
displayCase = 360;
|
||
}
|
||
// check response for slave status
|
||
}
|
||
else // bad csum
|
||
{
|
||
Serial.println("Bad Slave CSUM");
|
||
displayCase = 999; // error
|
||
}
|
||
|
||
if (Timers[COMMSREPLYTIMER] > REPLYTIME)
|
||
{
|
||
displayCase = 0; // error
|
||
displayText("Slave Timeout");
|
||
delay(2000);
|
||
Serial.printf("**** Receive timeout Slave\n");
|
||
}
|
||
break;
|
||
|
||
//****Fault Screens
|
||
case 360: // a little time to clear it out
|
||
displayCase++;
|
||
break;
|
||
|
||
case 361:
|
||
displayCase++;
|
||
break;
|
||
|
||
case 362:
|
||
Timers[SCREENTIMEOUTTIMER] = 0;
|
||
showDisplayRectangle(displayAddr, 1, 20 + 20, 10, 800 - 80, 87, 1, RED_ADI, 10); // 2-door
|
||
// Serial.println("displayed rectangle");
|
||
displayCase++;
|
||
break;
|
||
|
||
case 363:
|
||
sendingDisplayCase = displayCase;
|
||
if (countLF >= 2) // got our response
|
||
displayCase++;
|
||
if (Timers[COMMSREPLYTIMER] > REPLYTIME)
|
||
displayCase = 999; // too long
|
||
break;
|
||
|
||
case 364:
|
||
// Serial.println("displayed rectangle reply");
|
||
setTextAttributes(displayAddr, 5, 0, 0, 0, RED_ADI, 0, 0);
|
||
displayCase++;
|
||
break;
|
||
|
||
case 365:
|
||
sendingDisplayCase = displayCase;
|
||
if (countLF >= 2) // got our response
|
||
displayCase++;
|
||
if (Timers[COMMSREPLYTIMER] > REPLYTIME)
|
||
displayCase = 999; // too long
|
||
break;
|
||
|
||
case 366:
|
||
displayCase++;
|
||
|
||
if (faultNum != 0)
|
||
{
|
||
sprintf(tmpstr, "-----"); // v525
|
||
if (faultNum == 1)
|
||
sprintf(tmpstr, "Door #%c PHOTO OBSTRUCTION", faultAB + 65);
|
||
if (faultNum == 2)
|
||
sprintf(tmpstr, "Door #%c M-Fault %2d", faultAB + 65, faultData);
|
||
if (faultNum == 3)
|
||
sprintf(tmpstr, "Door #%c Low Battery %d.%d", faultAB + 65, faultData / 10, faultData % 10);
|
||
if (faultNum == 4)
|
||
sprintf(tmpstr, "Door #%c M-Error %2d", faultAB + 65, faultData);
|
||
if (faultNum == 5)
|
||
sprintf(tmpstr, "Door #%c Lidar Obstruction", faultAB + 65);
|
||
|
||
if (attachedDisplays[displayAddr] == 1)
|
||
showDisplayText(displayAddr, 400 - ((strlen(tmpstr) * 13) / 2), 45, tmpstr); // 5" center it
|
||
displayText(tmpstr);
|
||
}
|
||
|
||
faultNum = faultData = 0;
|
||
obstructionFault = 0;
|
||
motorFault = 0;
|
||
clearMotorError();
|
||
break;
|
||
|
||
case 367:
|
||
// if (countLF >= 2) //got our response
|
||
displayCase++;
|
||
// if (Timers[COMMSREPLYTIMER] > (REPLYTIME * 4)) displayCase = 368;
|
||
break;
|
||
|
||
case 368:
|
||
displayCase = displayForward;
|
||
break;
|
||
|
||
//*** Show Wifi RSSI
|
||
|
||
case 400: // just wrote the logo... wait for response//v534
|
||
|
||
sendingDisplayCase = displayCase;
|
||
if (countLF >= 2) // got our response
|
||
{
|
||
displayCase++;
|
||
}
|
||
|
||
if (Timers[COMMSREPLYTIMER] > REPLYTIME)
|
||
displayCase = 999; // too long
|
||
break;
|
||
|
||
case 401:
|
||
|
||
Serial.printf("Check Wifi RSSI: %d\n", getWifiRSSI());
|
||
|
||
if (parm[130 + displayAddr] >= CLARITY_VER)
|
||
{
|
||
displayCase = displayForward;
|
||
if (attachedDisplays[displayAddr] == 1) // 5"
|
||
{
|
||
|
||
if (getWifiRSSI() <= -100)
|
||
{
|
||
showDisplayGraphic(displayAddr, 693, 20, EVOWIFI0, 0, 0);
|
||
Serial.printf("0 Wifi RSSI: %d\n", getWifiRSSI());
|
||
return;
|
||
}
|
||
|
||
if (getWifiRSSI() < -90)
|
||
{
|
||
showDisplayGraphic(displayAddr, 708, 10, EVOWIFI1, 0, 0);
|
||
Serial.printf("1 Wifi RSSI: %d\n", getWifiRSSI());
|
||
return;
|
||
}
|
||
|
||
if (getWifiRSSI() < -80)
|
||
{
|
||
showDisplayGraphic(displayAddr, 708, 10, EVOWIFI2, 0, 0);
|
||
Serial.printf("2 Wifi RSSI: %d\n", getWifiRSSI());
|
||
return;
|
||
}
|
||
|
||
showDisplayGraphic(displayAddr, 708, 10, EVOWIFI3, 0, 0);
|
||
Serial.printf("3 Wifi RSSI: %d\n", getWifiRSSI());
|
||
}
|
||
|
||
if (attachedDisplays[displayAddr] == 2) // 2"
|
||
{
|
||
if (getWifiRSSI() <= -100)
|
||
{
|
||
showDisplayGraphic(displayAddr, 200, 5, EVOWIFI0, 0, 0);
|
||
Serial.printf("0 Wifi RSSI: %d\n", getWifiRSSI());
|
||
return;
|
||
}
|
||
|
||
if (getWifiRSSI() < -90)
|
||
{
|
||
showDisplayGraphic(displayAddr, 200, 5, EVOWIFI1, 0, 0);
|
||
Serial.printf("1 Wifi RSSI: %d\n", getWifiRSSI());
|
||
return;
|
||
}
|
||
|
||
if (getWifiRSSI() < -80)
|
||
{
|
||
showDisplayGraphic(displayAddr, 200, 5, EVOWIFI2, 0, 0);
|
||
Serial.printf("2 Wifi RSSI: %d\n", getWifiRSSI());
|
||
return;
|
||
}
|
||
|
||
showDisplayGraphic(displayAddr, 200, 5, EVOWIFI3, 0, 0);
|
||
Serial.printf("3 Wifi RSSI: %d\n", getWifiRSSI());
|
||
}
|
||
}
|
||
else
|
||
{
|
||
Serial.println("Old Clarity Version need to write the text.");
|
||
displayCase++;
|
||
}
|
||
|
||
break;
|
||
|
||
case 402:
|
||
Serial.println("wifi setting up 402");
|
||
if (attachedDisplays[displayAddr] == 1) // 5"
|
||
{
|
||
showDisplayRectangle(displayAddr, 1, 750, 30, 28, 20, 1, 0, 0);
|
||
}
|
||
else
|
||
{
|
||
showDisplayRectangle(displayAddr, 1, 204, 14, 28, 20, 1, 0, 0);
|
||
}
|
||
displayCase++;
|
||
break;
|
||
case 403:
|
||
Serial.println("wifi setting font 403");
|
||
if (countLF >= 2)
|
||
{
|
||
setTextAttributes(displayAddr, 5, 0, 0, 0, 0, TEAL_ADI, 0);
|
||
displayCase++;
|
||
}
|
||
if (Timers[COMMSREPLYTIMER] > REPLYTIME)
|
||
displayCase = 999; // too long
|
||
break;
|
||
|
||
case 404:
|
||
rssiWIFI = getWifiRSSI();
|
||
if (rssiWIFI <= -100)
|
||
rssiWIFI = 0;
|
||
else if (rssiWIFI <= -90)
|
||
rssiWIFI = 1;
|
||
else if (rssiWIFI <= -80)
|
||
rssiWIFI = 2;
|
||
else
|
||
rssiWIFI = 3;
|
||
Serial.println("wifi setting drawing wifi status 404");
|
||
if (countLF >= 2) // got our response
|
||
{
|
||
displayCase = displayForward;
|
||
sprintf(tmpstr, "W%d", rssiWIFI);
|
||
Serial.printf("WIFI String: %s\r\n", tmpstr);
|
||
if (attachedDisplays[displayAddr] == 1) // 5"
|
||
{
|
||
showDisplayText(displayAddr, 752, 30, tmpstr);
|
||
}
|
||
else
|
||
{
|
||
showDisplayText(displayAddr, 205, 15, tmpstr);
|
||
}
|
||
}
|
||
|
||
if (Timers[COMMSREPLYTIMER] > REPLYTIME)
|
||
{
|
||
displayCase = 999; // too long
|
||
}
|
||
break;
|
||
|
||
case 410: // v534
|
||
showDisplayGraphic(displayAddr, 0, 0, CLARITYOKSCREEN, 0, 0);
|
||
displayCase++;
|
||
break;
|
||
|
||
case 411: // v534
|
||
sendingDisplayCase = displayCase;
|
||
if (countLF >= 2) // got our response
|
||
{
|
||
displayCase = 22; // go wait for a touch
|
||
}
|
||
|
||
if (Timers[COMMSREPLYTIMER] > REPLYTIME)
|
||
displayCase = 999; // too long
|
||
break;
|
||
|
||
break;
|
||
|
||
case 420:
|
||
fillDisplay(displayAddr, BLACK_ADI);
|
||
displayCase++;
|
||
break;
|
||
|
||
case 421:
|
||
if (countLF >= 2) // got our response
|
||
{
|
||
displayCase++;
|
||
}
|
||
|
||
if (Timers[COMMSREPLYTIMER] > REPLYTIME)
|
||
displayCase = 999; // too long
|
||
|
||
break;
|
||
|
||
case 422:
|
||
if (attachedDisplays[displayAddr] == 1) // 5"
|
||
{
|
||
setTextAttributes(displayAddr, 7, 0, 0, 0, 0, TEAL_ADI, 0);
|
||
}
|
||
else
|
||
{
|
||
setTextAttributes(displayAddr, 5, 0, 0, 0, 0, TEAL_ADI, 0);
|
||
}
|
||
displayCase++;
|
||
break;
|
||
|
||
case 423:
|
||
if (countLF >= 2) // got our response
|
||
{
|
||
if (attachedDisplays[displayAddr] == 1) // 5"
|
||
{
|
||
showDisplayText(displayAddr, 344, 210, "Clarity");
|
||
}
|
||
else
|
||
{
|
||
showDisplayText(displayAddr, 78, 100, "Clarity");
|
||
}
|
||
displayCase++;
|
||
}
|
||
|
||
if (Timers[COMMSREPLYTIMER] > REPLYTIME)
|
||
{
|
||
displayCase = 999; // too long
|
||
}
|
||
break;
|
||
|
||
case 424:
|
||
if (countLF >= 2) // got our response
|
||
{
|
||
if (attachedDisplays[displayAddr] == 1) // 5"
|
||
{
|
||
showDisplayText(displayAddr, 296, 244, "Wifi Enabled!");
|
||
}
|
||
else
|
||
{
|
||
showDisplayText(displayAddr, 42, 124, "Wifi Enabled!");
|
||
}
|
||
displayCase++;
|
||
}
|
||
case 425:
|
||
if (countLF >= 2) // got our response
|
||
{
|
||
displayCase = 22;
|
||
}
|
||
|
||
if (Timers[COMMSREPLYTIMER] > REPLYTIME)
|
||
{
|
||
displayCase = 999; // too long
|
||
}
|
||
break;
|
||
|
||
//***** find multiple displays
|
||
case 600:
|
||
Timers[SCREENTIMEOUTTIMER] = 0;
|
||
fillDisplay(1, BLACK_ADI);
|
||
// delay(200);
|
||
displayCase++;
|
||
break;
|
||
|
||
case 601:
|
||
sendingDisplayCase = displayCase;
|
||
if (countLF >= 2) // got our response
|
||
displayCase++;
|
||
if (Timers[COMMSREPLYTIMER] > REPLYTIME)
|
||
{
|
||
displayCase = 999; // too long
|
||
qualifyFault(36, 0);
|
||
}
|
||
break;
|
||
|
||
case 602:
|
||
restoreFault(36);
|
||
setTextAttributes(1, 5, 0, 0, 0, 0, TEAL_ADI, 0);
|
||
displayCase++;
|
||
break;
|
||
|
||
case 603:
|
||
sendingDisplayCase = displayCase;
|
||
if (countLF >= 2) // got our response
|
||
displayCase = 610;
|
||
displayAddr = 1;
|
||
if (Timers[COMMSREPLYTIMER] > REPLYTIME)
|
||
displayCase = 999; // too long
|
||
break;
|
||
|
||
case 610:
|
||
statusDisplay(displayAddr); // ping
|
||
displayCase++;
|
||
break;
|
||
|
||
case 611:
|
||
|
||
if (countLF >= 2) // got our response
|
||
{
|
||
parseStatus();
|
||
displayCase++;
|
||
|
||
if (xxx > 330) // 5"
|
||
{
|
||
// X_OFFSET = 530;
|
||
// Y_OFFSET = 95;
|
||
attachedDisplays[displayAddr] = 1;
|
||
Serial.print(displayAddr);
|
||
Serial.println(": Found 5 inch Display");
|
||
}
|
||
else // 2.4"
|
||
{
|
||
// X_OFFSET = 0
|
||
// Y_OFFSET = 0;
|
||
attachedDisplays[displayAddr] = 2;
|
||
Serial.print(displayAddr);
|
||
Serial.println(": Found 2.4 inch Display");
|
||
}
|
||
}
|
||
if (Timers[COMMSREPLYTIMER] > (REPLYTIME / 6))
|
||
displayCase++; // too long
|
||
break;
|
||
|
||
case 612:
|
||
switch (attachedDisplays[displayAddr])
|
||
{
|
||
case 1: // 5"
|
||
sprintf(tmpstr, "%d 5 inch v%d", displayAddr, zzz);
|
||
parms.write(130 + displayAddr, zzz);
|
||
break;
|
||
case 2: // 2.4"
|
||
|
||
sprintf(tmpstr, "%d 2.4 inch v%d", displayAddr, zzz);
|
||
parms.write(130 + displayAddr, zzz);
|
||
break;
|
||
default: // no display
|
||
sprintf(tmpstr, "%d No Display", displayAddr);
|
||
break;
|
||
}
|
||
|
||
displayText(String(tmpstr)); // Oled
|
||
|
||
showDisplayText(1, 5, (displayAddr * 40), tmpstr);
|
||
displayCase++;
|
||
break;
|
||
|
||
case 613:
|
||
sendingDisplayCase = displayCase;
|
||
if (countLF >= 2) // got our response
|
||
displayCase++;
|
||
|
||
if (Timers[COMMSREPLYTIMER] > REPLYTIME)
|
||
displayCase = 999; // too long
|
||
break;
|
||
|
||
case 614:
|
||
if (++displayAddr > 5) // we done scanning
|
||
{
|
||
displayCase = 1;
|
||
displayAddr = 1;
|
||
}
|
||
else
|
||
displayCase = 610;
|
||
break;
|
||
|
||
//****Obstruction Screen
|
||
case 710: // a little time to clear it out
|
||
obstructionFault = 0;
|
||
Timers[COMMSREPLYTIMER] = 0;
|
||
displayCase++;
|
||
|
||
case 711:
|
||
if (Timers[COMMSREPLYTIMER] > (REPLYTIME))
|
||
displayCase++;
|
||
break;
|
||
|
||
case 712:
|
||
Timers[SCREENTIMEOUTTIMER] = 0;
|
||
fillDisplay(displayAddr, RED_ADI);
|
||
// delay(200);
|
||
displayCase++;
|
||
break;
|
||
|
||
case 713:
|
||
sendingDisplayCase = displayCase;
|
||
if (countLF >= 2) // got our response
|
||
displayCase++;
|
||
if (Timers[COMMSREPLYTIMER] > REPLYTIME)
|
||
displayCase = 999; // too long
|
||
break;
|
||
|
||
case 714:
|
||
setTextAttributes(displayAddr, 5, 0, 0, 0, RED_ADI, 0, 0);
|
||
displayCase++;
|
||
break;
|
||
|
||
case 715:
|
||
sendingDisplayCase = displayCase;
|
||
if (countLF >= 2) // got our response
|
||
displayCase++;
|
||
if (Timers[COMMSREPLYTIMER] > REPLYTIME)
|
||
displayCase = 999; // too long
|
||
break;
|
||
|
||
case 716:
|
||
sprintf(tmpstr, "OBSTRUCTION");
|
||
// showDisplayText(displayAddr, 35, 30, tmpstr);
|
||
if (attachedDisplays[displayAddr] == 2)
|
||
showDisplayText(displayAddr, (240 - (11 * 14)) / 2, 30, tmpstr); // 2" 11 chars, 14 pixels each, centered
|
||
if (attachedDisplays[displayAddr] == 1)
|
||
showDisplayText(displayAddr, (800 - (11 * 14)) / 2, 30, tmpstr); // 5"
|
||
displayCase++;
|
||
break;
|
||
|
||
case 717:
|
||
if (Timers[COMMSREPLYTIMER] > (REPLYTIME * 3))
|
||
displayCase = 19;
|
||
break;
|
||
|
||
//****Motor Fault Screen
|
||
case 810: // a little time to clear it out
|
||
{
|
||
motorStop();
|
||
Serial.println("MotorStop 810");
|
||
Timers[COMMSREPLYTIMER] = 0;
|
||
displayCase++;
|
||
}
|
||
case 811:
|
||
if (Timers[COMMSREPLYTIMER] > (REPLYTIME))
|
||
displayCase++;
|
||
break;
|
||
|
||
case 812:
|
||
Timers[SCREENTIMEOUTTIMER] = 0;
|
||
fillDisplay(displayAddr, RED_ADI);
|
||
// delay(200);
|
||
displayCase++;
|
||
break;
|
||
|
||
case 813:
|
||
sendingDisplayCase = displayCase;
|
||
if (countLF >= 2) // got our response
|
||
displayCase++;
|
||
if (Timers[COMMSREPLYTIMER] > REPLYTIME)
|
||
displayCase = 999; // too long
|
||
break;
|
||
|
||
case 814:
|
||
setTextAttributes(displayAddr, 5, 0, 0, 0, RED_ADI, 0, 0);
|
||
displayCase++;
|
||
break;
|
||
|
||
case 815:
|
||
sendingDisplayCase = displayCase;
|
||
if (countLF >= 2) // got our response
|
||
displayCase++;
|
||
if (Timers[COMMSREPLYTIMER] > REPLYTIME)
|
||
displayCase = 999; // too long
|
||
break;
|
||
|
||
case 816:
|
||
|
||
if (motorFault) // 9999 fault
|
||
{
|
||
sprintf(tmpstr, "Motor Fault %2d", motorFault);
|
||
faultNum = 2;
|
||
faultAB = 0;
|
||
faultData = motorFault;
|
||
}
|
||
else
|
||
{
|
||
sprintf(tmpstr, "Motor Error %2d", getMotorError());
|
||
faultNum = 4;
|
||
faultAB = 0;
|
||
faultData = getMotorError();
|
||
}
|
||
|
||
// showDisplayText(displayAddr, 35, 30, tmpstr);
|
||
if (attachedDisplays[displayAddr] == 2)
|
||
showDisplayText(displayAddr, (240 - (14 * 14)) / 2, 30, tmpstr); // 2" 13 chars, 14 pixels each, centered
|
||
if (attachedDisplays[displayAddr] == 1)
|
||
showDisplayText(displayAddr, (800 - (14 * 14)) / 2, 30, tmpstr); // 5"
|
||
|
||
displayCase++;
|
||
motorFault = 0;
|
||
clearMotorError();
|
||
|
||
cDOOROPEN = 0;
|
||
cDOORCLOSE = 0;
|
||
cDOORSTOP = 1;
|
||
|
||
motorStop();
|
||
|
||
logicCase = 0;
|
||
break;
|
||
|
||
case 817:
|
||
if (Timers[COMMSREPLYTIMER] > (REPLYTIME * 5))
|
||
displayCase = 9;
|
||
break;
|
||
|
||
//****Battery Fault Screen //V120
|
||
case 910: // a little time to clear it out
|
||
{
|
||
Timers[COMMSREPLYTIMER] = 0;
|
||
cDOOROPEN = 0;
|
||
cDOORCLOSE = 0;
|
||
cDOORSTOP = 1;
|
||
SCREENCLOSE = SCREENOPEN = SCREENSTOP = 0;
|
||
displayCase++;
|
||
}
|
||
|
||
case 911:
|
||
if (Timers[COMMSREPLYTIMER] > (REPLYTIME))
|
||
displayCase++;
|
||
break;
|
||
|
||
case 912:
|
||
Timers[SCREENTIMEOUTTIMER] = 0;
|
||
fillDisplay(displayAddr, LT_YELLOW_ADI);
|
||
// delay(200);
|
||
displayCase++;
|
||
break;
|
||
|
||
case 913:
|
||
sendingDisplayCase = displayCase;
|
||
if (countLF >= 2) // got our response
|
||
displayCase++;
|
||
if (Timers[COMMSREPLYTIMER] > REPLYTIME)
|
||
displayCase = 999; // too long
|
||
break;
|
||
|
||
case 914:
|
||
setTextAttributes(displayAddr, 5, 0, 0, 0, LT_YELLOW_ADI, BLACK_ADI, 0);
|
||
displayCase++;
|
||
break;
|
||
|
||
case 915:
|
||
sendingDisplayCase = displayCase;
|
||
if (countLF >= 2) // got our response
|
||
displayCase++;
|
||
if (Timers[COMMSREPLYTIMER] > REPLYTIME)
|
||
displayCase = 999; // too long
|
||
break;
|
||
|
||
case 916:
|
||
battV = (int)(voltageNow);
|
||
sprintf(tmpstr, "Battery Fault:");
|
||
if (attachedDisplays[displayAddr] == 2)
|
||
showDisplayText(displayAddr, (240 - (14 * 14)) / 2, 100, tmpstr); // 2" 13 chars, 14 pixels each, centered
|
||
if (attachedDisplays[displayAddr] == 1)
|
||
showDisplayText(displayAddr, (800 - (14 * 14)) / 2, 200, tmpstr); // 5"
|
||
displayCase++;
|
||
// batteryFault = 0;
|
||
break;
|
||
|
||
case 917:
|
||
sendingDisplayCase = displayCase;
|
||
if (countLF >= 2) // got our response
|
||
displayCase++;
|
||
if (Timers[COMMSREPLYTIMER] > REPLYTIME)
|
||
displayCase = 999; // too long
|
||
break;
|
||
|
||
case 918: // display second line
|
||
sprintf(tmpstr, "%2d.%d", battV / 10, battV % 10);
|
||
if (attachedDisplays[displayAddr] == 2)
|
||
showDisplayText(displayAddr, (240 - (4 * 14)) / 2, 130, tmpstr); // 2" 4 chars, 14 pixels each, centered
|
||
if (attachedDisplays[displayAddr] == 1)
|
||
showDisplayText(displayAddr, (800 - (4 * 14)) / 2, 230, tmpstr); // 5"
|
||
displayCase++;
|
||
break;
|
||
|
||
case 919:
|
||
sendingDisplayCase = displayCase;
|
||
if (Timers[COMMSREPLYTIMER] > (REPLYTIME * 5))
|
||
displayCase = 999;
|
||
break;
|
||
|
||
case 999:
|
||
sprintf(tmpstr, "CTimeout Addr: %d,%d", displayAddr, sendingDisplayCase);
|
||
displayText(String(tmpstr));
|
||
Timers[SCREENTIMEOUTTIMER] = 0;
|
||
displayCase = 0;
|
||
break;
|
||
|
||
//***************Test Lidar for obstruction
|
||
|
||
case 1310:
|
||
displayCase++;
|
||
lidarTest = 0;
|
||
break;
|
||
|
||
case 1311:
|
||
|
||
c_send(1, LIDARADDRESS, 75, 0, 0); // turn on
|
||
if (Timers[LIDARTIMER] < 0)
|
||
Timers[LIDARTIMER] = 0;
|
||
Timers[SCREENTIMEOUTTIMER] = 0; // v520
|
||
displayCase++;
|
||
break;
|
||
|
||
case 1312:
|
||
sendingDisplayCase = displayCase;
|
||
if (indx >= 16)
|
||
if (comms8Csum(&instr[10], 6, 0) == instr[15]) // csum ok
|
||
{
|
||
displayCase = 1310;
|
||
// displayCase = displayForward;
|
||
|
||
if (Timers[LIDARTIMER] > 15)
|
||
{
|
||
Serial.println("-");
|
||
if (instr[13] != 0)
|
||
{
|
||
// lidarObstruction = 1;
|
||
int ii = instr[14];
|
||
ii <<= 8;
|
||
ii += instr[12];
|
||
|
||
sprintf(tmpstr, "LIDAR A%d, D%d", ii, instr[13]);
|
||
displayText(String(tmpstr));
|
||
|
||
displayCase = 1313;
|
||
}
|
||
}
|
||
}
|
||
else // bad csum
|
||
{
|
||
Serial.println("Bad CSUM");
|
||
displayCase = 999; // error
|
||
}
|
||
|
||
if (Timers[COMMSREPLYTIMER] > REPLYTIME)
|
||
{
|
||
displayCase = 0; // error
|
||
Serial.printf("**** Receive Timeout Lidar\n");
|
||
}
|
||
break;
|
||
|
||
case 1313:
|
||
displayCase++;
|
||
beepDisplay(1);
|
||
break;
|
||
|
||
case 1314:
|
||
sendingDisplayCase = displayCase;
|
||
if (countLF >= 2) // got our response
|
||
{
|
||
displayCase = 1310;
|
||
}
|
||
if (Timers[COMMSREPLYTIMER] > REPLYTIME)
|
||
displayCase = 999; // too long
|
||
break;
|
||
|
||
default:
|
||
Serial.print("*************************************Bad displayCase: ");
|
||
Serial.println(displayCase);
|
||
displayCase = 0;
|
||
break;
|
||
}
|
||
|
||
if (VB)
|
||
if (lastDisplayCase != displayCase)
|
||
{
|
||
Serial.printf("DCase: %d DAdr: %d\n", displayCase, displayAddr);
|
||
lastDisplayCase = displayCase;
|
||
}
|
||
}
|
||
|
||
int check_TouchBox(int x1, int x2, int y1, int y2)
|
||
{
|
||
if ((xxx > x1) &
|
||
(xxx < x2) &
|
||
(yyy > y1) &
|
||
(yyy < y2))
|
||
return (1);
|
||
|
||
return (0);
|
||
}
|
||
|
||
int parseXY(void)
|
||
{
|
||
char tmpstr[40];
|
||
int p;
|
||
int i;
|
||
int strt, csum, stp;
|
||
|
||
for (i = 0; instr[i] != LF; i++)
|
||
; // find first LF from echo
|
||
i++; // should be pointing to <ESC>
|
||
strt = i;
|
||
|
||
i++; //"T"
|
||
if (instr[i] != 84) // is it a T? , if not, go to LOGO screen //v523
|
||
{
|
||
Serial.printf("Awaiting Command on display\n");
|
||
displayCase = 20;
|
||
xxx = -1;
|
||
yyy = -1;
|
||
return (0);
|
||
}
|
||
|
||
i++; //","
|
||
|
||
i++; // first data
|
||
p = 0;
|
||
memset(tmpstr, 0, sizeof(tmpstr));
|
||
|
||
// for (; instr[i] != 44; i++) tmpstr[p++] = instr[i]; //build string
|
||
for (; instr[i] != 44; i++)
|
||
{
|
||
if (p < sizeof(tmpstr))
|
||
tmpstr[p++] = instr[i]; // build string
|
||
}
|
||
|
||
tmpstr[++p] = 0; // terminate it
|
||
address = atoi(tmpstr);
|
||
|
||
i++; // second data
|
||
p = 0;
|
||
memset(tmpstr, 0, sizeof(tmpstr));
|
||
// for (; instr[i] != 44; i++) tmpstr[p++] = instr[i]; //build string
|
||
for (; instr[i] != 44; i++)
|
||
{
|
||
if (p < sizeof(tmpstr))
|
||
tmpstr[p++] = instr[i]; // build string
|
||
}
|
||
tmpstr[++p] = 0; // terminate it
|
||
xxx = atoi(tmpstr);
|
||
|
||
i++; // third data
|
||
p = 0;
|
||
memset(tmpstr, 0, sizeof(tmpstr));
|
||
// for (; instr[i] != 44; i++) tmpstr[p++] = instr[i]; //build string
|
||
for (; instr[i] != 44; i++)
|
||
{
|
||
if (p < sizeof(tmpstr))
|
||
tmpstr[p++] = instr[i]; // build string
|
||
}
|
||
stp = i;
|
||
tmpstr[++p] = 0; // terminate it
|
||
yyy = atoi(tmpstr);
|
||
|
||
i++; // csum
|
||
p = 0;
|
||
memset(tmpstr, 0, sizeof(tmpstr));
|
||
// for (; instr[i] != LF; i++) tmpstr[p++] = instr[i]; //build string
|
||
for (; instr[i] != LF; i++)
|
||
{
|
||
if (p < sizeof(tmpstr))
|
||
tmpstr[p++] = instr[i]; // build string
|
||
}
|
||
|
||
tmpstr[++p] = 0; // terminate it
|
||
csum = atoi(tmpstr);
|
||
|
||
p = 0;
|
||
for (i = strt; i <= stp; i++)
|
||
{
|
||
// Serial.print(instr[i]);
|
||
p += instr[i];
|
||
}
|
||
|
||
p = p & 0xff;
|
||
p = ((0 - p) & 0xff); // 2's comp
|
||
if (p == 255)
|
||
p = 0; // adjust it if 255
|
||
|
||
if (p != csum) // bad csum
|
||
{
|
||
xxx = -1;
|
||
yyy = -1;
|
||
Serial.println("Bad RX checksum");
|
||
return (0);
|
||
}
|
||
|
||
if ((xxx + yyy) >= 0) // got a valid touch
|
||
{
|
||
sprintf(tmpstr, "--------X: %d, Y: %d : %d", xxx, yyy, cDOORCLOSE);
|
||
Serial.println(tmpstr);
|
||
|
||
Timers[SCREENTIMEOUTTIMER] = 0;
|
||
}
|
||
return (1);
|
||
}
|
||
|
||
int parseStatus(void)
|
||
{
|
||
char tmpstr[40];
|
||
int p;
|
||
int i;
|
||
int strt, csum, stp;
|
||
|
||
for (i = 0; instr[i] != LF; i++)
|
||
; // find first LF from echo
|
||
i++; // should be pointing to <ESC>
|
||
strt = i;
|
||
|
||
i++; //"$"
|
||
i++; //","
|
||
|
||
i++; // first data
|
||
p = 0;
|
||
memset(tmpstr, 0, sizeof(tmpstr));
|
||
for (; instr[i] != 44; i++)
|
||
tmpstr[p++] = instr[i]; // build string
|
||
tmpstr[++p] = 0; // terminate it
|
||
address = atoi(tmpstr);
|
||
|
||
i++; // second data
|
||
p = 0;
|
||
memset(tmpstr, 0, sizeof(tmpstr));
|
||
for (; instr[i] != 44; i++)
|
||
tmpstr[p++] = instr[i]; // build string
|
||
tmpstr[++p] = 0; // terminate it
|
||
xxx = atoi(tmpstr);
|
||
|
||
i++; // third data
|
||
p = 0;
|
||
memset(tmpstr, 0, sizeof(tmpstr));
|
||
for (; instr[i] != 44; i++)
|
||
tmpstr[p++] = instr[i]; // build string
|
||
// stp = i;
|
||
tmpstr[++p] = 0; // terminate it
|
||
yyy = atoi(tmpstr);
|
||
|
||
i++; // forth data
|
||
p = 0;
|
||
memset(tmpstr, 0, sizeof(tmpstr));
|
||
for (; instr[i] != 44; i++)
|
||
tmpstr[p++] = instr[i]; // build string
|
||
stp = i;
|
||
tmpstr[++p] = 0; // terminate it
|
||
zzz = atoi(tmpstr);
|
||
|
||
i++; // csum
|
||
p = 0;
|
||
memset(tmpstr, 0, sizeof(tmpstr));
|
||
for (; instr[i] != LF; i++)
|
||
tmpstr[p++] = instr[i]; // build string
|
||
tmpstr[++p] = 0; // terminate it
|
||
csum = atoi(tmpstr);
|
||
|
||
p = 0;
|
||
for (i = strt; i <= stp; i++)
|
||
{
|
||
// Serial.print(instr[i]);
|
||
p += instr[i];
|
||
}
|
||
|
||
p = p & 0xff;
|
||
p = ((0 - p) & 0xff); // 2's comp
|
||
if (p == 255)
|
||
p = 0; // adjust it if 255
|
||
|
||
if (p != csum) // bad csum
|
||
{
|
||
xxx = -1;
|
||
yyy = -1;
|
||
zzz = -1;
|
||
Serial.println("Bad Status RX checksum");
|
||
return (0);
|
||
}
|
||
|
||
sprintf(tmpstr, "X=%d,Y=%d,Z=%d", xxx, yyy, zzz);
|
||
Serial.println(tmpstr);
|
||
|
||
return (1);
|
||
}
|
||
|
||
int currentDisplayCase(void)
|
||
{
|
||
return (displayCase);
|
||
}
|
||
|
||
int LowBattery(void)
|
||
{
|
||
int vbatt = 0;
|
||
|
||
if (parm[10] == 0)
|
||
return (0); // turned off
|
||
|
||
vbatt = voltageNow;
|
||
// Serial.print("vbatt: "); Serial.println(vbatt);
|
||
|
||
if (vbatt < (parm[10]))
|
||
{
|
||
// Serial.print("vbatt: "); Serial.println(vbatt);
|
||
// batteryFault = 1;
|
||
faultNum = 3;
|
||
faultData = (int)(voltageNow);
|
||
faultAB = 0;
|
||
return (1); // battery voltage low
|
||
}
|
||
return (0);
|
||
}
|
||
|
||
void c_send(
|
||
|
||
unsigned char cmd,
|
||
unsigned char addr,
|
||
unsigned char dat1,
|
||
unsigned char parm,
|
||
unsigned char dat2)
|
||
{
|
||
unsigned char cc;
|
||
|
||
Timers[COMMSREPLYTIMER] = 0; // start it
|
||
indx = 0;
|
||
memset(instr, 0, sizeof(instr));
|
||
|
||
cc = cmd;
|
||
cc += addr;
|
||
cc += dat1;
|
||
cc += parm;
|
||
cc += dat2;
|
||
if (cc == 0xff)
|
||
cc = 0; /* if checksum is ff then make it 0 */
|
||
Serial2.write(0xff);
|
||
Serial2.write(0xff);
|
||
Serial2.write(cmd);
|
||
Serial2.write(addr);
|
||
Serial2.write(dat1);
|
||
Serial2.write(parm);
|
||
Serial2.write(dat2);
|
||
Serial2.write(cc);
|
||
|
||
if (VB)
|
||
{
|
||
Serial.print("0xff,");
|
||
Serial.print("0xff,");
|
||
|
||
Serial.print(cmd);
|
||
Serial.print(":");
|
||
Serial.print(addr);
|
||
Serial.print(":");
|
||
Serial.print(dat1);
|
||
Serial.print(":");
|
||
Serial.print(parm);
|
||
Serial.print(":");
|
||
Serial.print(dat2);
|
||
Serial.print(":");
|
||
Serial.println(cc);
|
||
}
|
||
}
|
||
|
||
byte comms8Csum(byte *buffer, byte len, bool tc)
|
||
{
|
||
byte i, csum;
|
||
|
||
// buffer += 2;
|
||
csum = 0;
|
||
for (i = 0; i < (len - 1); i++)
|
||
csum += *buffer++;
|
||
|
||
if (tc)
|
||
csum = 0 - csum;
|
||
|
||
if (csum == 0xff)
|
||
csum = 0;
|
||
return (csum);
|
||
}
|
||
|
||
int checkLidarObstruction(void)
|
||
{
|
||
return (lidarObstruction);
|
||
}
|
||
|
||
void clearLidarObstruction(void)
|
||
{
|
||
lidarObstruction = 0;
|
||
}
|
||
|
||
void extParmWrite(byte addr, uint32_t pnum, uint32_t dta)
|
||
{
|
||
byte extstr[32];
|
||
int i;
|
||
|
||
indx = 0;
|
||
countLF = 0;
|
||
Timers[COMMSREPLYTIMER] = 0; // restart it
|
||
memset(extstr, 0, sizeof(extstr));
|
||
memset(instr, 0, sizeof(instr));
|
||
|
||
extstr[0] = 0xff;
|
||
extstr[1] = 0xff;
|
||
extstr[2] = 106;
|
||
extstr[3] = addr;
|
||
extstr[4] = pnum & 0xff;
|
||
extstr[6] = (pnum >> 8) & 0xff;
|
||
extstr[7] = comms8Csum(&extstr[2], 5, 0);
|
||
extstr[16] = dta & 0xff;
|
||
extstr[18] = (dta >> 8) & 0xff;
|
||
extstr[20] = (dta >> 16) & 0xff;
|
||
extstr[22] = (dta >> 24) & 0xff;
|
||
extstr[27] = comms8Csum(&extstr[2], 25, 1);
|
||
|
||
Serial.print("Remote Parm request: ");
|
||
|
||
for (i = 0; i < 28; i++) // sent it
|
||
{
|
||
Serial2.write(extstr[i]);
|
||
Serial.print(extstr[i]);
|
||
if (i != 27)
|
||
Serial.print(": ");
|
||
}
|
||
|
||
Serial.println();
|
||
}
|
||
|
||
/*
|
||
struct ioEx //**********************
|
||
{
|
||
|
||
uint16_t relay[4];
|
||
uint16_t opto[4];
|
||
uint16_t Hz[4];
|
||
uint16_t a2d[8];
|
||
|
||
}ioExpander[5];
|
||
|
||
|
||
ioExpander[0].relay[0] = 1; //***********************
|
||
|
||
267. 538
|
||
|
||
35
|
||
parms
|
||
84
|
||
|
||
114
|
||
LEARN OPEN
|
||
209
|
||
|
||
238
|
||
LEARN CLOSE
|
||
289
|
||
|
||
320
|
||
SCREEN PGM
|
||
369
|
||
|
||
400
|
||
EXIT
|
||
453
|
||
|
||
*/
|
||
/*
|
||
105 32 bit Parm Read
|
||
Command
|
||
0 1 2 3 4 5 6 7
|
||
FF FF 105 248 P0 0 P1 CS1
|
||
Reply
|
||
0 1 2 3 4 5 6 7
|
||
FF FF 105 0 P0 0 P1 CS1
|
||
Extended Reply
|
||
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
|
||
A0 105 A1 0 A2 0 A3 0 D0 0 D1 0 D2 0 D3 P1 P0 0 0 CS2
|
||
*/
|