Changeset - a2269c9fe536
[Not reviewed]
Merge default
0 7 0
kripperger@CL-SEC241-09.cedarville.edu - 12 years ago 2013-01-21 19:41:29
kripperger@CL-SEC241-09.cedarville.edu
merge
7 files changed with 70 insertions and 104 deletions:
0 comments (0 inline, 0 general)
master/master/lib/led.c
Show inline comments
 
@@ -13,6 +13,7 @@
 
#include "../config.h"
 
#include <avr/io.h>
 
#include <util/delay.h>
 
#include <stdbool.h>
 
#include "led.h"
 
 
// Configure port direction and initial state of LEDs
 
@@ -86,4 +87,19 @@ void led_spin() {
 
		led_off(LED_ACT0);
 
	}
 
	ctr = (ctr + 1) % 4;
 
}
 

	
 

	
 
bool pulseUp = true;
 
void led_pulsate() {
 
	if(OCR0B >= 240 && pulseUp)
 
		pulseUp = false;
 
	else if(OCR0B <= 12 && !pulseUp);
 
		pulseUp = true;
 
		
 
	if(pulseUp)
 
		OCR0B+=5;
 
	else
 
		OCR0B-=5;
 
	
 
}
 
\ No newline at end of file
master/master/lib/looptime.c
Show inline comments
 
@@ -22,7 +22,9 @@ void time_setup()
 
{
 
	// Generic microcontroller config options
 
	OCR0A = 173; // Approx 172.7969 ticks per ms with 64 prescaler
 
	OCR0B = 15;
 
	
 
	
 
	OCR0B = 20; // Power LED
 
	
 
	TCCR0A |= (1 << WGM01) | (1 << WGM00) | // Count until OCR0A, then overflow (wgm02 in the next line specifies this as well)
 
			  (1<< COM0B1); // Non-inverting PWM on OC0B
master/master/lib/serial.c
Show inline comments
 
@@ -136,17 +136,12 @@ void serial1_sendString(const char* stri
 
	}
 
}
 
 
void serial_sendCommand( char moduleID, char sensorID, char* data )
 
void serial_sendCommand(char* data )
 
