211 lines
6.2 KiB
C++
211 lines
6.2 KiB
C++
|
|
void parseUCS(unsigned char *packet, size_t length) {
|
|
if (length == 8 && packet[7] == '$') {
|
|
shortMessage(packet);
|
|
}
|
|
if (length == 12 && packet[11] == '&') {
|
|
longMessage(packet);
|
|
}
|
|
}
|
|
|
|
void shortMessage(unsigned char *packet) {
|
|
if ( (packet[2] == localConfig.ucsId[0] && packet[3] == localConfig.ucsId[1]) || (packet[2] == '.' && packet[3] == '.') ) {
|
|
switch (packet[4]) {
|
|
case 'A': { //Ouput On
|
|
//Serial.println("A");
|
|
uint8_t output = uint8_t(packet[6] - 0x30);
|
|
mcp.digitalWrite(output, HIGH);
|
|
} break;
|
|
case 'B': { //Output Off
|
|
//Serial.println("B");
|
|
uint8_t output = uint8_t(packet[6] - 0x30);
|
|
mcp.digitalWrite(output, LOW);
|
|
} break;
|
|
case 'C': { //Alles aan/uit
|
|
//Serial.println("C");
|
|
if (packet[6] == '0') { //alles uit
|
|
mcp.writePort(MCP23017Port::A, 0x00);
|
|
} else if (packet[6] == '1') { //alles aan
|
|
mcp.writePort(MCP23017Port::A, 0xFF);
|
|
}
|
|
} break;
|
|
case 'D': { //Identification
|
|
//Serial.println("D");
|
|
sendInputState();
|
|
sendOutputState();
|
|
} break;
|
|
case 'E': { //Toggle
|
|
//Serial.println("E");
|
|
uint8_t output = uint8_t(packet[6] - 0x30);
|
|
mcp.digitalWrite(output, !mcp.digitalRead(output));
|
|
} break;
|
|
case 'F': { //Knipperen
|
|
//Serial.println("F knipperen");
|
|
sendError();
|
|
} break;
|
|
|
|
case 'a': { //Open permanent
|
|
Serial.println("a");
|
|
|
|
} break;
|
|
case 'b': { //Sluiten
|
|
Serial.println("b");
|
|
|
|
} break;
|
|
case 'c': { //Open volgens eeprom
|
|
Serial.println("c");
|
|
|
|
} break;
|
|
case 'd': { //Sluit permanent
|
|
Serial.println("d");
|
|
|
|
} break;
|
|
case 'e': { //Zomer / winter stand
|
|
Serial.println("e");
|
|
|
|
} break;
|
|
case 'f': { //Rolluik
|
|
Serial.println("f");
|
|
|
|
} break;
|
|
|
|
case 'ã': { //Reset
|
|
Serial.println("ã");
|
|
ESP.restart();
|
|
} break;
|
|
|
|
|
|
default:
|
|
//Serial.println("short default");
|
|
sendError();
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
int eepromMap[] = {0, 0, 0, 'U', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'S', '2', '0', '0', '2', 'Q', '0', '1'};
|
|
void longMessage(unsigned char *packet) {
|
|
if ( (packet[2] == localConfig.ucsId[0] && packet[3] == localConfig.ucsId[1]) || (packet[2] == '.' && packet[3] == '.') ) {
|
|
//Serial.println("for box");
|
|
switch (packet[4]) {
|
|
case 'M': { //Ouput On
|
|
//Serial.println("M long");
|
|
if (packet[5] == '?' && packet[6] == '?') {
|
|
char str[] = {packet[7], packet[8], packet[9], packet[10]};
|
|
unsigned long value = strtoul(str, NULL, 10);
|
|
if (value <= 37) {
|
|
sendMessage('P', eepromMap[value]);
|
|
}
|
|
}
|
|
} break;
|
|
// case 'A': { //Ouput On
|
|
// //Serial.println("A");
|
|
// //Serial.println(packet[6]);
|
|
// uint8_t output = uint8_t(packet[6] - 0x30);
|
|
// mcp.digitalWrite(output, LOW);
|
|
// } break;
|
|
// case 'B': { //Output Off
|
|
// //Serial.println("B");
|
|
// uint8_t output = uint8_t(packet[6] - 0x30);
|
|
// mcp.digitalWrite(output, HIGH);
|
|
// } break;
|
|
// case 'C': { //Alles aan/uit
|
|
// //Serial.println("C");
|
|
// if (packet[6] == '0') { //alles uit
|
|
// mcp.writePort(MCP23017_PORT::A, 0xFF);
|
|
// } else if (packet[6] == '1') { //alles aan
|
|
// mcp.writePort(MCP23017_PORT::A, 0x00);
|
|
// }
|
|
// } break;
|
|
// case 'D': { //Identification
|
|
// //Serial.println("D");
|
|
// sendInputState();
|
|
// sendOutputState();
|
|
// } break;
|
|
// case 'E': { //Toggle
|
|
// //Serial.println("E");
|
|
// uint8_t output = uint8_t(packet[6] - 0x30);
|
|
// mcp.digitalWrite(output, !mcp.digitalRead(output));
|
|
// } break;
|
|
// case 'F': { //Knipperen
|
|
// Serial.println("F knipperen");
|
|
// } break;
|
|
|
|
// case 'a': { //Open permanent
|
|
// Serial.println("a");
|
|
//
|
|
// } break;
|
|
// case 'b': { //Sluiten
|
|
// Serial.println("b");
|
|
//
|
|
// } break;
|
|
// case 'c': { //Open volgens eeprom
|
|
// Serial.println("c");
|
|
//
|
|
// } break;
|
|
// case 'd': { //Sluit permanent
|
|
// Serial.println("d");
|
|
//
|
|
// } break;
|
|
// case 'e': { //Zomer / winter stand
|
|
// Serial.println("e");
|
|
//
|
|
// } break;
|
|
// case 'f': { //Rolluik
|
|
// Serial.println("f");
|
|
//
|
|
// } break;
|
|
|
|
default:
|
|
//Serial.println("long default");
|
|
sendError();
|
|
break;
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
void sendError() {
|
|
char msg[10] = "XX-ERROR&";
|
|
msg[0] = localConfig.ucsId[0];
|
|
msg[1] = localConfig.ucsId[1];
|
|
transmitMessage(msg);
|
|
}
|
|
void sendMessage(char command, int val) {
|
|
char msg[9] = "XX..XXX$";
|
|
msg[0] = localConfig.ucsId[0];
|
|
msg[1] = localConfig.ucsId[1];
|
|
msg[4] = command;
|
|
char hexval[3];
|
|
sprintf(hexval, "%02X", val);
|
|
msg[5] = hexval[0];
|
|
msg[6] = hexval[1];
|
|
transmitMessage(msg);
|
|
}
|
|
void sendInputState() {
|
|
char msg[9] = "XX..NXX$";
|
|
msg[0] = localConfig.ucsId[0];
|
|
msg[1] = localConfig.ucsId[1];
|
|
char hexval[3];
|
|
sprintf(hexval, "%02X", mcp.readPort(MCP23017Port::B));
|
|
msg[5] = hexval[0];
|
|
msg[6] = hexval[1];
|
|
transmitMessage(msg);
|
|
}
|
|
void sendOutputState() {
|
|
char msg[9] = "XX..OXX$";
|
|
msg[0] = localConfig.ucsId[0];
|
|
msg[1] = localConfig.ucsId[1];
|
|
char hexval[3];
|
|
sprintf(hexval, "%02X", mcp.readPort(MCP23017Port::A));
|
|
msg[5] = hexval[0];
|
|
msg[6] = hexval[1];
|
|
transmitMessage(msg);
|
|
}
|
|
void sendDoorState() {
|
|
|
|
}
|
|
void sendLockstate() {
|
|
|
|
}
|