Changeset - c21de31ee856
[Not reviewed]
default
0 6 0
ethanzonca@CL-ENS241-08.cedarville.edu - 12 years ago 2013-01-30 21:20:33
ethanzonca@CL-ENS241-08.cedarville.edu
Added labeling feature to logged data for sensor data types,
slave data request system now fully functional. Note: logger node
is no longer selected as previously planned.
6 files changed with 85 insertions and 12 deletions:
0 comments (0 inline, 0 general)
master/master/config.h
Show inline comments
 
@@ -52,6 +52,8 @@
 
// Node identifier of log destination xbee
 
#define XBEE_LOGDEST_NAME "HAB-LOGGER"
 
 
#define DATAREQUEST_RATE 3000
 
 
// --------------------------------------------------------------------------
 
// Command Parser config (serparser.c)
 
// --------------------------------------------------------------------------
master/master/lib/led.c
Show inline comments
 
@@ -58,6 +58,13 @@ void led_errorcode(uint8_t code)
 
	led_on(LED_ERROR);
 
}
 
 
void led_alert() {
 
	led_on(LED_ACT0);
 
	led_on(LED_ACT1);
 
	led_on(LED_ACT2);
 
	led_on(LED_ACT3);
 
	_delay_ms(10);
 
}
 

	
 
uint8_t ctr = 0;
 
void led_spin() {
master/master/lib/led.h
Show inline comments
 
@@ -67,5 +67,6 @@ void led_off(uint8_t led);
 
void led_toggle(uint8_t led);
 
void led_errorcode(uint8_t code);
 
void led_spin();
 
void led_alert();
 
 
#endif /* LED_H_ */
master/master/lib/slavesensors.c
Show inline comments
 
@@ -18,6 +18,7 @@
 
#include <string.h>
 
#include <util/delay.h>
 
#include <avr/wdt.h>
 
#include <avr/pgmspace.h>
 
#include "serial.h"
 
#include "serparser.h"
 
#include "slavesensors.h"
 
@@ -25,6 +26,36 @@
 
#include "led.h"
 
#include "looptime.h"
 

	
 
// Label lookup table
 
const char label_0[] PROGMEM = "BoardTemp";
 
const char label_1[] PROGMEM = "HeaterStatus";
 
const char label_2[] PROGMEM = "BatteryLevel";
 
const char label_3[] PROGMEM = "AirTemp";
 
const char label_4[] PROGMEM = "AmbientLight";
 
const char label_5[] PROGMEM = "Humidity";
 
const char label_6[] PROGMEM = "Pressure";
 
const char label_7[] PROGMEM = "Altitude";
 
const char label_8[] PROGMEM = "CPM-Radiation";
 

	
 
const char *const labelLookup[] PROGMEM =
 
{
 
	label_0,
 
	label_1,
 
	label_2,
 
	label_3,
 
	label_4,
 
	label_5,
 
	label_6,
 
	label_7,
 
	label_8,
 
};
 

	
 
char labelBuffer[25]; // Size to length of label
 
char* slavesensors_getLabel(uint8_t sensorID) {
 
	strncpy_P(labelBuffer,(char*)pgm_read_word(&(labelLookup[sensorID])),25);
 
	return labelBuffer;
 
}
 

	
 
uint8_t currentSlave = 0;
 
uint8_t currentSlaveSensor = 0;
 
 
@@ -36,7 +67,7 @@ void slavesensors_setup()
 
}
 

	
 
//#define DEBUG_NETWORKSCAN
 
//#define DEBUG_GETSLAVEDATA
 
#define DEBUG_GETSLAVEDATA
 
 
char* bufPtr = 0x00;
 

	
 
@@ -168,11 +199,25 @@ void slavesensors_network_scan() {
 
	serial0_ion();
 
}
 
 
//#define DEBUG_CONTEXTSWITCH
 
// #define DEBUG_SELECTNODE
 
 
uint8_t selectedNode = 0;
 
uint8_t slavesensors_getselectednode() {
 
	return selectedNode;
 
}
 
 
void slavesensors_selectnode(uint8_t nodeIndex)
 
{
 
	if(selectedNode == nodeIndex) {
 
		return;
 
	}
 
	serial0_ioff();
 
	
 
	#ifdef DEBUG_CONTEXTSWITCH
 
	uint32_t startTime = time_millis();
 
	#endif
 
	
 
	#ifdef DEBUG_SELECTNODE
 
	serial0_sendString("Switch to node ");
 
	serial0_sendChar(nodeIndex + 0x30);
 
@@ -202,6 +247,7 @@ void slavesensors_selectnode(uint8_t nod
 
		}
 
		
 
		slavesensors_exitAT();
 
		selectedNode = nodeIndex;
 
	}
 
	_delay_ms(2);
 
	
 
