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
sd.cpp
00001 #include "mbed.h" 00002 #include "mbed_debug.h" 00003 #include "rtos.h" 00004 #include "rtc.h" 00005 #include "sd.h" 00006 #include "SDFileSystem.h" 00007 #include "ConfigFile.h" 00008 00009 Mutex sd_mutex; 00010 SDFileSystem sd(MBED_SPI0, "sd"); 00011 ConfigFile config; 00012 ConfigFile sensor_cfg; 00013 00014 bool read_config() 00015 { 00016 bool b = true; 00017 sd_mutex.lock(); 00018 if (b && !config.read("/sd/emir2.cfg")) b = false; 00019 if (b && !sensor_cfg.read("/sd/sensors.cfg")) b = false; 00020 sd_mutex.unlock(); 00021 return b; 00022 } 00023 00024 00025 bool write_config() 00026 { 00027 bool b = true; 00028 sd_mutex.lock(); 00029 if (b && !config.write("/sd/emir2.cfg", "# EMIR2 main configuration", ConfigFile::DOS)) b = false; 00030 if (b && !sensor_cfg.write("/sd/sensors.cfg", "# EMIR2 sensor configuration", ConfigFile::DOS)) b = false; 00031 sd_mutex.unlock(); 00032 return b; 00033 } 00034 00035 00036 int get_config(char *key, int def) 00037 { 00038 char buffer[32]; 00039 00040 if (!config.getValue(key, buffer, sizeof(buffer))) return def; 00041 return atoi(buffer); 00042 } 00043 00044 00045 bool set_config(char *key, int value) 00046 { 00047 char buffer[32]; 00048 00049 sprintf(buffer, "%d", value); 00050 if (!config.setValue(key, buffer)) return false; 00051 return true; 00052 } 00053 00054 00055 int get_sensor_cfg(uint8_t *romid, char *desc) 00056 { 00057 char romid_str[20]; 00058 char buffer[32]; 00059 char *pch; 00060 int index; 00061 00062 for (int i = 0; i < 8; i++) sprintf(&romid_str[i*2], "%.2X", romid[i]); 00063 if (!sensor_cfg.getValue(romid_str, buffer, sizeof(buffer))) { 00064 sensor_cfg.setValue(romid_str, "0;Unknown"); 00065 return 0; 00066 } 00067 00068 pch = strchr(buffer, ';'); 00069 if (pch == NULL) return 0; 00070 00071 *pch = 0; 00072 index = atoi(buffer); 00073 00074 pch++; 00075 if (desc != NULL) strcpy(desc, pch); 00076 00077 return index; 00078 } 00079 00080 00081 bool log_temperature(int sensor_id, int value) 00082 { 00083 char buffer[32]; 00084 sprintf(buffer, "%d", value); 00085 return log_event(101, sensor_id, buffer); 00086 } 00087 00088 00089 bool log_io(int io_id, int value) 00090 { 00091 char buffer[32]; 00092 sprintf(buffer, "%d", value); 00093 return log_event(102, io_id, buffer); 00094 } 00095 00096 00097 bool log_event(int event_id, int sub_id, char *value) 00098 { 00099 sd_mutex.lock(); 00100 FILE *fp = fopen("/sd/emir2.log", "a"); 00101 if (fp == NULL) { 00102 debug("Could not open file for write\n"); 00103 sd_mutex.unlock(); 00104 return false; 00105 } 00106 00107 time_t m_time = get_rtc(); 00108 struct tm *now; 00109 now = localtime(&m_time); 00110 00111 fprintf(fp, "%d.%d.%04d %02d:%02d:%02d;%lu;", 00112 now->tm_mday, now->tm_mon+1, now->tm_year+1900, 00113 now->tm_hour, now->tm_min, now->tm_sec, 00114 m_time 00115 ); 00116 fprintf(fp, "%d;%d;%s\r\n", event_id, sub_id, value); 00117 00118 fclose(fp); 00119 sd_mutex.unlock(); 00120 return true; 00121 } 00122 00123 00124 void sd_init() 00125 { 00126 debug("Reading configs... "); 00127 bool b = read_config(); 00128 if (b) debug("OK\n"); else debug("failed\n"); 00129 00130 debug("Writing log... "); 00131 log_event(100, 0, "EMIRv2 compiled " __DATE__ " " __TIME__ ", starting"); 00132 debug("done\n"); 00133 } 00134
Generated on Thu Jul 14 2022 02:06:10 by 1.7.2