Changeset - dc8e0a6ef3b7
[Not reviewed]
default
0 6 0
ethanzonca@CL-ENS241-08.cedarville.edu - 12 years ago 2013-04-12 15:47:19
ethanzonca@CL-ENS241-08.cedarville.edu
Commenting and syntax fixes
6 files changed with 63 insertions and 40 deletions:
0 comments (0 inline, 0 general)
master/master/lib/ini/ini.c
Show inline comments
 
/* inih -- simple .INI file parser
 
 
inih is released under the New BSD license (see LICENSE.txt). Go to the project
 
home page for more info:
 
 
http://code.google.com/p/inih/
 
 
/*
 
 * Master Firmware: INI Parse Backend
 
 *
 
 * Wireless Observational Modular Aerial Network
 
 * 
 
 * Ethan Zonca
 
 * Matthew Kanning
 
 * Kyle Ripperger
 
 * Matthew Kroening
 
 *
 
 * This library was modified to use SD card FAT read/write operations
 
 *
 
 * Original library:
 
 *
 
 *	 inih is released under the New BSD license (see LICENSE.txt). Go to the project
 
 *	 home page for more info:
 
 *	 http://code.google.com/p/inih/
 
 *
 
*/
 
 
#include <stdio.h>
 
#include <ctype.h>
 
#include <string.h>
 
 
#include "ini.h"
 
#include "../logger.h"
 
 
#if !INI_USE_STACK
 
#include <stdlib.h>
 
#endif
 
 
#define MAX_SECTION 50
 
#define MAX_NAME 50
 
 
 
/* Strip whitespace chars off end of given string, in place. Return s. */
 
static char* rstrip(char* s)
 
{
 
    char* p = s + strlen(s);
 
    while (p > s && isspace((unsigned char)(*--p)))
 
        *p = '\0';
 
    return s;
 
}
 
 
/* Return pointer to first non-whitespace char in given string. */
 
static char* lskip(const char* s)
 
