Subversion Repositories Code-Repo

Compare Revisions

Ignore whitespace Rev 155 → Rev 157

/PIC Stuff/PICX_27J13/xbee.c
1,16 → 1,17
#include <xc.h>
#include <stdio.h>
#include <string.h>
#include "defines.h"
#include "xbee.h"
#include <string.h>
#include "uart.h"
 
#pragma udata XBEE_BUFFER
static XBEE_DATA xbee_data;
#pragma udata
static XBEE_DATA *xbee_data_p = &xbee_data;
static XBEE_DATA *xbee_data_p;
static void *xbee_data_frame;
static void *xbee_frame;
 
/* Initialize variables used by this library */
void XBee_Init() {
void XBee_Init(XBEE_DATA *data) {
xbee_data_p = data;
XBEE_CTS_TRIS = 1; // RB0 is CTS, set by XBee chip
XBEE_RTS_TRIS = 0; // RB1 is RTS, set by PIC
 
31,7 → 32,7
}
 
/* Here we handle the serial input from the UART interrupt */
void XBee_Serial_In(unsigned char c) {
void XBee_Serial_In(char c) {
// For some reason writing the length straight to xbee_data doesnt seem to work
// so we work around it by pointing to the length bytes directly
XBEE_ADDRESS_16 *length = xbee_frame + 1;
56,7 → 57,7
xbee_data_p->checksum_sum = 0;
xbee_data_p->frame_rdy = 0;
xbee_data_p->read_state = XBEE_STATE_READ_LENGTH_HIGH;
*((unsigned char *)xbee_frame) = XBEE_START_DELIMITER;
*((char *)xbee_frame) = XBEE_START_DELIMITER;
} else {
switch (xbee_data_p->read_state) {
case XBEE_STATE_READ_START:
92,7 → 93,9
// XBee_Process_Received_Frame();
} else {
// If checksum does not match, drop frame
DBG_PRINT_XBEE("XBEE: checksum mismatch\r\n");
char output[32];
sprintf(output, "XBEE: checksum mismatch\r\n");
DBG_PRINT_XBEE(output, strlen(output));
}
xbee_data_p->read_state = XBEE_STATE_READ_START;
break;
104,40 → 107,51
void XBee_Process_Received_Frame() {
// DBG_PRINT_XBEE("Length: %d\r\n", xbee_data_p->rcv_frame.length.INT_16.int_value);
// Here we process the received frame depending on the frame type
switch (*((unsigned char *) xbee_data_frame)) {
char output[64];
switch (*((char *) xbee_data_frame)) {
case XBEE_RX_AT_COMMAND_RESPONSE:
DBG_PRINT_XBEE("XBEE: parsing recieved AT command response frame\r\n");
sprintf(output, "XBEE: parsing recieved AT command response frame\r\n");
DBG_PRINT_XBEE(output, strlen(output));
break;
case XBEE_RX_DATA_PACKET:
DBG_PRINT_XBEE("XBEE: parsing recieved data frame\r\n");
sprintf(output, "XBEE: parsing recieved data frame\r\n");
DBG_PRINT_XBEE(output, strlen(output));
break;
case XBEE_RX_DATA_TX_STATUS:
DBG_PRINT_XBEE("XBEE: parsing recieved TX status frame\r\n");
sprintf(output, "XBEE: parsing recieved TX status frame\r\n");
DBG_PRINT_XBEE(output, strlen(output));
break;
case XBEE_RX_IO_DATA_SAMPLE:
DBG_PRINT_XBEE("XBEE: parsing recieved IO data sample frame\r\n");
sprintf(output, "XBEE: parsing recieved IO data sample frame\r\n");
DBG_PRINT_XBEE(output, strlen(output));
break;
case XBEE_RX_EXPLICIT_COMMAND:
DBG_PRINT_XBEE("XBEE: parsing recieved explicit command frame\r\n");
sprintf(output, "XBEE: parsing recieved explicit command frame\r\n");
DBG_PRINT_XBEE(output, strlen(output));
break;
case XBEE_RX_REMOTE_AT_COMMAND_RESPONSE:
DBG_PRINT_XBEE("XBEE: parsing recieved remote AT command frame\r\n");
sprintf(output, "XBEE: parsing recieved remote AT command frame\r\n");
DBG_PRINT_XBEE(output, strlen(output));
break;
case XBEE_RX_ROUTE_RECORD:
DBG_PRINT_XBEE("XBEE: parsing recieved route record frame\r\n");
sprintf(output, "XBEE: parsing recieved route record frame\r\n");
DBG_PRINT_XBEE(output, strlen(output));
break;
case XBEE_RX_NODE_IDENTIFICATION:
DBG_PRINT_XBEE("XBEE: parsing recieved node identification frame\r\n");
sprintf(output, "XBEE: parsing recieved node identification frame\r\n");
DBG_PRINT_XBEE(output, strlen(output));
break;
case XBEE_RX_FRAME_MODEM_STATUS:
DBG_PRINT_XBEE("XBEE: parsing recieved modem status frame\r\n");
sprintf(output, "XBEE: parsing recieved modem status frame\r\n");
DBG_PRINT_XBEE(output, strlen(output));
break;
default:
DBG_PRINT_XBEE("XBEE: (ERROR) unrecognized frame type\r\n");
sprintf(output, "XBEE: (ERROR) unrecognized frame type\r\n");
DBG_PRINT_XBEE(output, strlen(output));
}
}
 
unsigned int XBee_Get_Received_Frame(unsigned char *frame) {
unsigned int XBee_Get_Received_Frame(char *frame) {
if (!xbee_data_p->frame_rdy) {
return 0;
} else {
147,10 → 161,10
}
}
 
void XBee_Process_Transmit_Frame(unsigned char *data, unsigned char length) {
void XBee_Process_Transmit_Frame(char *data, char length) {
#ifdef XBEE_USE_ESCAPE_CHAR
unsigned int i = 0;
unsigned char chksum = 0;
char chksum = 0;
 
// Write the start bit and length
UART1_WriteC(XBEE_START_DELIMITER);
182,7 → 196,7
}
#else
unsigned int i = 0;
unsigned char chksum = 0;
char chksum = 0;
 
UART1_WriteC(XBEE_START_DELIMITER);
UART1_WriteC(0);
195,7 → 209,7
#endif
}
 
void XBee_Set_RTS(unsigned char c) {
void XBee_Set_RTS(char c) {
if (c) {
XBEE_RTS_LAT = 1; // Set high to stop receiving data
} else {
203,8 → 217,8
}
}
 
unsigned char XBee_Read_CTS() {
unsigned char c = XBEE_CTS_PORT;
char XBee_Read_CTS() {
char c = XBEE_CTS_PORT;
if (c) {
return 0x1; // High indicates stop sending data
} else {