root / branches / autonomous_recharging / code / projects / autonomous_recharging / dragonfly / recharge_i2c.c @ 210
History | View | Annotate | Download (1.93 KB)
1 |
#include "recharge_i2c.h" |
---|---|
2 |
|
3 |
#include "recharge_defs.h" |
4 |
#include <i2c.h> |
5 |
|
6 |
// definitions for I2C messages
|
7 |
#define I2C_MSG_ACKNOWLEDGE 'A' |
8 |
#define I2C_MSG_BATTERY_CHARGING 'C' |
9 |
#define I2C_MSG_DATA 'D' |
10 |
#define I2C_MSG_CONTACT_ERROR 'E' |
11 |
#define I2C_MSG_BATTERY_FULL 'F' |
12 |
#define I2C_MSG_HOMING_DATA 'H' |
13 |
#define I2C_MSG_NO_CONTACT 'N' |
14 |
#define I2C_MSG_REQUEST_DATA 'R' |
15 |
#define I2C_MSG_GO_TO_SLEEP 'Y' |
16 |
#define I2C_MSG_ENTERING_SLEEP 'Z' |
17 |
|
18 |
// function prototypes
|
19 |
void recharge_i2c_receive(char i2c_byte); |
20 |
|
21 |
// global variables
|
22 |
char recharge_i2c_prev_byte = 0; |
23 |
char recharge_i2c_homing_sensor_data = 0; |
24 |
char recharge_i2c_battery_full = 0; |
25 |
char recharge_i2c_battery_charging = 0; |
26 |
|
27 |
void recharge_i2c_init()
|
28 |
{ |
29 |
i2c_init(1, NULL, recharge_i2c_receive, NULL); |
30 |
} |
31 |
|
32 |
/**
|
33 |
* Returns the latest reading from the homing sensor.
|
34 |
*
|
35 |
* @return the latest reading from the homing sensor
|
36 |
**/
|
37 |
int recharge_i2c_get_homing_reading()
|
38 |
{ |
39 |
return (int)recharge_i2c_homing_sensor_data; |
40 |
} |
41 |
|
42 |
int recharge_i2c_is_battery_full()
|
43 |
{ |
44 |
return recharge_i2c_battery_full;
|
45 |
} |
46 |
|
47 |
void recharge_i2c_set_battery_full(int full) |
48 |
{ |
49 |
if (!full)
|
50 |
recharge_i2c_battery_charging = 0;
|
51 |
recharge_i2c_battery_full = full; |
52 |
} |
53 |
|
54 |
int recharge_i2c_is_battery_charging()
|
55 |
{ |
56 |
return recharge_i2c_battery_charging;
|
57 |
} |
58 |
|
59 |
/**
|
60 |
* Called when we receive a byte through i2c.
|
61 |
*
|
62 |
* @param c the byte we receive
|
63 |
**/
|
64 |
void recharge_i2c_receive(char i2c_byte) |
65 |
{ |
66 |
if(recharge_i2c_prev_byte == I2C_MSG_HOMING_DATA)
|
67 |
{ |
68 |
recharge_i2c_homing_sensor_data = i2c_byte; |
69 |
recharge_i2c_prev_byte = i2c_byte; |
70 |
return;
|
71 |
} |
72 |
|
73 |
switch(i2c_byte)
|
74 |
{ |
75 |
case I2C_MSG_BATTERY_CHARGING:
|
76 |
recharge_i2c_battery_charging = 1;
|
77 |
break;
|
78 |
case I2C_MSG_CONTACT_ERROR:
|
79 |
recharge_i2c_battery_charging = 0;
|
80 |
break;
|
81 |
case I2C_MSG_BATTERY_FULL:
|
82 |
recharge_i2c_battery_full = 1;
|
83 |
break;
|
84 |
case I2C_MSG_NO_CONTACT:
|
85 |
recharge_i2c_battery_charging = 0;
|
86 |
break;
|
87 |
default:
|
88 |
break;
|
89 |
} |
90 |
recharge_i2c_prev_byte = i2c_byte; |
91 |
} |
92 |
|