@@ -211,10 +257,13 @@ void slavesensors_selectnode(uint8_t nod
 
	serial0_sendString("\r\n");
 
	#endif
 
	
 
	#ifdef DEBUG_CONTEXTSWITCH
 
	uint32_t switchTime = time_millis() - startTime;
 
	char tmpB[32];
 
	snprintf(tmpB, 32, "CTXSW: %lu ms\r\n", switchTime);
 
	serial0_sendString(tmpB);
 
	#endif
 
	
 
	serial0_ion();
 
	return;
 
}
 
@@ -307,10 +356,13 @@ void slavesensors_request()
 
{
 
	if(currentSlave == loggerIndex) {
 
		currentSlave++;
 
		if(currentSlave >= (nodeCount)) {
 
			slavesensors_selectlogger();
 
			return;
 
		}
 
	}
 
	slavesensors_selectnode(currentSlave);
 
	serial_sendCommand("@"); // Request data!
 
	slavesensors_selectlogger();
 
}
 
 
 
@@ -382,6 +434,7 @@ void slavesensors_process(uint8_t parseR
 
				currentSlave = 0;
 
				currentSlaveSensor = 0;
 
				requesting = false;
 
				led_alert();
 
			}
 
			// If we finished up one slave, go to the next
 
			else if(currentSlaveSensor >= (numReadingsToExpect-1)) 
 
@@ -401,6 +454,7 @@ void slavesensors_process(uint8_t parseR
 
						currentSlave = 0;
 
						currentSlaveSensor = 0;
 
						requesting = false;
 
						led_alert();
 
						return;
 
					}
 
					else {
master/master/lib/slavesensors.h
Show inline comments
 
@@ -30,11 +30,14 @@ enum sensorTypes // CMD ID#
 
	CAMERA,
 
};
 
 
char* slavesensors_getLabel(uint8_t sensorID);
 
char* slavesensors_slavename(uint8_t id);
 
bool slavesensors_dataReady();
 
bool slavesensors_isrequesting();
 
void slavesensors_setup();
 
void slavesensors_network_scan();
 
uint8_t slavesensors_getselectednode();
 
void slavesensors_selectnode(uint8_t nodeIndex);
 
void slavesensors_startprocess();
 
void slavesensors_request();
 
void slavesensors_process(uint8_t parseResult);
master/master/master.c
Show inline comments
 
@@ -77,6 +77,8 @@ int main(void)
 
	uint32_t lastAprsBroadcast = 0;
 
	uint32_t lastLog = 0;
 
	uint32_t lastLedCycle = 0;
 
	uint32_t lastDataReq = 0;
 
	
 
	bool dataWasReady = false;
 
	
 
	// Result of last parser run
 
@@ -132,7 +134,7 @@ int main(void)
 
							int16_t tmp = sensordata_get(i, j);
 
							if(tmp != -32768) {
 
								// FIXME: will the 128 here really provide safety? might want to subtract the strlen
 
								snprintf(csvHeader + strlen(csvHeader), 128,"%s-Sensor%u,", slavesensors_slavename(i), j);	
 
								snprintf(csvHeader + strlen(csvHeader), 128,"%s-%s,", slavesensors_slavename(i), slavesensors_getLabel(j));	
 
							}
 
						}
 
					}
 
@@ -170,15 +172,8 @@ int main(void)
 
		}		
 
		
 
		
 
		// Periodic: APRS transmission
 
		if(time_millis() - lastAprsBroadcast > APRS_TRANSMIT_PERIOD) 
 
		{
 
			while(afsk_busy());
 
			serial1_ioff();
 
			aprs_send(); // non-blocking
 
			
 
			//serial0_sendString("Initiating APRS transmission...\r\n");
 
			
 
		// Periodic: Data Request
 
		if(time_millis() - lastDataReq > DATAREQUEST_RATE)  {
 
			// Start getting values for next transmission
 
			if(slavesensors_isrequesting())
 
			{
 
@@ -189,6 +184,17 @@ int main(void)
 
				slavesensors_startprocess();
 
			}
 
			
 
			lastDataReq = time_millis();
 
		}
 
		
 
		
 
		// Periodic: APRS transmission
 
		if(time_millis() - lastAprsBroadcast > APRS_TRANSMIT_PERIOD) 
 
		{
 
			while(afsk_busy());
 
			serial1_ioff();
 
			aprs_send(); // non-blocking
 
			
 
			lastAprsBroadcast = time_millis();
 
		}			
 
		
0 comments (0 inline, 0 general)