Changeset - a20e51697fd8
[Not reviewed]
default
0 7 0
ethanzonca@CL-ENS241-08.cedarville.edu - 12 years ago 2013-01-15 21:35:00
ethanzonca@CL-ENS241-08.cedarville.edu
Initial XBee AT mode and network scan implementation started. Need to store data from network scan in a reasonable manner.
7 files changed with 147 insertions and 6 deletions:
0 comments (0 inline, 0 general)
master/master/config.h
Show inline comments
 
@@ -28,7 +28,9 @@
 
// SD Card
 
#define ERROR_SD_INIT 2
 
#define ERROR_SD_PARTITION 3
 
#define ERROR_CRAP 6
 
#define ERROR_SD_FILE 4
 
 
#define ERROR_CRAP 15
 
 
// --------------------------------------------------------------------------
 
// Slave Sensors config (slavesensors.c)
master/master/lib/logger.c
Show inline comments
 
@@ -64,6 +64,7 @@ void logger_setup()
 
	if(!fs)
 
	{
 
		// opening filesystem failed
 
		led_errorcode(ERROR_SD_PARTITION);
 
		return;
 
	}
 
	
 
@@ -75,6 +76,7 @@ void logger_setup()
 
	{
 
		// opening root directory failed
 
		_delay_ms(10);
 
		led_errorcode(ERROR_SD_FILE);
 
		return;
 
	}
 
	
 
@@ -87,7 +89,9 @@ void logger_setup()
 
	sprintf(filename, "data%d.csv",++logid);
 
	
 
	// TODO: Catch errors here
 
	fat_create_file(dd, filename, &directory);
 
	if(!fat_create_file(dd, filename, &directory)) {
 
		led_errorcode(ERROR_SD_FILE);
 
	}		
 
		
 
	eeprom_update_byte(LOGGER_ID_EEPROM_ADDR, logid);
 

	
 
@@ -95,6 +99,7 @@ void logger_setup()
 
	fd = open_file_in_dir(fs, dd, filename);
 
	if(!fd)
 
	{
 
		led_errorcode(ERROR_SD_FILE);
 
		_delay_ms(10);
 
		return;
 
	}
 
