Subversion Repositories Code-Repo

Rev

Rev 157 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 157 Rev 158
Line 1... Line 1...
1
#include <xc.h>
1
#include <xc.h>
2
#include <stdio.h>
2
#include <stdio.h>
3
#include <string.h>
3
#include <string.h>
4
#include "defines.h"
4
#include "defines.h"
5
#include "xbee.h"
5
#include "comm_xbee.h"
6
#include "uart.h"
6
#include "base_UART.h"
7
 
7
 
8
static XBEE_DATA *xbee_data_p;
8
static XBEE_DATA *xbee_data_p;
9
static void *xbee_data_frame;
9
static void *xbee_data_frame;
10
static void *xbee_frame;
10
//static void *xbee_frame;
11
 
11
 
12
/* Initialize variables used by this library */
12
/* Initialize variables used by this library */
13
void XBee_Init(XBEE_DATA *data) {
13
void XBee_Init(XBEE_DATA *data) {
14
    xbee_data_p = data;
14
    xbee_data_p = data;
15
    XBEE_CTS_TRIS = 1; // RB0 is CTS, set by XBee chip
15
    XBEE_CTS_TRIS = 1; // RB0 is CTS, set by XBee chip
Line 26... Line 26...
26
 
26
 
27
//    memset(&xbee_data, 0, 32);
27
//    memset(&xbee_data, 0, 32);
28
    
28
    
29
    // Grab a pointer to where the unique frame array starts
29
    // Grab a pointer to where the unique frame array starts
30
    xbee_data_frame = &(xbee_data_p->rcv_frame.FRAME);
30
    xbee_data_frame = &(xbee_data_p->rcv_frame.FRAME);
31
    xbee_frame = &(xbee_data_p->rcv_frame);
31
//    xbee_frame = &(xbee_data_p->rcv_frame);
32
}
32
}
33
 
33
 
34
/* Here we handle the serial input from the UART interrupt */
34
/* Here we handle the serial input from the UART interrupt */
35
void XBee_Serial_In(char c) {
35
void XBee_Serial_In(char c) {
36
    // For some reason writing the length straight to xbee_data doesnt seem to work
36
    // For some reason writing the length straight to xbee_data doesnt seem to work
37
    //  so we work around it by pointing to the length bytes directly
37
    //  so we work around it by pointing to the length bytes directly
38
    XBEE_ADDRESS_16 *length = xbee_frame + 1;
38
//    XBEE_ADDRESS_16 *length = xbee_frame + 1;
39
    
39
    
40
#ifdef XBEE_USE_ESCAPE_CHAR
40
#ifdef XBEE_USE_ESCAPE_CHAR
41
    if (c == XBEE_ESCAPE_CHAR) {
41
    if (c == XBEE_ESCAPE_CHAR) {
42
        // Next byte needs is an escaped char
42
        // Next byte needs is an escaped char
43
        xbee_data_p->escape_flag = 1;
43
        xbee_data_p->escape_flag = 1;
Line 55... Line 55...
55
        // On detect start delimiter, clear out initial array
55
        // On detect start delimiter, clear out initial array
56
        xbee_data_p->dataind = 0;
56
        xbee_data_p->dataind = 0;
57
        xbee_data_p->checksum_sum = 0;
57
        xbee_data_p->checksum_sum = 0;
58
        xbee_data_p->frame_rdy = 0;
58
        xbee_data_p->frame_rdy = 0;
59
        xbee_data_p->read_state = XBEE_STATE_READ_LENGTH_HIGH;
59
        xbee_data_p->read_state = XBEE_STATE_READ_LENGTH_HIGH;
60
        *((char *)xbee_frame) = XBEE_START_DELIMITER;
60
//        *((char *)xbee_frame) = XBEE_START_DELIMITER;
-
 
61
        xbee_data_p->rcv_frame.start_delimiter = XBEE_START_DELIMITER;
-
 
62
 
61
    } else {
63
    } else {
62
        switch (xbee_data_p->read_state) {
64
        switch (xbee_data_p->read_state) {
63
            case XBEE_STATE_READ_START:
65
            case XBEE_STATE_READ_START:
64
                // Do nothing and wait till start bit is read
66
                // Do nothing and wait till start bit is read
65
                break;
67
                break;
66
            case XBEE_STATE_READ_LENGTH_HIGH:
68
            case XBEE_STATE_READ_LENGTH_HIGH:
67
                // Read length (MSB)
69
                // Read length (MSB)
68
                length->INT_16.char_value[1] = c;
70
//                length->INT_16.char_value[1] = c;
-
 
71
                xbee_data_p->rcv_frame.length.INT_16.char_value[1] = c;
69
                xbee_data_p->read_state = XBEE_STATE_READ_LENGTH_LOW;
72
                xbee_data_p->read_state = XBEE_STATE_READ_LENGTH_LOW;
70
                break;
73
                break;
71
            case XBEE_STATE_READ_LENGTH_LOW:
74
            case XBEE_STATE_READ_LENGTH_LOW:
72
                // Read length (LSB)
75
                // Read length (LSB)
73
                length->INT_16.char_value[0] = c;
76
//                length->INT_16.char_value[0] = c;
-
 
77
                xbee_data_p->rcv_frame.length.INT_16.char_value[0] = c;
74
                xbee_data_p->read_state = XBEE_STATE_READ_FRAME_DATA;
78
                xbee_data_p->read_state = XBEE_STATE_READ_FRAME_DATA;
75
                break;
79
                break;
76
            case XBEE_STATE_READ_FRAME_DATA:
80
            case XBEE_STATE_READ_FRAME_DATA:
77
                // Read unique frame data
81
                // Read unique frame data
78
                if (xbee_data_p->dataind < xbee_data_p->rcv_frame.length.INT_16.int_value) {
82
                if (xbee_data_p->dataind < xbee_data_p->rcv_frame.length.INT_16.int_value) {