Changeset - 5c3e3bff1c56
[Not reviewed]
default
0 9 0
ethanzonca@CL-ENS241-08.cedarville.edu - 12 years ago 2013-02-05 17:01:36
ethanzonca@CL-ENS241-08.cedarville.edu
Code formatting and additional commenting
9 files changed with 197 insertions and 122 deletions:
0 comments (0 inline, 0 general)
master/master/lib/gps.c
Show inline comments
 
@@ -46,29 +46,34 @@ int numBytes = 0;
 
char tramsmissionType[7];
 

	
 
char timestamp[12];	//hhmmss.ss
 
char* get_timestamp() {
 
char* get_timestamp() 
 
{
 
	return timestamp;
 
}
 
	
 
char latitude[14];	//lllll.lla
 
char* get_latitude() {
 
char* get_latitude() 
 
{
 
	return latitude;
 
}
 

	
 
char longitude[14];	//yyyyy.yyb
 
char* get_longitude() {
 
char* get_longitude() 
 
{
 
	return longitude;
 
}
 

	
 

	
 
char quality;		//quality for GGA and validity for RMC
 
char numSatellites[4];
 
char* get_sv() {
 
char* get_sv() 
 
{
 
	return numSatellites;
 
}
 

	
 
char hdop[6];		//xx.x
 
char* get_hdop() {
 
char* get_hdop() 
 
{
 
	return hdop;
 
}
 

	
 
@@ -79,21 +84,25 @@ char stationID[8];	//blank - included fo
 
char checksum[3];	//xx
 

	
 
char knots[8];		//xxx.xx
 
char* get_speedKnots() {
 
char* get_speedKnots() 
 
{
 
	return knots;
 
}
 

	
 
char course[8];		//xxx.x
 
char* get_course() {
 
char* get_course() 
 
{
 
	return course;
 
}
 
	
 
char dayofmonth[9];	//ddmmyy
 
char* get_dayofmonth() {
 
char* get_dayofmonth() 
 
{
 
	return dayofmonth;
 
}
 

	
 
bool gps_hasfix() {
 
bool gps_hasfix() 
 
{
 
	return strcmp("99.99", get_hdop());
 
}
 

	
 
@@ -176,14 +185,16 @@ void parse_gps_transmission(void){
 
	
 
	
 
	
 
	while(nmeaBufferDataPosition != nmeaBufferParsePosition) {
 
	led_on(LED_ACTIVITY);
 
	while(nmeaBufferDataPosition != nmeaBufferParsePosition) 
 
	{
 
		led_on(LED_ACTIVITY);
 
		
 
		byte = nmeaBuffer[nmeaBufferParsePosition];
 
		
 
		if(decodeState == INITIALIZE) //start of transmission sentence
 
		{
 
			if(byte == '$') {
 
			if(byte == '$') 
 
			{
 
				#ifdef DEBUG_NMEA
 
				serial0_sendString("found $\r\n");
 
				#endif
 
@@ -194,7 +205,8 @@ void parse_gps_transmission(void){
 
				calculatedChecksum = 0;
 
			}		
 
			
 
			else {
 
			else 
 
			{
 
				setParserState(INITIALIZE);
 
			}
 
		}
master/master/lib/led.c
Show inline comments
 
@@ -19,7 +19,8 @@
 
// Configure port direction and initial state of LEDs
 
void led_setup() 
 
{
 
	for(int i=0; i<NUM_LEDS; i++)  {
 
	for(int i=0; i<NUM_LEDS; i++)  
 
	{
 
		*(ledList[i].direction) |= (1<<ledList[i].pin); // set pin to output
 
		*(ledList[i].port) &= ~(1<<ledList[i].pin); // set pin low
 
	}
 
@@ -64,7 +65,8 @@ void led_errorcode(uint8_t code)
 
	led_on(LED_ERROR);
 
}
 
 
void led_alert() {
 
void led_alert() 
 
{
 
	led_on(LED_ACT0);
 
	led_on(LED_ACT1);
 
	led_on(LED_ACT2);
 
@@ -73,27 +75,32 @@ void led_alert() {
 
}
 

	
 
uint8_t ctr = 0;
 
void led_spin() {
 
void led_spin() 
 
{
 
	
 
	if(ctr == 0) {
 
	if(ctr == 0) 
 
	{
 
		led_on(LED_ACT0);
 
		led_off(LED_ACT1);
 
		led_off(LED_ACT2);
 
		led_off(LED_ACT3);
 
	}
 
	else if (ctr == 1) {
 
	else if (ctr == 1) 
 
	{
 
		led_on(LED_ACT1);
 
		led_off(LED_ACT0);
 
		led_off(LED_ACT2);
 
		led_off(LED_ACT3);
 
	}
 
	else if (ctr == 2) {
 
	else if (ctr == 2) 
 
	{
 
		led_on(LED_ACT2);
 
		led_off(LED_ACT1);
 
		led_off(LED_ACT0);
 
		led_off(LED_ACT3);
 
	}
 
	else if (ctr == 3) {
 
	else if (ctr == 3) 
 
	{
 
		led_on(LED_ACT3);
 
		led_off(LED_ACT1);
 
		led_off(LED_ACT2);
 
@@ -104,7 +111,8 @@ void led_spin() {
 

	
 

	
 
bool pulseUp = true;
 
void led_pulsate() {
 
void led_pulsate() 
 
{
 
	if(OCR0B >= 240 && pulseUp)
 
		pulseUp = false;
 
	else if(OCR0B <= 12 && !pulseUp);
 
@@ -114,5 +122,4 @@ void led_pulsate() {
 
		OCR0B+=5;
 
	else
 
		OCR0B-=5;
 
	
 
}
 
\ No newline at end of file
master/master/lib/logger.c
Show inline comments
 
@@ -87,7 +87,8 @@ void logger_setup()
 
	snprintf(filename, 16, "data%d.csv",++logid);
 
	
 
	// TODO: Catch errors here
 
	if(fat_create_file(dd, filename, &directory) == 0) {
 
	if(fat_create_file(dd, filename, &directory) == 0) 
 
	{
 
		led_errorcode(ERROR_SD_FILE);
 
	}		
 
		
master/master/lib/sensordata.c
Show inline comments
 
@@ -21,55 +21,65 @@
 
#include "gps.h"
 
#include "logger.h"
 

	
 
// Slave sensor reading storage
 
int32_t slaves[MAX_NUM_SLAVES][MAX_NUM_SENSORS];
 

	
 
void sensordata_setup() 
 
{
 
	for(int i=0; i<MAX_NUM_SLAVES; i++) {
 
		for(int j=0; j<MAX_NUM_SENSORS; j++) {
 
	for(int i=0; i<MAX_NUM_SLAVES; i++) 
 
	{
 
		for(int j=0; j<MAX_NUM_SENSORS; j++) 
 
		{
 
			slaves[i][j] = -2111111111; // minimum value of 16 bit integer
 
		}
 
	}
 
}
 
 
// Store a sensor value in memory
 
void sensordata_set(uint8_t nodeID, uint8_t type, int32_t value)
 
{
 
	if(nodeID < MAX_NUM_SLAVES) {
 
	if(nodeID < MAX_NUM_SLAVES) 
 
	{
 
		slaves[nodeID][type] = value;
 
	}	
 
}
 
 
// Retrieve a sensor value from memory
 
int32_t sensordata_get(uint8_t nodeID, uint8_t type) 
 
{
 
	// Avoid reading out of bad places!
 
	if(nodeID < MAX_NUM_SLAVES) {
 
	if(nodeID < MAX_NUM_SLAVES) 
 
	{
 
		return slaves[nodeID][type];
 
	}
 
	else {
 
	else 
 
	{
 
		return 0;
 
	}
 
}
 
 
 
// Generate APRS comment
 
// TODO: Can we move this buffer to a local scope of this function?
 
char commentBuffer[128];
 
 
 
// [A-30.5 B45.64 C99542]"
 
char* slavesensors_getAPRScomment() {
 
char* slavesensors_getAPRScomment() 
 
{
 
	snprintf(commentBuffer,128, "T%d S%s V%s H%s", sensors_getBoardTemp(), get_sv(), get_speedKnots(), get_hdop());
 
	return commentBuffer;
 
}
 
 

	
 
 
// Generates CSV headers on first run and logs values to the SD card (if data available)
 
bool dataWasReady = false;
 
 
void sensordata_logvalues() {
 
void sensordata_logvalues() 
 
{
 
	// Generate CSV header after we have queried all slaves once
 
	if(slavesensors_dataReady()) {
 
	if(slavesensors_dataReady()) 
 
	{
 
	
 
		// Only generate/write header the first time data is ready
 
		if(!dataWasReady) {
 
		if(!dataWasReady) 
 
		{
 
			#define CSV_HEADER_SIZE 512
 
			char csvHeader[CSV_HEADER_SIZE];
 
			csvHeader[0] = 0x00;
 
@@ -78,17 +88,21 @@ void sensordata_logvalues() {
 
			snprintf(csvHeader, CSV_HEADER_SIZE, "Time,BoardTemp,GPSTime,GPSLat,GPSLon,GPSSpeed,GPSHDOP,GPSCourse,GPSSV,");
 
		
 
			// Add slave data headers
 
			for(uint8_t i=0; i<MAX_NUM_SLAVES; i++) {
 
				for(uint8_t j=0; j<MAX_NUM_SENSORS; j++) {
 
			for(uint8_t i=0; i<MAX_NUM_SLAVES; i++) 
 
			{
 
				for(uint8_t j=0; j<MAX_NUM_SENSORS; j++) 
 
				{
 
					int32_t tmp = sensordata_get(i, j);
 
					if(tmp != -2111111111) {
 
						// FIXME: will the 128 here really provide safety? might want to subtract the strlen
 
					
 
					// If a sensor value exists, write a header for it
 
					if(tmp != -2111111111) 
 
					{
 
						snprintf(csvHeader + strlen(csvHeader), CSV_HEADER_SIZE-strlen(csvHeader),"%s-%s,", slavesensors_slavename(i), slavesensors_getLabel(j));
 
					}
 
				}
 
			}
 
		
 
			// Terminate header string and write to SD card
 
			// End line and write to SD card
 
			snprintf(csvHeader + strlen(csvHeader), CSV_HEADER_SIZE-strlen(csvHeader),"\r\n");
 
			logger_log(csvHeader);
 
			dataWasReady = true;
 
@@ -97,16 +111,27 @@ void sensordata_logvalues() {
 
		// Write CSV sensor values to SD card
 
		char logbuf[256];
 
		logbuf[0] = 0x00;
 
		
 
		// Write master sensor values
 
		snprintf(logbuf, 256, "%lu,%d,%s,%s,%s,%s,%s,%s,%s,", time_millis(), sensors_getBoardTemp(),get_timestamp(),get_latitude(),get_longitude(),get_speedKnots(),get_hdop(), get_course(), get_sv());
 
		for(int i=0; i<MAX_NUM_SLAVES; i++) {
 
			for(int j=0; j<MAX_NUM_SENSORS; j++) {
 
		
 
		// Write slave sensor values
 
		for(int i=0; i<MAX_NUM_SLAVES; i++) 
 
		{
 
			for(int j=0; j<MAX_NUM_SENSORS; j++) 
 
			{
 
				int32_t tmp = sensordata_get(i, j);
 
				if(tmp != -2111111111) {
 
				
 
				// If a sensor value exists, log the data
 
				if(tmp != -2111111111) 
 
				{
 
					snprintf(logbuf + strlen(logbuf),256-strlen(logbuf)," %ld,", tmp);
 
				}
 
			
 
			}
 
		}
 
		
 
		// End line and write to log
 
		snprintf(logbuf + strlen(logbuf),256-strlen(logbuf),"\r\n");
 
		logger_log(logbuf);
 
	}
master/master/lib/serial.c
Show inline comments
 
@@ -19,10 +19,9 @@
 
 
// NOTE: USART ISRs for character reception are included in serparser.c
 
 
void serial0_setup() {
 
	//PORTD &= ~(1<<PD0);
 
	//PORTD |= (1<<PD1);
 
	
 
// Configure USART0
 
void serial0_setup() 
 
{
 
	/* Enable receiver and transmitter */
 
	UCSR0B |= (1<<RXEN0)|(1<<TXEN0); // Enable rx/tx
 
	/* Set frame format: 8data, 1stop bit */
 
@@ -33,17 +32,10 @@ void serial0_setup() {
 
	UBRR0L = (unsigned char)USART0_BAUD_PRESCALE;
 
	
 
	UCSR0B |= (1 << RXCIE0); // Enable interrupt
 
	
 
	//UCSR0A |= (1<<RXC0);
 
}
 
 
 
 
 
 
 
// Configure USART1
 
void serial1_setup() {
 
//PROVEN in test project
 
 
	/* Enable receiver and transmitter */
 
	UCSR1B |= (1<<RXEN1)|(1<<TXEN1); // Enable rx/tx
 
@@ -57,50 +49,56 @@ void serial1_setup() {
 
	UCSR1B |= (1 << RXCIE1); // Enable interrupt
 
}
 
 
// Enable USART1 rx interrupt
 
void serial1_ion() {
 
	UCSR1B |= (1<<RXEN1); // Enable rx
 
	UCSR1B |= (1 << RXCIE1); // Enable interrupt
 
}
 
 
// Disable USART1 rx interrupt
 
void serial1_ioff() {
 
	UCSR1B &= ~(1<<RXEN1); // Disable rx
 
	UCSR1B &= ~(1 << RXCIE1); // Disable interrupt
 
}
 
 
// Enable USART0 rx interrupt
 
void serial0_ion() {
 
	UCSR0B |= (1 << RXCIE0); // Enable interrupt
 
}
 
 
// Disable USART0 rx interrupt
 
void serial0_ioff() {
 
	UCSR0B &= ~(1 << RXCIE0); // Disable interrupt
 
}
 
 
 
// Send char on USART0
 
void serial0_sendChar( unsigned char byte )
 
{
 
	while (!(UCSR0A & (1<<UDRE0)));
 
	UDR0 = byte;
 
}
 
 
// Send char on USART1
 
void serial1_sendChar( unsigned char byte )
 
{
 
	while (!(UCSR1A & (1<<UDRE1)));
 
	UDR1 = byte;
 
}
 
 
 
// Read char on USART0 (blocking)
 
unsigned char serial0_readChar()
 
{
 
	while(!(UCSR0A &(1<<RXC0)));
 
	//char c = UDR0;
 
	//serial0_sendString("Read: ");
 
	//serial0_sendChar(c);
 
	//serial0_sendChar('\n');
 
	return UDR0;
 
}
 
 
// Returns 1 if data in USART0 buffer
 
uint8_t serial0_hasChar() {
 
	return (UCSR0A &(1<<RXC0));
 
}
 
 
// Read line from USART0 (blocking)
 
// TODO: Can we make readBuf local?
 
char readBuf[128];
 
char* serial0_readLine() {
 
	char c;
 
@@ -119,7 +117,7 @@ char* serial0_readLine() {
 
	return readBuf;
 
}
 
 
 
// Send string on USART0
 
void serial0_sendString(const char* stringPtr){
 
	while(*stringPtr != 0x00)
 
	{
 
@@ -128,6 +126,7 @@ void serial0_sendString(const char* stri
 
	}
 
}
 
 
// Send string on USART1
 
void serial1_sendString(const char* stringPtr){
 
	while(*stringPtr != 0x00)
 
	{
 
@@ -136,6 +135,7 @@ void serial1_sendString(const char* stri
 
	}
 
}
 
 
// Send custom protocol command on USART0
 
void serial_sendCommand(char* data )
 
{
 
	char checkSum = 0x00; //initialize checksum
 
@@ -152,10 +152,4 @@ void serial_sendCommand(char* data )
 
		
 
	serial0_sendChar(']'); //bracket indicates end of command
 
	serial0_sendChar(checkSum); // checksum moved behind bracket to solve bug FS#29
 
}
 
 
void serial_sendResponseData()
 
{
 
	
 
}
 
 
}
 
\ No newline at end of file
master/master/lib/serial.h
Show inline comments
 
@@ -33,8 +33,6 @@ uint8_t serial0_hasChar();
 
char* serial0_readLine();
 
 
void serial_sendCommand( char* data );
 
void serial_sendResponseData();
 
 
 
void serial0_ion();
 
void serial0_ioff();
master/master/lib/serparser.c
Show inline comments
 
@@ -75,16 +75,10 @@ static void setParserState(uint8_t state
 
}
 
 
// Receive data on USART
 
 
char debugBuff[16];
 
 
 
ISR(USART0_RX_vect)
 
{
 
	buffer[bufferDataPosition % BUFFER_SIZE] = UDR0;
 
	bufferDataPosition = (bufferDataPosition + 1) % BUFFER_SIZE;
 
	//sprintf(debugBuff, "bdp: %d, bpp: %d \r\n", bufferDataPosition, bufferParsePosition);
 
	//serial0_sendString((debugBuff)); 
 
}
 
 
 
@@ -140,6 +134,7 @@ int serparser_parse(void)
 
			if (byte == ']') // End of frame
 
			{
 
				#ifdef DEBUG
 
				char debugBuff[16];
 
				serial0_sendString("eof\r\n");
 
				sprintf(debugBuff, "%d B, sum=%d\r\n", payloadLength, checksumCalc);
 
				serial0_sendString((debugBuff));
 
@@ -162,14 +157,16 @@ int serparser_parse(void)
 
				checksumCalc += byte;
 
				
 
				// Data buffer overrun protection
 
				if(payloadLength > MAX_PAYLOAD_LEN) {
 
				if(payloadLength > MAX_PAYLOAD_LEN) 
 
				{
 
					#ifdef DEBUG
 
					serial0_sendString("ovf\r\n");
 
					#endif
 
					setParserState(STATE_RESET);
 
					return PARSERESULT_FAIL;
 
				}
 
				else {
 
				else 
 
				{
 
					// Set state. MUST call even though state is maintained to update parse position
 
					setParserState(STATE_GETDATA);
 
					return PARSERESULT_STILLPARSING;
 
@@ -181,14 +178,16 @@ int serparser_parse(void)
 
		else if(STATE_GETCHECKSUM)
 
		{
 
			// TODO: Compare checksums
 
			if(byte == checksumCalc) {
 
			if(byte == checksumCalc) 
 
			{
 
				#ifdef DEBUG
 
				serial0_sendString("check\r\n");
 
				#endif
 
				setParserState(STATE_RESET);
 
				return PARSERESULT_PARSEOK;
 
			}
 
			else {
 
			else 
 
			{
 
				#ifdef DEBUG
 
				serial0_sendString("bcheck\r\n");
 
				#endif
master/master/lib/slavesensors.c
Show inline comments
 
@@ -52,14 +52,16 @@ const char *const labelLookup[] PROGMEM 
 
};
 

	
 
char labelBuffer[15]; // Size to length of label
 
char* slavesensors_getLabel(uint8_t sensorID) {
 
char* slavesensors_getLabel(uint8_t sensorID) 
 
{
 
	if(sensorID < 9)
 
	{
 
		strncpy_P(labelBuffer,(char*)pgm_read_word(&(labelLookup[sensorID])),15);
 
		
 
		return labelBuffer;
 
	}
 
	else {
 
	else 
 
	{
 
		return NULL;
 
	}
 
}
 
@@ -87,11 +89,13 @@ uint8_t loggerIndex = 255;
 
uint8_t nodeCount = 0;
 
bool dataReady = false;
 

	
 
char* slavesensors_slavename(uint8_t id) {
 
char* slavesensors_slavename(uint8_t id) 
 
{
 
	return slaveNames[id];
 
}
 

	
 
void slavesensors_network_scan() {
 
void slavesensors_network_scan() 
 
{
 
	serial0_ioff();
 
	
 
	int atOK;
 
@@ -116,8 +120,10 @@ void slavesensors_network_scan() {
 
		
 
		// wait for scan to complete
 
		uint16_t scanStart = time_millis(); 		
 
		while(!serial0_hasChar()) {
 
			if(time_millis() - scanStart > 7000) {
 
		while(!serial0_hasChar()) 
 
		{
 
			if(time_millis() - scanStart > 7000) 
 
			{
 
				led_errorcode(ERROR_XBEETIMEOUT);
 
				return;
 
			}
 
@@ -126,31 +132,38 @@ void slavesensors_network_scan() {
 
		// Scan data end when newline by itself ("")	
 
		int lineCount = 0;	
 
	
 
		while(1) {
 
		while(1) 
 
		{
 
			bufPtr = serial0_readLine();
 

	
 
			// If we're starting a new block but got a newline instead, we're done!
 
			if(lineCount == 0 && strcmp(bufPtr, "") == 0) {
 
			if(lineCount == 0 && strcmp(bufPtr, "") == 0) 
 
			{
 
				break;			
 
			}
 
			
 
			if(lineCount == 1) {
 
			if(lineCount == 1) 
 
			{
 
				strncpy(slaveAddressHigh[nodeCount],bufPtr, 9);
 
			}
 
			else if(lineCount == 2) {
 
			else if(lineCount == 2) 
 
			{
 
				strncpy(slaveAddressLow[nodeCount],bufPtr, 9);
 
			}
 
			else if(lineCount == 3) {
 
			else if(lineCount == 3) 
 
			{
 
				strncpy(slaveNames[nodeCount], bufPtr, 15);
 
			}
 
			
 
			// If we've finished one chunk (including the newline after it). Can't be else if because it controls increment.
 
			if(lineCount == 9) {
 
			if(lineCount == 9) 
 
			{
 
				// bufPtr should be null at this point, because we read in a newline after one chunk
 
				nodeCount++;
 
				lineCount = 0;
 
			}
 
			else {
 
			else 
 
			{
 
				lineCount++;
 
			}
 

	
 
@@ -161,7 +174,8 @@ void slavesensors_network_scan() {
 
	}
 
	
 
	// Display number of found nodes on spinning indicator
 
	switch(nodeCount) {
 
	switch(nodeCount) 
 
	{
 
		case 0:
 
			break;
 
		case 3:
 
@@ -183,12 +197,14 @@ void slavesensors_network_scan() {
 
	
 
	char debugBuf[64];
 
	serial0_sendString("Discovered: \r\n");
 
	for(int i=0; i<nodeCount; i++) {
 
	for(int i=0; i<nodeCount; i++) 
 
	{
 
		snprintf(debugBuf, 64, "  %s - %s%s (%u)\r\n", slaveNames[i],slaveAddressHigh,slaveAddressLow[i], i);
 
		serial0_sendString(debugBuf);
 
	}
 
	serial0_sendString("\r\n");
 
	if(atOK != 0) {
 
	if(atOK != 0) 
 
	{
 
		serial0_sendString("AT mode failed \r\n");
 
	}
 
	
 
@@ -212,13 +228,15 @@ void slavesensors_network_scan() {
 
//#define DEBUG_SELECTNODE
 
 
uint8_t selectedNode = 0;
 
uint8_t slavesensors_getselectednode() {
 
uint8_t slavesensors_getselectednode() 
 
{
 
	return selectedNode;
 
}
 
 
void slavesensors_selectnode(uint8_t nodeIndex)
 
{
 
	if(selectedNode == nodeIndex) {
 
	if(selectedNode == nodeIndex) 
 
	{
 
		return;
 
	}
 
	serial0_ioff();
 
@@ -237,12 +255,14 @@ void slavesensors_selectnode(uint8_t nod
 
	char tmpBuf[23];
 
	
 
	// If we can get into AT mode
 
	if(slavesensors_enterAT() == 0) {
 
	if(slavesensors_enterAT() == 0) 
 
	{
 
		
 
		snprintf(tmpBuf, 23, "ATDH %s%c",slaveAddressHigh[nodeIndex], 0x0D);
 
		serial0_sendString(tmpBuf);
 
		
 
		if(xbeeIsOk() != 0) {
 
		if(xbeeIsOk() != 0) 
 
		{
 
			led_errorcode(ERROR_NOXBEE);
 
			return;
 
		}
 
@@ -250,7 +270,8 @@ void slavesensors_selectnode(uint8_t nod
 
		snprintf(tmpBuf, 23, "ATDL %s%c",slaveAddressLow[nodeIndex], 0x0D);
 
		serial0_sendString(tmpBuf);
 
		
 
		if(xbeeIsOk() != 0) {
 
		if(xbeeIsOk() != 0) 
 
		{
 
			led_errorcode(ERROR_NOXBEE);
 
			return;
 
		}
 
@@ -279,7 +300,8 @@ void slavesensors_selectnode(uint8_t nod
 
 
void slavesensors_selectlogger() 
 
{
 
	if(loggerIndex != 255) {
 
	if(loggerIndex != 255) 
 
	{
 
		slavesensors_selectnode(loggerIndex);
 
	}	
 
}
 
@@ -345,7 +367,8 @@ int xbeeIsOk()
 
	}
 
}
 
 
bool slavesensors_dataReady() {
 
bool slavesensors_dataReady() 
 
{
 
	return dataReady;
 
}
 
 
@@ -363,9 +386,11 @@ void slavesensors_startprocess()
 
// TODO: inline. static.
 
void slavesensors_request() 
 
{
 
	if(currentSlave == loggerIndex) {
 
	if(currentSlave == loggerIndex) 
 
	{
 
		currentSlave++;
 
		if(currentSlave >= (nodeCount)) {
 
		if(currentSlave >= (nodeCount)) 
 
		{
 
			slavesensors_selectlogger();
 
			return;
 
		}
 
@@ -381,14 +406,16 @@ uint8_t numReadingsToExpect = 0; // numb
 
// TODO: needs to skip logger!
 
void slavesensors_process(uint8_t parseResult) 
 
{
 
	if(!requesting) {
 
	if(!requesting) 
 
	{
 
		// we got a command when we didn't request anything. probably skip it.
 
		return;
 
	}
 
	
 
	// TODO: timeout. If we're at NODATA for a long time and we are requesting, that's an issue.
 
	// TODO: If we time out, WE NEED TO RESET THE PARSER. It could be in a bad state.
 
	else if(parseResult == PARSERESULT_NODATA) {
 
	else if(parseResult == PARSERESULT_NODATA) 
 
	{
 
		// Wait for data
 
	}
 
	
 
@@ -410,7 +437,8 @@ void slavesensors_process(uint8_t parseR
 
		int32_t parsedVal = strtol(load, NULL, 10);//atoi(load);
 

	
 
		// Special case for slave telling us how many things we're about to get		
 
		if(type + 0x30 == '@') {
 
		if(type + 0x30 == '@')
 
		{
 
			
 
			#ifdef DEBUG_GETSLAVEDATA
 
			serial0_sendString("Got an awesome count!\r\n");
 
@@ -422,7 +450,8 @@ void slavesensors_process(uint8_t parseR
 
			currentSlaveSensor = 0;
 
			requesting = true;
 
		}
 
		else {
 
		else 
 
		{
 
		
 
			// Store data in structure
 
			sensordata_set(currentSlave,type,parsedVal);
 
@@ -456,8 +485,10 @@ void slavesensors_process(uint8_t parseR
 
				currentSlaveSensor = 0;
 
				requesting = true;
 
				
 
				if(currentSlave == loggerIndex) {
 
					if(currentSlave >= (nodeCount-1)) {
 
				if(currentSlave == loggerIndex) 
 
				{
 
					if(currentSlave >= (nodeCount-1)) 
 
					{
 
						// We hit the last one, we're done.
 
						dataReady = true;
 
						currentSlave = 0;
 
@@ -466,7 +497,8 @@ void slavesensors_process(uint8_t parseR
 
						led_alert();
 
						return;
 
					}
 
					else {
 
					else 
 
					{
 
						currentSlave++; // increment to the next slave after the logger
 
					}
 
				}
 
@@ -490,8 +522,10 @@ void slavesensors_process(uint8_t parseR
 
	
 
	// If fail, try retransmit. Or we could skip and hit it next time.
 
	// TODO: Maximum number of retransmissions
 
	else if(parseResult == PARSERESULT_FAIL) {
 
		if(requesting) {
 
	else if(parseResult == PARSERESULT_FAIL) 
 
	{
 
		if(requesting) 
 
		{
 
			slavesensors_request();	// re-request
 
		}			
 
	}
 
@@ -501,7 +535,8 @@ void slavesensors_process(uint8_t parseR
 
	{
 
		return; // do nothing
 
	}
 
	else {
 
	else 
 
	{
 
		// something is terribly wrong!
 
		return;
 
	}
master/master/master.c
Show inline comments
 
@@ -72,7 +72,8 @@ int main(void)
 
    {
 
		
 
		// Periodic: LED execution indicator
 
		if(time_millis() - lastLedCycle > LEDCYCLE_RATE) {
 
		if(time_millis() - lastLedCycle > LEDCYCLE_RATE) 
 
		{
 
			led_spin();
 
			
 
			// Enable GPS serial interrupts if we aren't doing AFSK
 
@@ -90,10 +91,12 @@ int main(void)
 
			heater_regulateTemp();
 
			
 
			// Turn on sideboard LED if we have a fix
 
			if(gps_hasfix()) {
 
			if(gps_hasfix()) 
 
			{
 
				led_on(LED_SIDEBOARD);
 
			}
 
			else {
 
			else 
 
			{
 
				led_off(LED_SIDEBOARD);
 
			}
 
			
 
@@ -108,7 +111,8 @@ int main(void)
 
		
 
		
 
		// Periodic: Data Request
 
		if(time_millis() - lastDataReq > DATAREQUEST_RATE)  {
 
		if(time_millis() - lastDataReq > DATAREQUEST_RATE)  
 
		{
 
			
 
			// Start getting values for next transmission
 
			if(slavesensors_isrequesting())
0 comments (0 inline, 0 general)