@@ -105,6 +110,7 @@ void logger_setup()
 
	if(!fat_seek_file(fd, &offset, FAT_SEEK_SET))
 
	{
 
		// Error seeking to file
 
		led_errorcode(ERROR_SD_FILE);
 
		_delay_ms(10);
 
		fat_close_file(fd);
 
		return;
master/master/lib/serial.c
Show inline comments
 
@@ -15,6 +15,7 @@
 
#include "../config.h"
 
#include <avr/io.h>
 
#include <avr/interrupt.h>
 
#include <avr/wdt.h>
 
 
// NOTE: USART ISRs for character reception are included in serparser.c
 
 
@@ -65,6 +66,14 @@ void serial1_ioff() {
 
	UCSR1B &= ~(1 << RXCIE1); // Disable interrupt
 
}
 
 
void serial0_ion() {
 
	UCSR0B |= (1 << RXCIE0); // Enable interrupt
 
}
 
void serial0_ioff() {
 
	UCSR0B &= ~(1 << RXCIE0); // Disable interrupt
 
}
 
 
 
void serial0_sendChar( unsigned char byte )
 
{
 
	while (!(UCSR0A & (1<<UDRE0)));
 
@@ -77,6 +86,40 @@ void serial1_sendChar( unsigned char byt
 
	UDR1 = byte;
 
}
 
 
 
unsigned char serial0_readChar()
 
{
 
	while(!(UCSR0A &(1<<RXC0)));
 
	//char c = UDR0;
 
	//serial0_sendString("Read: ");
 
	//serial0_sendChar(c);
 
	//serial0_sendChar('\n');
 
	return UDR0;
 
}
 
 
uint8_t serial0_hasChar() {
 
	return (UCSR0A &(1<<RXC0));
 
}
 
 
char readBuf[128];
 
char* serial0_readLine() {
 
	char c;
 
	
 
	int i = 0;
 
	
 
	while(i < 128) {
 
		c = serial0_readChar();
 
 
		if(c == 0x0D) break;
 
		readBuf[i] = c;
 
		i++;
 
	}
 
	
 
	readBuf[i] = '\0';
 
	return readBuf;
 
}
 
 
 
void serial0_sendString(const char* stringPtr){
 
	while(*stringPtr != 0x00)
 
	{
master/master/lib/serial.h
Show inline comments
 
@@ -28,6 +28,10 @@ void serial1_setup();
 
void serial0_sendString(const char* stringPtr);
 
void serial1_sendString(const char* stringPtr);
 
 
unsigned char serial0_readChar();
 
uint8_t serial0_hasChar();
 
char* serial0_readLine();
 
 
void serial_sendCommand( char moduleID, char sensorID, char* data );
 
void serial_sendResponseData();
 
master/master/lib/slavesensors.c
Show inline comments
 
@@ -16,6 +16,9 @@
 
#include "serial.h"
 
#include "serparser.h"
 
#include "slavesensors.h"
 
#include "led.h"
 
#include <util/delay.h>
 
#include <avr/wdt.h>
 

	
 
uint8_t currentSlave = 0;
 
uint8_t currentSlaveSensor = 0;
 
@@ -57,6 +60,87 @@ void slavesensors_setup()
 
	
 
}
 
 
char* bufPtr = 0x00;
 
void slavesensors_network_scan() {
 
	serial0_ioff();
 
	
 
	int atOK;
 
	
 
	serial0_sendString("Beginning network scan...\r\n");
 
	
 
	// Delay guard period
 
	_delay_ms(500);
 
	_delay_ms(500);
 
	
 
	// Enter AT mode
 
	serial0_sendChar('+'); // Enter AT mode
 
	serial0_sendChar('+');
 
	serial0_sendChar('+');
 
	
 
	while(!serial0_hasChar()) {
 
		wdt_reset();
 
	}
 
	bufPtr = serial0_readLine();
 
	
 
	char nameString[20] = "NONE";
 
	
 
	// wait for OK
 
	//todo
 
	if(strcmp(bufPtr, "OK") == 0)
 
	{
 
		atOK = 1;
 
		
 
		serial0_sendString("ATND");
 
		serial0_sendChar(0x0D);
 
		// wait for scan to complete
 
		while(!serial0_hasChar()) {
 
			wdt_reset();
 
		}
 
		
 
		// Scan data end when newline by itself ("")	
 
		int lineCount = 0;	
 
		while(1) {
 
			bufPtr = serial0_readLine();
 
			if(lineCount == 3) {
 
				strcpy(nameString, bufPtr);
 
			}
 
			if(strcmp(bufPtr, "") == 0)
 
				break;
 
			lineCount++;
 
		}		
 
		// Exit AT
 
		serial0_sendString("ATCN");
 
		serial0_sendChar(0x0D);
 

	
 
	}
 
	else {
 
		atOK = 0;
 
	}
 
	_delay_ms(200);
 
	//serial0_sendString("ATND"); // Scan all nodes
 
	
 

	
 
	 
 
	 led_on(LED_SIDEBOARD);
 
	 _delay_ms(500);
 

	
 
	serial0_sendString("First found node is: ");
 
	serial0_sendString(nameString);
 
	serial0_sendString("\r\n");
 
	
 
	if(atOK != 1) {
 
		serial0_sendString("AT mode failed \r\n");
 
	}
 
	
 
	
 
	// Wait for response
 
	// will be multiple values separated by <CR>
 
	// 9 data lines per node, <CR> terminated, followed by a new line with only <CR> at the end of all nodes.
 
	
 
	// <CR> followed by another <CR> signifies end of scan data
 
	serial0_ion();
 
}
 
 
bool slavesensors_isrequesting() 
 
{
 
	return requesting;	
 
@@ -76,7 +160,6 @@ void slavesensors_request()
 
 
void slavesensors_process(uint8_t parseResult) 
 
{
 
	
 
	if(!requesting) {
 
		// we got a command when we didn't request anything. probably skip it.
 
		return;
master/master/lib/slavesensors.h
Show inline comments
 
@@ -32,6 +32,7 @@ enum sensorTypes // CMD ID#
 
 
bool slavesensors_isrequesting();
 
void slavesensors_setup();
 
void slavesensors_network_scan();
 
void slavesensors_startprocess();
 
void slavesensors_request();
 
void slavesensors_process(uint8_t parseResult);
master/master/master.c
Show inline comments
 
@@ -58,6 +58,8 @@ int main(void)
 
	serial0_sendString("---------------------------------\r\n");
 
	serial0_sendString("\r\nHello.\r\n\r\n");
 
	
 
	slavesensors_network_scan();
 
	
 
	led_on(LED_POWER);
 
	led_off(LED_SIDEBOARD);
 
	
 
@@ -129,7 +131,7 @@ int main(void)
 
			// Print out GPS debug
 
			snprintf(debugBuf, 128, "GPS> time: %s lat: %s lon: %s speed: %s hdop: %s course: %s\r\n",
 
			get_timestamp(),get_latitude(),get_longitude(),get_speedKnots(),get_hdop(), get_course());
 
			serial0_sendString(debugBuf);
 
			//serial0_sendString(debugBuf);
 
			
 
			
 
			sensors_readBoardTemp(); // i2c read, 400k
 
@@ -137,8 +139,8 @@ int main(void)
 
			logger_log(logbuf);
 
			
 
			// Print out logger debug
 
			serial0_sendString("LOG> ");
 
			serial0_sendString(logbuf);
 
			//serial0_sendString("LOG> ");
 
			//serial0_sendString(logbuf);
 
			
 
			led_off(LED_CYCLE);
 
			lastLog = time_millis();
0 comments (0 inline, 0 general)