1 | int main(int argc, char* argv[])
|
2 | {
|
3 | uint_fast16_t i, j;
|
4 | ssize_t l;
|
5 | uint8_t buf[512];
|
6 | int vid, pid, tmp;
|
7 | char *rfmData;
|
8 | char uri[512];
|
9 | FILE *checkSendFile;
|
10 |
|
11 | const unsigned char rawVid[2] = {
|
12 | USB_CFG_VENDOR_ID
|
13 | },
|
14 | rawPid[2] = {
|
15 | USB_CFG_DEVICE_ID
|
16 | };
|
17 |
|
18 | char vendor[] =
|
19 | {
|
20 | USB_CFG_VENDOR_NAME, 0
|
21 | },
|
22 | product[] =
|
23 | {
|
24 | USB_CFG_DEVICE_NAME, 0
|
25 | };
|
26 |
|
27 | usb_init();
|
28 | g_type_init();
|
29 |
|
30 | /* usb setup */
|
31 | vid = rawVid[1] * 256 + rawVid[0];
|
32 | pid = rawPid[1] * 256 + rawPid[0];
|
33 |
|
34 | if (usbOpenDevice (&udhandle, vid, vendor, pid, product) != 0) {
|
35 | printf ("Can't find USB Device w/ uid %04X, pid %04X\r\n", vid, pid);
|
36 | console_exit(__LINE__ * -1);
|
37 | return __LINE__ * -1;
|
38 | }
|
39 |
|
40 | signal (SIGINT, console_exit);
|
41 | signal (SIGKILL, console_exit);
|
42 | signal (SIGHUP, console_exit);
|
43 |
|
44 | tmp=0;
|
45 | i=0;
|
46 |
|
47 | printf ("Connection established.\r\n");
|
48 |
|
49 | if (argc > 1) {
|
50 | // Senden
|
51 | uint8_t temp[32];
|
52 | uint8_t address[4];
|
53 | uint8_t address_byte = 0;
|
54 |
|
55 | // Es wird bereits gesendet
|
56 | while (checkSendFile = fopen("send", "r")) {
|
57 | if (fgetc(checkSendFile) == '0') {
|
58 | fclose(checkSendFile);
|
59 | break;
|
60 | }
|
61 |
|
62 | fclose(checkSendFile);
|
63 | }
|
64 |
|
65 | checkSendFile = fopen("send", "w");
|
66 | fprintf(checkSendFile, "%d", 1);
|
67 | fclose(checkSendFile);
|
68 |
|
69 | rfmData = "";
|
70 |
|
71 | temp[0] = USB_SENDSTR;
|
72 | temp[1] = 0x12; // Adresse
|
73 | temp[2] = 0xEE;
|
74 | temp[3] = 0xDD;
|
75 | temp[4] = 0xCC;
|
76 |
|
77 | // 10 mal versuchen zu senden
|
78 | for (j = 0; j < 10; j++) {
|
79 | usb_control_msg(udhandle,
|
80 | USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_ENDPOINT_OUT,
|
81 | RFMUSB_RQ_RFM12_PUT, USB_TXPACKET, 0, temp, sizeof temp,
|
82 | 5000
|
83 | );
|
84 |
|
85 | // Auf Empfangsbestätigung warten
|
86 | for (i = 0; i < 255; i++) {
|
87 | tmp = usb_control_msg (udhandle,
|
88 | USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_ENDPOINT_IN,
|
89 | RFMUSB_RQ_RFM12_GET, 0, 0, buf, sizeof (buf),
|
90 | 5000
|
91 | );
|
92 |
|
93 | // Empfangen
|
94 | if (tmp > 0) { /* data received from usb bus */
|
95 | if (buf[2] == 0) {
|
96 | checkSendFile = fopen("send", "w");
|
97 | fprintf(checkSendFile, "%d", 0);
|
98 | fclose(checkSendFile);
|
99 |
|
100 | g_printf("Empfangsbestaetigung\r\n");
|
101 | return 1;
|
102 | }
|
103 | }
|
104 |
|
105 | usleep (1000);
|
106 | }
|
107 | }
|
108 |
|
109 | checkSendFile = fopen("send", "w");
|
110 | fprintf(checkSendFile, "%d", 0);
|
111 | fclose(checkSendFile);
|
112 |
|
113 | g_printf("Abbruch\r\n");
|
114 | return 0;
|
115 | } else {
|
116 | // Empfang
|
117 | char temp[4];
|
118 | uint8_t receiveReturn[4];
|
119 | receiveReturn[0] = USB_SENDCHAR;
|
120 |
|
121 | while (1) {
|
122 | // Es wird gesendet
|
123 | while (checkSendFile = fopen("send", "r")) {
|
124 | if (fgetc(checkSendFile) == '0') {
|
125 | fclose(checkSendFile);
|
126 | break;
|
127 | }
|
128 |
|
129 | fclose(checkSendFile);
|
130 | }
|
131 |
|
132 | tmp = usb_control_msg (udhandle,
|
133 | USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_ENDPOINT_IN,
|
134 | RFMUSB_RQ_RFM12_GET, 0, 0, buf, sizeof (buf),
|
135 | 5000
|
136 | );
|
137 |
|
138 | if (tmp > 0) { /* data received from usb bus */
|
139 | g_printf("#%d: ", buf[1]);
|
140 |
|
141 | if (buf[2] != 0) {
|
142 | // Empfangsbestätigung senden
|
143 | receiveReturn[1] = buf[1];
|
144 | receiveReturn[2] = 0xAC;
|
145 |
|
146 | usb_control_msg (udhandle,
|
147 | USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_ENDPOINT_OUT,
|
148 | RFMUSB_RQ_RFM12_PUT, USB_TXPACKET, 0, receiveReturn, sizeof receiveReturn,
|
149 | 5000
|
150 | );
|
151 | rfmData = "/data/";
|
152 |
|
153 | for (i=3; i<tmp; i++) {
|
154 | g_printf("%.2x ", buf[i]);
|
155 | g_snprintf(temp, sizeof temp, "%.2x", buf[i]);
|
156 | rfmData = g_strconcat(rfmData, temp, NULL);
|
157 | }
|
158 |
|
159 | g_printf("\r\n");
|
160 |
|
161 | // URI erstellen und aufrufen
|
162 | g_snprintf(uri, sizeof uri, "%s%d%s", "http://os.gibson.guinness.lan/homecontrol/rfm/input/from/", buf[1], rfmData);
|
163 | request(uri);
|
164 | } else {
|
165 | g_printf("Empfangsbestaetigung\r\n");
|
166 | }
|
167 | }
|
168 |
|
169 | usleep (10000);
|
170 | }
|
171 | }
|
172 |
|
173 | return 1;
|
174 | }
|