mirror of https://github.com/arendst/Tasmota.git
71 lines
1.8 KiB
Arduino
71 lines
1.8 KiB
Arduino
|
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;
|
||
|
}
|