{
master/master/lib/ini/ini.h
Show inline comments
 
/* inih -- simple .INI file parser
 
 
inih is released under the New BSD license (see LICENSE.txt). Go to the project
 
home page for more info:
 
 
http://code.google.com/p/inih/
 
 
/*
 
 * Master Firmware: INI Parse Backend
 
 *
 
 * Wireless Observational Modular Aerial Network
 
 * 
 
 * Ethan Zonca
 
 * Matthew Kanning
 
 * Kyle Ripperger
 
 * Matthew Kroening
 
 *
 
 * This library was modified to use SD card FAT read/write operations
 
 *
 
 * Original library:
 
 *
 
 *	 inih is released under the New BSD license (see LICENSE.txt). Go to the project
 
 *	 home page for more info:
 
 *	 http://code.google.com/p/inih/
 
 *
 
*/
 
 
#ifndef __INI_H__
 
#define __INI_H__
 
 
/* Make this header file easier to include in C++ code */
 
#ifdef __cplusplus
 
extern "C" {
 
#endif
 
 
#include <stdio.h>
 
master/master/lib/iniparse.c
Show inline comments
 
@@ -9,110 +9,105 @@
 
 * Matthew Kroening
 
 *
 
 */
 

	
 
#include "../config.h"
 
#include <stdbool.h>
 
#include <stdlib.h>
 
#include <string.h>
 
#include "iniparse.h"
 
#include "ini/ini.h"
 
#include "logger.h"
 
 
 
// Callback function for INI file parsing
 
static int handler(void* user, const char* section, const char* name, const char* value)
 
{
 
	
 
	configuration* pconfig = (configuration*)user;
 
 
	#define MATCH(s, n) strcmp(section, s) == 0 && strcmp(name, n) == 0
 
		
 
	// MATCH(section name, variable name)
 
	if (MATCH("general", "temp")) {
 
		pconfig->heater_threshold = atoi(value);
 
		
 
		
 
	} else if (MATCH("general", "reqrate")) {
 
		pconfig->datarequest_rate = strtol(value, NULL, 10);
 
		
 
		
 
	} else if (MATCH("blackout", "enable")) {
 
		pconfig->blackout_enable = strncmp(value, "false", 4);
 
		
 
		
 
	} else if (MATCH("blackout", "timeout")) {
 
		pconfig->blackout_timeout = strtol(value, NULL, 10);
 
		
 
		
 
	} else if (MATCH("buzzer", "failsafe")) {
 
		pconfig->buzzer_failsafe_duration = strtol(value, NULL, 10);
 
		
 
		
 
	} else if (MATCH("buzzer", "mintime")) {
 
		pconfig->buzzer_trigger_minduration = strtol(value, NULL, 10);
 
		
 
	} else if (MATCH("buzzer", "maxalt")) {
 
		pconfig->buzzer_trigger_maxaltitude = strtol(value, NULL, 10);
 
		
 
	} else if (MATCH("aprs", "call")) {
 
		strncpy(pconfig->s_callsign, value, 10);
 
		//pconfig->s_callsign = strdup(value);
 
		
 
		
 
	} else if (MATCH("aprs", "call_id")) {
 
		pconfig->s_callsign_id = atoi(value);
 
		
 
		
 
	} else if (MATCH("aprs", "period")) {
 
		pconfig->aprs_transmit_period = strtol(value, NULL, 10);
 
		
 
	} else {
 
		error_log_msg(ERROR_CONFIGPARSE,false,"bad entry");
 
		return 0;  /* unknown section/name, error */
 
	}
 
	
 
	
 
	return 1;
 
}
 

	
 
configuration config = {
 
// Initialize configuration structure pre-set to DEFINE'ed defaults
 
configuration config = 
 
{
 
	#ifdef BLACKOUT_ENABLE
 
	.blackout_enable = true,
 
	#else
 
	.blackout_enable = false,
 
	#endif
 
		
 
	.blackout_timeout = BLACKOUT_TIMEOUT,
 
	.heater_threshold = HEATER_THRESHOLD,
 
	.buzzer_failsafe_duration = BUZZER_FAILSAFE_DURATION,
 
	.buzzer_trigger_minduration = BUZZER_TRIGGER_MINDURATION,
 
	.buzzer_trigger_maxaltitude = BUZZER_TRIGGER_MAXALTITUDE,
 
	.datarequest_rate = DATAREQUEST_RATE,
 
	.s_callsign = S_CALLSIGN,
 
	.s_callsign_id = S_CALLSIGN_ID,
 
	.aprs_transmit_period = APRS_TRANSMIT_PERIOD
 
};
 

	
 
// Parse config file from SD card and set global configuration struct
 
void iniparse_getconfig()
 
{
 
	// Init configuration with default values from config.h
 
 
	if (ini_parse(handler, &config) < 0) {
 
		// ERROR: Make new error code here!
 
	if (ini_parse(handler, &config) < 0)
 
	{
 
		error_log(ERROR_CONFIGPARSE, false);
 
	}
 
 
	sysconfig = &config;
 
	
 
	// Print configuration to err
 
	// Print critical configuration options to CSV error log for reference
 
	error_log_rawwrite("\nConf:\n");
 
		
 
	char msg[50];
 
	snprintf(msg, 50,"reqrate: %lu\n",sysconfig->datarequest_rate);
 
	error_log_rawwrite(msg);
 
	snprintf(msg, 50,"call: %s\n",sysconfig->s_callsign);
 
	error_log_rawwrite(msg);
 
	snprintf(msg, 50,"callID: %u\n",sysconfig->s_callsign_id);
 
	error_log_rawwrite(msg);
 
	snprintf(msg, 50,"aprsperiod: %lu\n\n",sysconfig->aprs_transmit_period);
 
	error_log_rawwrite(msg);
 
	
 
	return;
 
}
 
\ No newline at end of file
master/master/lib/iniparse.h
Show inline comments
 
@@ -5,16 +5,15 @@
 
 * 
 
 * Ethan Zonca
 
 * Matthew Kanning
 
 * Kyle Ripperger
 
 * Matthew Kroening
 
 *
 
 */
 
 
 
#ifndef INIPARSE_H_
 
#define INIPARSE_H_
 
 
 
 
void iniparse_getconfig();
 
 
#endif /* INIPARSE_H_ */
 
\ No newline at end of file
master/master/lib/watchdog.c
Show inline comments
 
@@ -12,58 +12,62 @@
 
 
#include "../config.h"
 
#include <avr/io.h>
 
#include <avr/interrupt.h>
 
#include <avr/wdt.h>
 
#include <util/delay.h>
 
#include <avr/eeprom.h>
 
 
#include "looptime.h"
 
#include "led.h"
 
#include "logger.h"
 
 
//initialize watchdog
 
 
// Initialize watchdog timer
 
void watchdog_setup(void)
 
{
 
	cli();
 
	wdt_reset();
 
	// Set change enable bit, enable the WDT
 
	WDTCSR = (1<<WDCE)|(1<<WDE)| (1<<WDIE);
 
	// Start watchdog, 4 second timeout
 
	WDTCSR = (1<<WDE)|(1<<WDP3)|(1<<WDP0)|(1<<WDIE);
 
	sei();
 
}
 
 
// Check if a WDT reset occurred on the previous boot
 
void watchdog_checkreset(void)
 
{
 
	// Check if WDT reset occurred
 
	if( (MCUSR & (1<<WDRF)) > 0)
 
	{
 
		MCUSR &= ~(1<<WDRF);
 
		
 
		// Restore timer from EEPROM
 
		// Restore software program timer from EEPROM
 
		uint32_t oldtimer = 0;
 
		oldtimer = eeprom_read_dword((uint32_t*)WATCHDOG_PROGTIMER_EEPROM_ADDR);
 
		time_watchdogrestore(oldtimer);
 
		
 
		// Log error to SD card
 
		error_log_msg(ERROR_WATCHDOG,false,"Booting up after watchdog reset");
 
	}
 
}
 
 
// Store program timer to EEPROM before WDT reboot
 
ISR(WDT_vect) 
 
{
 
	// Store timer in EEPROM
 
	eeprom_write_dword((uint32_t*)WATCHDOG_PROGTIMER_EEPROM_ADDR, time_millis());
 
	// Store timer + WDT delay in EEPROM
 
	eeprom_write_dword((uint32_t*)WATCHDOG_PROGTIMER_EEPROM_ADDR, time_millis()+4000);
 
	
 
	// Trippy error LEDs while waiting 4 seconds for system reset
 
	// Flash all LEDs while waiting 4 seconds for system reset
 
	while(1)
 
	{
 
		led_on(LED_ACT0);
 
		led_on(LED_ACT1);
 
		led_on(LED_ACT2);
 
		led_on(LED_ACT3);
 
		led_on(LED_ERROR);
 
		led_on(LED_STATUS);
 
		led_on(LED_ACTIVITY);
 
		led_on(LED_SIDEBOARD);
 
		_delay_ms(50);
 
		led_off(LED_ACT0);
master/master/master.c
Show inline comments
 
@@ -51,25 +51,25 @@ int main(void)
 
	serial0_setup();
 
	serial1_setup();
 
	i2c_init();
 
	sensordata_setup(); // must happen before slavesensors/logger/AFSK
 
	slavesensors_setup();
 
	sensors_setup();
 
	logger_setup();
 
	watchdog_checkreset();
 
	iniparse_getconfig();
 
	afsk_setup();
 
	serial0_sendString("Hello.\n\n");
 
	
 
	// Blocking ZigBee node discovery
 
	// ZigBee network discovery (blocking ~6s)
 
	slavesensors_network_scan();
 
	
 
	// Software timers	
 
	uint32_t lastAprsBroadcast = 0;
 
	uint32_t lastLog = 0;
 
	uint32_t lastLedCycle = 0;
 
	uint32_t lastDataReq = 0;
 
	uint32_t lastBuzz = 0;
 
	uint32_t lastBuzzOn = 0;
 
	
 
	bool buzz = false;
 
	
 
@@ -99,46 +99,48 @@ int main(void)
 
			heater_regulateTemp();
 
			
 
			// Turn on sideboard LED if we have a fix
 
			if(gps_hasfix()) 
 
			{
 
				led_on(LED_SIDEBOARD);
 
			}
 
			else 
 
			{
 
				led_off(LED_SIDEBOARD);
 
			}
 
			
 
			// Read board temperature and battery level
 
			sensors_readBoardTemp();
 
			sensors_readBatt();
 
		
 
			// Write CSV header and log data values
 
			sensordata_logvalues();			
 
			
 
			led_off(LED_CYCLE);
 
			lastLog = time_millis();
 
		}		
 
		
 
		// Periodic: Buzzer
 
		if(time_millis() - lastBuzz > BUZZER_RATE) {
 
		if(time_millis() - lastBuzz > BUZZER_RATE)
 
		{
 
			if(sensordata_isTouchdown())
 
			{
 
				led_on(LED_BUZZ);
 
				lastBuzzOn = time_millis();
 
				buzz = true;
 
			}			
 
			lastBuzz = time_millis();
 
		}
 
		 
 
		if(buzz && time_millis() - lastBuzzOn > BUZZER_DURATION) {
 
		if(buzz && time_millis() - lastBuzzOn > BUZZER_DURATION) 
 
		{
 
			led_off(LED_BUZZ);
 
			buzz = false;
 
		}
 
		
 
		// Periodic: Data Request
 
		if(time_millis() - lastDataReq > sysconfig->datarequest_rate)  
 
		{
 
			// Start getting values for next transmission
 
			if(slavesensors_isrequesting())
 
			{
 
				// This probably is a non-issue
 
				//error_log_msg(ERROR_FATAL, false, "Still requesting on following loop");
0 comments (0 inline, 0 general)