diff --git a/gateway/include/output.h b/gateway/include/output.h new file mode 100644 index 0000000..31e61ba --- /dev/null +++ b/gateway/include/output.h @@ -0,0 +1,70 @@ +static const char* bin2tristate(const char* bin); +static char * dec2binWzerofill(unsigned long Dec, unsigned int bitLength); + +void output(unsigned long decimal, unsigned int length, unsigned int delay, unsigned int* raw, unsigned int protocol) { + + const char* b = dec2binWzerofill(decimal, length); + Serial.print("Decimal: "); + Serial.print(decimal); + Serial.print(" ("); + Serial.print( length ); + Serial.print("Bit) Binary: "); + Serial.print( b ); + Serial.print(" Tri-State: "); + Serial.print( bin2tristate( b) ); + Serial.print(" PulseLength: "); + Serial.print(delay); + Serial.print(" microseconds"); + Serial.print(" Protocol: "); + Serial.println(protocol); + + Serial.print("Raw data: "); + for (unsigned int i=0; i<= length*2; i++) { + Serial.print(raw[i]); + Serial.print(","); + } + Serial.println(); + Serial.println(); +} + +static const char* bin2tristate(const char* bin) { + static char returnValue[50]; + int pos = 0; + int pos2 = 0; + while (bin[pos]!='\0' && bin[pos+1]!='\0') { + if (bin[pos]=='0' && bin[pos+1]=='0') { + returnValue[pos2] = '0'; + } else if (bin[pos]=='1' && bin[pos+1]=='1') { + returnValue[pos2] = '1'; + } else if (bin[pos]=='0' && bin[pos+1]=='1') { + returnValue[pos2] = 'F'; + } else { + return "not applicable"; + } + pos = pos+2; + pos2++; + } + returnValue[pos2] = '\0'; + return returnValue; +} + +static char * dec2binWzerofill(unsigned long Dec, unsigned int bitLength) { + static char bin[64]; + unsigned int i=0; + + while (Dec > 0) { + bin[32+i++] = ((Dec & 1) > 0) ? '1' : '0'; + Dec = Dec >> 1; + } + + for (unsigned int j = 0; j< bitLength; j++) { + if (j >= bitLength - i) { + bin[j] = bin[ 31 + i - (j - (bitLength - i)) ]; + } else { + bin[j] = '0'; + } + } + bin[bitLength] = '\0'; + + return bin; +} diff --git a/gateway/platformio.ini b/gateway/platformio.ini index 75e972a..2e57c72 100644 --- a/gateway/platformio.ini +++ b/gateway/platformio.ini @@ -23,7 +23,7 @@ lib_deps = adafruit/Adafruit Unified Sensor@^1.1.4 adafruit/DHT sensor library@1.3.10 https://git.hodos.ro/arduino/lib_serial-reader.git@^1.0.0 -build_flags = -D DHT_SENSOR=0 +build_flags = -D DHT_SENSOR=0 -D DEBUG_RAW=0 upload_port = /dev/ttyUSB0 check_tool = cppcheck check_flags = --enable=all diff --git a/gateway/src/gateway.cpp b/gateway/src/gateway.cpp index a8936d7..4a8e019 100644 --- a/gateway/src/gateway.cpp +++ b/gateway/src/gateway.cpp @@ -3,6 +3,7 @@ #include "Dht.h" #include "Protocol_1.h" #include "Protocol_2.h" +#include "output.h" #include #define RESET_PIN 10 @@ -48,6 +49,12 @@ Protocol* findProtocol(unsigned int protocol) { void readRcSwitch() { if (mySwitch.available()) { +#if DEBUG_RAW + if (mySwitch.available()) { + output(mySwitch.getReceivedValue(), mySwitch.getReceivedBitlength(), mySwitch.getReceivedDelay(), mySwitch.getReceivedRawdata(),mySwitch.getReceivedProtocol()); + mySwitch.resetAvailable(); + } +#else unsigned long value = mySwitch.getReceivedValue(); mySwitch.resetAvailable(); @@ -59,6 +66,7 @@ void readRcSwitch() { serializeJson(jsonDoc, Serial); Serial.println(); } +#endif } }