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 66 insertions and 43 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"
 
@@ -18,12 +29,13 @@ http://code.google.com/p/inih/
 
#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';
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
master/master/lib/iniparse.c
Show inline comments
 
@@ -15,67 +15,63 @@
 
#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
 
		
 
@@ -87,26 +83,25 @@ configuration config = {
 
	.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);
master/master/lib/iniparse.h
Show inline comments
 
@@ -11,10 +11,9 @@
 
 */
 
 
 
#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
 
@@ -18,46 +18,50 @@
 
#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);
master/master/master.c
Show inline comments
 
@@ -57,13 +57,13 @@ int main(void)
 
	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;
 
@@ -105,34 +105,36 @@ int main(void)
 
			}
 
			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)  
0 comments (0 inline, 0 general)