Project

General

Profile

Statistics
| Revision:

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

History | View | Annotate | Download (2.36 KB)

1
/**
2
 * @file recharge_i2c.c
3
 * @brief Handles I2C data 
4
 *
5
 * Handles I2C data received from charge board and updates battery status
6
 * 
7
 * @author Colony Project, CMU Robotics Club
8
 **/
9
 
10
#include "recharge_i2c.h"
11

    
12
#include "recharge_defs.h"
13
#include <i2c.h>
14

    
15
// definitions for I2C messages
16
#define I2C_MSG_ACKNOWLEDGE       'A'
17
#define I2C_MSG_BATTERY_CHARGING  'C'
18
#define I2C_MSG_DATA              'D'
19
#define I2C_MSG_CONTACT_ERROR     'E'
20
#define I2C_MSG_BATTERY_FULL      'F'
21
#define I2C_MSG_HOMING_DATA       'H'
22
#define I2C_MSG_NO_CONTACT        'N'
23
#define I2C_MSG_REQUEST_DATA      'R'
24
#define I2C_MSG_GO_TO_SLEEP       'Y'
25
#define I2C_MSG_ENTERING_SLEEP    'Z'
26

    
27
// function prototypes
28
void recharge_i2c_receive(char i2c_byte);
29

    
30
// global variables
31
char recharge_i2c_prev_byte = 0;
32
char recharge_i2c_homing_sensor_data = 0;
33
char recharge_i2c_battery_full = 0;
34
char recharge_i2c_battery_charging = 0;
35

    
36
void recharge_i2c_init()
37
{
38
        i2c_init(1, NULL, recharge_i2c_receive, NULL);
39
}
40

    
41
/**
42
 * Returns the latest reading from the homing sensor.
43
 *
44
 * @return the latest reading from the homing sensor
45
 **/
46
int recharge_i2c_get_homing_reading()
47
{
48
        return (int)recharge_i2c_homing_sensor_data;
49
}
50

    
51
/**
52
 * Check if battery is fully charged.
53
 *
54
 * @return 1 is battery is full, 0 if not
55
 **/
56
int recharge_i2c_is_battery_full()
57
{
58
        return recharge_i2c_battery_full;
59
}
60

    
61
/**
62
 * Set battery status.
63
 *
64
 * @param 1 is battery is full, 0 if not
65
 **/
66
void recharge_i2c_set_battery_full(int full)
67
{
68
        recharge_i2c_battery_full = full;
69
}
70

    
71
/**
72
 * Check if battery is charging.
73
 *
74
 * @return 1 is battery is charging, 0 if not
75
 **/
76
int recharge_i2c_is_battery_charging()
77
{
78
        return recharge_i2c_battery_charging;
79
}
80

    
81
/**
82
 * Called when we receive a byte through i2c.
83
 *
84
 * @param c the byte we receive
85
 **/
86
void recharge_i2c_receive(char i2c_byte)
87
{
88
    if(recharge_i2c_prev_byte == I2C_MSG_HOMING_DATA)
89
        {
90
                recharge_i2c_homing_sensor_data = i2c_byte;
91
                recharge_i2c_prev_byte = i2c_byte;
92
                return;
93
        }
94

    
95
        switch(i2c_byte)
96
        {
97
                case I2C_MSG_BATTERY_CHARGING:
98
                        recharge_i2c_battery_charging = 1;
99
                        break;
100
                case I2C_MSG_CONTACT_ERROR:
101
                        recharge_i2c_battery_charging = 0;
102
                        break;
103
                case I2C_MSG_BATTERY_FULL:
104
                        recharge_i2c_battery_full = 1;
105
                        break;
106
                case I2C_MSG_NO_CONTACT:
107
                        recharge_i2c_battery_charging = 0;
108
                        break;
109
                default:
110
                        break;
111
        }
112
    recharge_i2c_homing_sensor_data = 0;
113
        recharge_i2c_prev_byte = i2c_byte;
114
}
115