#include <stdio.h>
#include <string>
using namespace std;
/*
0 1 2 3 4 5 6 7 8 9
8D 00 0A 0A 0A 09 0A 1E 0A 00 // clock version
8D 00 0A 0A 10 01 20 00 23 00 // ready for display
8D 00 0A 0A 10 0A 20 00 17 00 // Mode 23
8D 00 0A 0A 10 0A 0A 64 0A 00 // Mode 23
*/
int main()
{
char msg[10];
int ackMessage_[5];
string txt;
int clockMode_ = 0; /**< The clock mode */
int clockVersionMain_;
int clockVersionSub_;
msg[0] = 0x8d;
msg[1] = 0x00;
msg[2] = 0x0a;
msg[3] = 0x0a;
msg[4] = 0x10;
msg[5] = 0x0a;
msg[6] = 0x20;
msg[7] = 0x00;
msg[8] = 0x17;
msg[9] = 0x00;
int length = (msg[1] << 7) | msg[2];
if (((msg[3] & 0x0f) == 0x0a) || ((msg[6] & 0x0f) == 0x0a))
{
ackMessage_[0] = ((msg[4]) & 0x7f) | ((msg[6] << 3) & 0x80);
ackMessage_[1] = ((msg[5]) & 0x7f) | ((msg[6] << 2) & 0x80);
ackMessage_[2] = ((msg[7]) & 0x7f) | ((msg[3] << 3) & 0x80);
ackMessage_[3] = ((msg[8]) & 0x7f) | ((msg[3] << 2) & 0x80);
ackMessage_[4] = 0;
if ((0x10 == ackMessage_[0]) && (0x00 == ackMessage_[2]))
{
switch (ackMessage_[1])
{
case 0x81: // Ready for disps
clockMode_ = 0;
printf("GENERATED ACK (ready)\n");
break;
case 0x88: // Start/Stop button pressed
clockMode_ = 0;
printf("GENERATED ACK (mode, start/stop pressed)\n");
break;
case 0x8a: // Clock mode
clockMode_ = ackMessage_[3];
printf("GENERATED ACK (mode)\n");
break;
}
}
else if ((0x00 != ackMessage_[0]) && (0x00 != ackMessage_[2]))
{
if (0x09 == ackMessage_[1])
{
// We found the version
clockVersionMain_ = ackMessage_[2] / 16;
clockVersionSub_ = ackMessage_[2] % 16;
printf("Clock Version: XL %02d.%02d\n" , clockVersionMain_ , clockVersionSub_);
}
else if ((0x10 == ackMessage_[0]) && (0x0a == ackMessage_[1]))
{
// We found a setnrun
clockMode_ = 23;
printf("SETNRUN (Clock Mode = 23)\n");
}
else
{
printf("ACK ERROR %02d\n", ackMessage_[0]);
}
}
printf("Clock Mode: %i txt: %s\n",clockMode_,txt.c_str());
}
else
{
int flagLeft_ = (msg[3] & 0x10) != 0;
int timePerMoveLeft_ = (msg[3] & 0x20) != 0;
int fallenLeft_ = (msg[3] & 0x40) != 0;
int hoursLeft_ = msg[3] & 0x0f;
int minutesLeft_ = ((msg[4] >> 4) * 10) + msg[4] % 16;
int secondsLeft_ = ((msg[5] >> 4) * 10) + msg[5] % 16;
int flagRight_ = (msg[6] & 0x10) != 0;
int timePerMoveRight_ = (msg[6] & 0x20) != 0;
int fallenRight_ = (msg[6] && 0x40) != 0;
int hoursRight_ = msg[6] & 0x0f;
int minutesRight_ = ((msg[7] >> 4) * 10) + msg[7] % 16;
int secondsRight_ = ((msg[8] >> 4) * 10) + msg[8] % 16;
int clockRunning_ = (msg[9] & 0x01) != 0;
int leverLeft_ = (msg[9] & 0x02) != 0;
int lowBattery_ = (msg[9] & 0x04) != 0;
int turnBlack_ = (msg[9] & 0x08) != 0;
int turnWhite_ = (msg[9] & 0x10) != 0;
int noClock_ = (msg[9] & 0x20) != 0;
printf("flagLeft: %i timePerMoveLeft: %i fallenLeft: %i hoursLeft: %i minutesLeft: %i secondsLeft: %i flagRight: %i timePerMoveRight: %i fallenRight: %i hoursRight: %i minutesRight: %i secondsRight: %i \n clockRunning: %i leverLeft: %i lowBattery: %i turnBlack: %i turnWhite: %i noClock %i",
flagLeft_,timePerMoveLeft_,fallenLeft_,hoursLeft_,minutesLeft_,secondsLeft_,flagRight_,timePerMoveRight_,fallenRight_,hoursRight_,minutesRight_,secondsRight_, clockRunning_, leverLeft_, lowBattery_, turnBlack_, turnWhite_, noClock_);
}
//system("pause");
return 0;
}