Project

General

Profile

Statistics
| Revision:

root / branches / autonomous_recharging / code / projects / autonomous_recharging / dragonfly / recharge_i2c.c @ 138

History | View | Annotate | Download (1.8 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
int recharge_i2c_is_battery_charging()
48
{
49
        return recharge_i2c_battery_charging;
50
}
51

    
52
/**
53
 * Called when we receive a byte through i2c.
54
 *
55
 * @param c the byte we receive
56
 **/
57
void recharge_i2c_receive(char i2c_byte)
58
{
59
        if(recharge_i2c_prev_byte == I2C_MSG_HOMING_DATA)
60
        {
61
                recharge_i2c_homing_sensor_data = i2c_byte;
62
                recharge_i2c_prev_byte = i2c_byte;
63
                return;
64
        }
65

    
66
        switch(i2c_byte)
67
        {
68
                case I2C_MSG_BATTERY_CHARGING:
69
                        recharge_i2c_battery_charging = 1;
70
                        break;
71
                case I2C_MSG_CONTACT_ERROR:
72
                        recharge_i2c_battery_charging = 0;
73
                        break;
74
                case I2C_MSG_BATTERY_FULL:
75
                        recharge_i2c_battery_full = 1;
76
                        break;
77
                case I2C_MSG_NO_CONTACT:
78
                        recharge_i2c_battery_charging = 0;
79
                        break;
80
                default:
81
                        break;
82
        }
83
        recharge_i2c_prev_byte = i2c_byte;
84
}
85