4 #include <linux/types.h>
5 #include <linux/hiddev.h>
16 unsigned char data[64];
24 int send_msg(const struct msg *msg, int fd, int usage_code)
28 if (msg->direction != OUT) {
29 trace(0, "Message direction is not OUT\n");
34 trace(1, "Sending: ");
36 print_hex(msg->data + 1, datalen(msg->data) - 1);
38 print_ascii(msg->data + 1, datalen(msg->data) - 1);
40 ret = hiddev_write(msg->data, fd, usage_code);
47 int read_and_verify(struct msg *msg, int fd)
49 unsigned char buf[64];
53 ret = hiddev_read(buf + offset, sizeof(buf) - offset, fd);
61 memcpy(msg->data, buf, sizeof(buf));
62 trace(2, "Got data %d: ", datalen(buf));
64 print_hex(buf, datalen(buf));
66 print_ascii(buf, datalen(buf));
75 read_and_verify(&msg, fd);
76 if (datalen(msg.data) <= 36)
83 #define SET_FIRST_BYTE(byte) \
85 memset(&msg.data, 0, sizeof(msg.data)); \
86 msg.data[4] = (byte); \
90 #define SET_BYTE(idx, byte) \
92 msg.data[(idx) + 4] = (byte); \
96 #define SET_BYTES(byte) msg.data[j++] = (byte)
98 int send_pattern(int fd, int uc, unsigned char byte1, unsigned char byte2)
105 SET_FIRST_BYTE(0x01);
107 send_msg(&msg, fd, uc);
112 send_msg(&msg, fd, uc);
117 send_msg(&msg, fd, uc);
120 SET_FIRST_BYTE(0x02);
123 send_msg(&msg, fd, uc);
128 send_msg(&msg, fd, uc);
134 int communicate(int fd, int uc)
141 SET_FIRST_BYTE(0x01);
143 send_msg(&msg, fd, uc);
147 send_msg(&msg, fd, uc);
151 for (i = 0; i < 6; i++) {
153 send_msg(&msg, fd, uc);
158 send_msg(&msg, fd, uc);
163 send_msg(&msg, fd, uc);
166 send_pattern(fd, uc, 'R', 'A');
167 send_pattern(fd, uc, 'R', 'C');
168 send_pattern(fd, uc, 'R', 'D');
169 send_pattern(fd, uc, 'R', 'G');
170 send_pattern(fd, uc, 'R', 'I');
171 send_pattern(fd, uc, 'R', 'M');
172 send_pattern(fd, uc, 'R', 'P');
173 send_pattern(fd, uc, 'R', 'R');
174 send_pattern(fd, uc, 'R', 'S');
175 send_pattern(fd, uc, 'R', 'T');
176 send_pattern(fd, uc, 'R', 'U');
177 send_pattern(fd, uc, 'R', 'V');
178 send_pattern(fd, uc, 'R', 'W');
179 send_pattern(fd, uc, 'R', 'X');
180 send_pattern(fd, uc, 'W', 'K');
183 SET_FIRST_BYTE(0x08);
192 send_msg(&msg, fd, uc);
196 SET_FIRST_BYTE(0x02);
199 send_msg(&msg, fd, uc);
204 send_msg(&msg, fd, uc);
209 send_msg(&msg, fd, uc);
214 send_msg(&msg, fd, uc);
219 send_msg(&msg, fd, uc);
222 send_pattern(fd, uc, 'R', 'Z');
225 SET_FIRST_BYTE(0x01);
227 send_msg(&msg, fd, uc);
232 send_msg(&msg, fd, uc);
237 send_msg(&msg, fd, uc);
242 send_msg(&msg, fd, uc);
246 send_msg(&msg, fd, uc);
251 send_msg(&msg, fd, uc);
255 send_msg(&msg, fd, uc);
259 send_msg(&msg, fd, uc);
262 trace(0, "Glucose readings:\n");
265 send_msg(&msg, fd, uc);
266 read_and_verify(&in, fd);
267 print_ascii(in.data, datalen(in.data));
268 } while (datalen(in.data) > 45);
273 int main(int argc, char *argv[])
277 fd = hiddev_open(argv[1], &usage_code);
281 communicate(fd, usage_code);