Project

General

Profile

Statistics
| Revision:

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