a910b474e6fd5ebd1f159861532fd777f3f8e1ce
[protos/xbee-avr.git] / rc_proto.c
1 #include <aversive.h>
2 #include <aversive/queue.h>
3
4 #include <stdint.h>
5
6 #include <uart.h>
7
8 #include <scheduler.h>
9 #include <clock_time.h>
10 #include <parse.h>
11 #include <rdline.h>
12 #include <timer.h>
13
14 #include "xbee_proto.h"
15 #include "callout.h"
16 #include "rc_proto.h"
17 #include "main.h"
18
19 struct power_levels {
20         int ttl;
21         int power_db;
22 };
23
24 struct power_levels power_levels[MAX_POWER_LEVEL];
25
26 static int set_power_level(void *frame, unsigned len, void *arg)
27 {
28         struct xbee_atresp_hdr *atresp = (struct xbee_atresp_hdr *)frame;
29         int level = (intptr_t)arg;
30         uint8_t db;
31
32         /* XXX check if this test is correct */
33         if (len < sizeof(struct xbee_atresp_hdr) + sizeof(uint8_t))
34                 return -1;
35
36         db = atresp->data[0];
37         power_levels[level].power_db = db;
38         power_levels[level].ttl = 2;
39         return 0;
40 }
41
42 void rc_proto_rx_range(int power_level)
43 {
44         xbeeapp_send_atcmd("DB", NULL, 0, 0,
45                            set_power_level, (void *)(intptr_t)power_level);
46
47 }
48
49