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