Project

General

Profile

Statistics
| Revision:

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