{
 
	char checkSum = 0x00; //initialize checksum
 
	
 
	serial0_sendChar('['); //bracket indicates start of command
 
	serial0_sendChar(moduleID);
 
	checkSum+=moduleID;
 
	
 
	serial0_sendChar(sensorID);
 
	checkSum+=sensorID;
 
	
 
		
 
	// send data, null-terminated
 
	while(*data != 0x00)
 
	{
 
@@ -154,8 +149,7 @@ void serial_sendCommand( char moduleID, 
 
		checkSum += *data;
 
		data++;
 
	}
 
	
 
	
 
		
 
	serial0_sendChar(']'); //bracket indicates end of command
 
	serial0_sendChar(checkSum); // checksum moved behind bracket to solve bug FS#29
 
}
master/master/lib/serial.h
Show inline comments
 
@@ -32,7 +32,7 @@ unsigned char serial0_readChar();
 
uint8_t serial0_hasChar();
 
char* serial0_readLine();
 
 
void serial_sendCommand( char moduleID, char sensorID, char* data );
 
void serial_sendCommand( char* data );
 
void serial_sendResponseData();
 
 
void serial1_ion();
master/master/lib/serparser.c
Show inline comments
 
@@ -90,7 +90,7 @@ ISR(USART0_RX_vect)
 
 
 
 
//#define DEBUG
 
#define DEBUG
 
 
// Parse data from circular buffer
 
int serparser_parse(void)
 
@@ -111,7 +111,7 @@ int serparser_parse(void)
 
				#ifdef DEBUG
 
				serial0_sendString("start\r\n");
 
				#endif
 
				setParserState(STATE_GETID);
 
				setParserState(STATE_GETDATATYPE);
 
			}
 
			else // Not start of frame, reset
 
			{
 
@@ -123,26 +123,6 @@ int serparser_parse(void)
 
			}
 
		}
 
		
 
		// Get destination module ID
 
		else if(parserState == STATE_GETID)
 
		{
 
			if(byte == MODULE_ID) // Message intended for this module; keep parsing
 
			{
 
				#ifdef DEBUG
 
				serial0_sendString("dest\r\n");
 
				#endif
 
				checksumCalc += byte;
 
				setParserState(STATE_GETDATATYPE);
 
			}
 
			else // Transmission is intended for another module; reset
 
			{
 
				#ifdef DEBUG
 
				serial0_sendString("bad dest\r\n");
 
				#endif
 
				setParserState(STATE_RESET);
 
			}
 
		}
 
		
 
		// Get payload type ID
 
		else if(parserState == STATE_GETDATATYPE)
 
		{
master/master/lib/serparser.h
Show inline comments
 
@@ -26,7 +26,6 @@ enum parseResults
 
enum parseStates
 
{
 
	STATE_RESET = 0,
 
	STATE_GETID,
 
	STATE_GETDATATYPE,
 
	STATE_GETDATA,
 
	STATE_GETCHECKSUM,
master/master/lib/slavesensors.c
Show inline comments
 
@@ -30,35 +30,7 @@ bool requesting = false;
 
 
void slavesensors_setup() 
 
{
 
	// Empty array
 
	for(int i=0; i<MAX_SLAVES; i++) 
 
	{
 
		for(int j=0; j<MAX_SLAVE_SENSORS; j++) 
 
		{
 
			slaves[i][j] = NONE;
 
		}			
 
	}	
 
	
 
	// Slave Configuration
 
		
 
	// slave 0
 
	slaves[0][0] = BOARDTEMP;
 
	
 
	// slave 1
 
	slaves[1][0] = BOARDTEMP;
 
	slaves[1][1] = HUMIDITY;
 
	slaves[1][2] = TEMPERATURE;
 
	slaves[1][3] = PRESSURE;
 
	slaves[1][4] = AMBIENTLIGHT;
 
	
 
	// slave 2
 
	slaves[2][0] = BOARDTEMP;
 
	slaves[2][1] = GEIGER;
 
	
 
	// slave 3
 
	slaves[3][0] = BOARDTEMP;
 
	slaves[3][1] = CAMERA;
 
	
 
 
}
 

	
 
 
@@ -69,6 +41,7 @@ char debugBuf[64];
 
char slaveAddressLow[6][9];
 
char slaveAddressHigh[6][9];
 
uint8_t loggerIndex = 255;
 
uint8_t nodeCount = 0;
 

	
 
void slavesensors_network_scan() {
 
	serial0_ioff();
 
@@ -89,7 +62,7 @@ void slavesensors_network_scan() {
 
	
 
	char slaveNames[6][16]; // Hold 16-char addresses of max 6 nodes, we only need them for debug so they are local 
 
	
 
	uint8_t nodeCount = 0;
 
	</i>
 
	
 
	// wait for OK
 
	//todo
 
@@ -185,12 +158,40 @@ void slavesensors_network_scan() {
 
		}
 
	}
 
	
 
	slavesensors_loggerdest();
 
	slavesensors_selectlogger();
 
	
 
	serial0_ion();
 
}
 
 
void slavesensors_loggerdest() 
 
void slavesensors_selectnode(uint8_t nodeIndex)
 
{
 
	char tmpBuf[23];
 
	
 
	// If we can get into AT mode
 
	if(slavesensors_enterAT() == 0) {
 
		
 
		snprintf(tmpBuf, 23, "ATDH %s%c",slaveAddressHigh[nodeIndex], 0x0D);
 
		serial0_sendString(tmpBuf);
 
		
 
		if(xbeeIsOk() != 0) {
 
			led_errorcode(ERROR_NOXBEE);
 
			return;
 
		}
 
		
 
		snprintf(tmpBuf, 23, "ATDL %s%c",slaveAddressLow[nodeIndex], 0x0D);
 
		serial0_sendString(tmpBuf);
 
		
 
		if(xbeeIsOk() != 0) {
 
			led_errorcode(ERROR_NOXBEE);
 
			return;
 
		}
 
		
 
		slavesensors_exitAT();
 
	}
 
	return;
 
}
 
 
void slavesensors_selectlogger() 
 
{
 
	if(loggerIndex != 255) {
 
		slavesensors_selectnode(loggerIndex);
 
@@ -244,34 +245,6 @@ int xbeeIsOk()
 
	}
 
}
 
 
void slavesensors_selectnode(uint8_t nodeIndex) 
 
{
 
	char tmpBuf[23];
 
	
 
	// If we can get into AT mode
 
	if(slavesensors_enterAT() == 0) {
 
		
 
		snprintf(tmpBuf, 23, "ATDH %s%c",slaveAddressHigh[nodeIndex], 0x0D);
 
		serial0_sendString(tmpBuf);
 
		
 
		if(xbeeIsOk() != 0) {
 
			led_errorcode(ERROR_NOXBEE);
 
			return;
 
		}
 
		
 
		snprintf(tmpBuf, 23, "ATDL %s%c",slaveAddressLow[nodeIndex], 0x0D);
 
		serial0_sendString(tmpBuf);
 
		
 
		if(xbeeIsOk() != 0) {
 
			led_errorcode(ERROR_NOXBEE);
 
			return;
 
		}
 
		
 
		slavesensors_exitAT();
 
	}
 
	return;
 
}
 
 
bool slavesensors_isrequesting() 
 
{
 
	return requesting;	
 
@@ -286,9 +259,15 @@ void slavesensors_startprocess()
 
// TODO: inline. static.
 
void slavesensors_request() 
 
{
 
	serial_sendCommand(currentSlave + 0x30, slaves[currentSlave][currentSlaveSensor] + 0x30, "");
 
	//slavesensors_selectnode(currentSlave);
 
	serial_sendCommand("@"); // Request data!
 
}
 
 
 
int numValues = 0; // number of values that the slave is about to send (testing)
 
 
 
// TODO: needs to skip logger!
 
void slavesensors_process(uint8_t parseResult) 
 
{
 
	if(!requesting) {
 
@@ -310,26 +289,22 @@ void slavesensors_process(uint8_t parseR
 
		uint8_t* load = getPayload();
 
		
 
		uint8_t type = getPayloadType();
 
		// TODO: Check if type matches. if it doesn't, we have a problem...
 

	
 
		
 
		uint16_t parsedVal = atoi(load);
 
		
 
		if(slaves[currentSlave][currentSlaveSensor] == BOARDTEMP) {
 
			sensordata_setBoardTemp(currentSlave, parsedVal);
 
		}
 
		else {
 
			sensordata_set(slaves[currentSlave][currentSlaveSensor], parsedVal);
 
		}
 
		// Store data in structure
 
		//sensordata_set(slaves[currentSlave][currentSlaveSensor], parsedVal);
 
		
 
		// If we finished all sensors for all slaves
 
		if(slaves[currentSlave+1][0] == NONE && slaves[currentSlave][currentSlaveSensor+1] == NONE) // If next sensor is none and finished all slaves, reset
 
		if(currentSlave >= nodeCount && currentSlaveSensor >= numValues)
 
		{
 
			currentSlave = 0;
 
			currentSlaveSensor = 0;
 
			requesting = false;
 
		}
 
		// If we finished up one slave, go to the next
 
		else if(slaves[currentSlave][currentSlaveSensor+1] == NONE) 
 
		else if(currentSlaveSensor >= numValues) 
 
		{
 
			currentSlave++;
 
			currentSlaveSensor = 0;
0 comments (0 inline, 0 general)