EMIR - Ekvitermní mikroprocesorová regulace https://code.google.com/p/emir/ https://code.google.com/p/emir/wiki/DesignV3
Dependencies: ConfigFile DS1307 OneWire SDFileSystem USBDeviceLite mbed-rtos mbed
src/sd.cpp
- Committer:
- alpov
- Date:
- 2014-07-30
- Revision:
- 6:c24057b64a66
- Parent:
- 5:5c8e97742751
File content as of revision 6:c24057b64a66:
#include "mbed.h" #include "mbed_debug.h" #include "rtos.h" #include "rtc.h" #include "sd.h" #include "SDFileSystem.h" #include "ConfigFile.h" Mutex sd_mutex; SDFileSystem sd(MBED_SPI0, "sd"); ConfigFile config; ConfigFile sensor_cfg; bool read_config() { bool b = true; sd_mutex.lock(); if (b && !config.read("/sd/emir2.cfg")) b = false; if (b && !sensor_cfg.read("/sd/sensors.cfg")) b = false; sd_mutex.unlock(); return b; } bool write_config() { bool b = true; sd_mutex.lock(); if (b && !config.write("/sd/emir2.cfg", "# EMIR2 main configuration", ConfigFile::DOS)) b = false; if (b && !sensor_cfg.write("/sd/sensors.cfg", "# EMIR2 sensor configuration", ConfigFile::DOS)) b = false; sd_mutex.unlock(); return b; } int get_config(char *key, int def) { char buffer[32]; if (!config.getValue(key, buffer, sizeof(buffer))) return def; return atoi(buffer); } bool set_config(char *key, int value) { char buffer[32]; sprintf(buffer, "%d", value); if (!config.setValue(key, buffer)) return false; return true; } int get_sensor_cfg(uint8_t *romid, char *desc) { char romid_str[20]; char buffer[32]; char *pch; int index; for (int i = 0; i < 8; i++) sprintf(&romid_str[i*2], "%.2X", romid[i]); if (!sensor_cfg.getValue(romid_str, buffer, sizeof(buffer))) { sensor_cfg.setValue(romid_str, "0;Unknown"); return 0; } pch = strchr(buffer, ';'); if (pch == NULL) return 0; *pch = 0; index = atoi(buffer); pch++; if (desc != NULL) strcpy(desc, pch); return index; } bool log_temperature(int sensor_id, int value) { char buffer[32]; sprintf(buffer, "%d", value); return log_event(101, sensor_id, buffer); } bool log_io(int io_id, int value) { char buffer[32]; sprintf(buffer, "%d", value); return log_event(102, io_id, buffer); } bool log_event(int event_id, int sub_id, char *value) { sd_mutex.lock(); FILE *fp = fopen("/sd/emir2.log", "a"); if (fp == NULL) { debug("Could not open file for write\n"); sd_mutex.unlock(); return false; } time_t m_time = get_rtc(); struct tm *now; now = localtime(&m_time); fprintf(fp, "%d.%d.%04d %02d:%02d:%02d;%lu;", now->tm_mday, now->tm_mon+1, now->tm_year+1900, now->tm_hour, now->tm_min, now->tm_sec, m_time ); fprintf(fp, "%d;%d;%s\r\n", event_id, sub_id, value); fclose(fp); sd_mutex.unlock(); return true; } void sd_init() { debug("Reading configs... "); bool b = read_config(); if (b) debug("OK\n"); else debug("failed\n"); debug("Writing log... "); log_event(100, 0, "EMIRv2 compiled " __DATE__ " " __TIME__ ", starting"); debug("done\n"); }