forked from r10r/rcswitch-pi
-
Notifications
You must be signed in to change notification settings - Fork 1
/
receiver.cpp
95 lines (84 loc) · 2.32 KB
/
receiver.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
/*
Usage: ./receiver
*/
#include "RCSwitch.h"
#include <stdlib.h>
#include <stdio.h>
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;
}
static char* bin2tristate(char* bin) {
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';
printf("[tri: %s]\n", returnValue);
printf("[addressCode: ");
for (int i=0; i<8; i++) {
printf("%c", returnValue[i]);
}
printf("]\n");
return returnValue;
}
int main(int argc, char *argv[]) {
/*
input PIN is hardcoded for testing purposes
see https://projects.drogon.net/raspberry-pi/wiringpi/pins/
for pin mapping of the raspberry pi GPIO connector
*/
int PIN = 2;
if (wiringPiSetup () == -1) return 1;
printf("receiving\n");
RCSwitch mySwitch = RCSwitch();
mySwitch.enableReceive(PIN);
while (1) {
if (mySwitch.available()) {
int value = mySwitch.getReceivedValue();
printf("==========Received==========\n");
if (value == 0) {
printf("Unknown encoding");
} else {
int length = mySwitch.getReceivedBitlength();
unsigned int decimal = mySwitch.getReceivedValue();
char* b = dec2binWzerofill(decimal, length);
printf("[decimal: %i]\n", decimal);
printf("[binary: %s]\n", b);
char* c = bin2tristate(b);
printf("%i", length);
printf(" bit\n");
printf("Protocol: ");
printf("%i\n", mySwitch.getReceivedProtocol());
printf("==========END==========\n");
}
mySwitch.resetAvailable();
}
}
return 0;
}