Project

General

Profile

Statistics
| Revision:

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

History | View | Annotate | Download (2.03 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
    usb_putc(i2c_byte);
67
    if(recharge_i2c_prev_byte == I2C_MSG_HOMING_DATA)
68
        {
69
                recharge_i2c_homing_sensor_data = i2c_byte;
70
                recharge_i2c_prev_byte = i2c_byte;
71
        //usb_puti(i2c_byte);
72
                return;
73
        }
74

    
75
        switch(i2c_byte)
76
        {
77
                case I2C_MSG_BATTERY_CHARGING:
78
                        recharge_i2c_battery_charging = 1;
79
                        break;
80
                case I2C_MSG_CONTACT_ERROR:
81
                        recharge_i2c_battery_charging = 0;
82
                        break;
83
                case I2C_MSG_BATTERY_FULL:
84
                        recharge_i2c_battery_full = 1;
85
                        break;
86
                case I2C_MSG_NO_CONTACT:
87
                        recharge_i2c_battery_charging = 0;
88
                        break;
89
                default:
90
                        break;
91
        }
92
    recharge_i2c_homing_sensor_data = 0;
93
        recharge_i2c_prev_byte = i2c_byte;
94
}
95