Test1 of cmsis and IMU/AHRS (sensor BMA180,HMC5883,ITG3200) IMU/AHRS is not ok

Dependencies:   mbed

Committer:
caroe
Date:
Mon Jun 11 12:02:30 2012 +0000
Revision:
0:cb04b53e6f9b

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
caroe 0:cb04b53e6f9b 1 /**
caroe 0:cb04b53e6f9b 2 * Configuration file interface class (Version 0.0.1)
caroe 0:cb04b53e6f9b 3 *
caroe 0:cb04b53e6f9b 4 * Copyright (C) 2010 Shinichiro Nakamura (CuBeatSystems)
caroe 0:cb04b53e6f9b 5 * http://shinta.main.jp/
caroe 0:cb04b53e6f9b 6 */
caroe 0:cb04b53e6f9b 7 #include "ConfigFile.h"
caroe 0:cb04b53e6f9b 8
caroe 0:cb04b53e6f9b 9 #define NEWLINE_UNIX "\n"
caroe 0:cb04b53e6f9b 10 #define NEWLINE_DOS "\r\n"
caroe 0:cb04b53e6f9b 11 #define NEWLINE_MAC "\r"
caroe 0:cb04b53e6f9b 12
caroe 0:cb04b53e6f9b 13 /**
caroe 0:cb04b53e6f9b 14 * Create a configuration file class.
caroe 0:cb04b53e6f9b 15 */
caroe 0:cb04b53e6f9b 16 ConfigFile::ConfigFile() {
caroe 0:cb04b53e6f9b 17 /*
caroe 0:cb04b53e6f9b 18 * Allocation for a config_t list.
caroe 0:cb04b53e6f9b 19 */
caroe 0:cb04b53e6f9b 20 configlist = (config_t **)malloc(sizeof(config_t *) * MAXCONFIG);
caroe 0:cb04b53e6f9b 21 for (int i = 0; i < MAXCONFIG; i++) {
caroe 0:cb04b53e6f9b 22 configlist[i] = NULL;
caroe 0:cb04b53e6f9b 23 }
caroe 0:cb04b53e6f9b 24 }
caroe 0:cb04b53e6f9b 25
caroe 0:cb04b53e6f9b 26 /**
caroe 0:cb04b53e6f9b 27 * Destroy a configuration file class.
caroe 0:cb04b53e6f9b 28 */
caroe 0:cb04b53e6f9b 29 ConfigFile::~ConfigFile() {
caroe 0:cb04b53e6f9b 30 /*
caroe 0:cb04b53e6f9b 31 * Remove all storage and the contents.
caroe 0:cb04b53e6f9b 32 */
caroe 0:cb04b53e6f9b 33 for (int i = 0; i < MAXCONFIG; i++) {
caroe 0:cb04b53e6f9b 34 config_t *cfg = configlist[i];
caroe 0:cb04b53e6f9b 35 if (cfg != NULL) {
caroe 0:cb04b53e6f9b 36 free(cfg->key);
caroe 0:cb04b53e6f9b 37 free(cfg->value);
caroe 0:cb04b53e6f9b 38 free(cfg);
caroe 0:cb04b53e6f9b 39 }
caroe 0:cb04b53e6f9b 40 configlist[i] = NULL;
caroe 0:cb04b53e6f9b 41 }
caroe 0:cb04b53e6f9b 42
caroe 0:cb04b53e6f9b 43 /*
caroe 0:cb04b53e6f9b 44 * Remove cnofig_t list.
caroe 0:cb04b53e6f9b 45 */
caroe 0:cb04b53e6f9b 46 free(configlist);
caroe 0:cb04b53e6f9b 47 configlist = NULL;
caroe 0:cb04b53e6f9b 48 }
caroe 0:cb04b53e6f9b 49
caroe 0:cb04b53e6f9b 50 /**
caroe 0:cb04b53e6f9b 51 * Get a value for a key.
caroe 0:cb04b53e6f9b 52 *
caroe 0:cb04b53e6f9b 53 * @param key A target key name.
caroe 0:cb04b53e6f9b 54 * @param value A pointer to a value storage.
caroe 0:cb04b53e6f9b 55 * @param siz A size of a value storage.
caroe 0:cb04b53e6f9b 56 * @return A value or NULL.
caroe 0:cb04b53e6f9b 57 */
caroe 0:cb04b53e6f9b 58 bool ConfigFile::getValue(char *key, char *value, size_t siz) {
caroe 0:cb04b53e6f9b 59 /*
caroe 0:cb04b53e6f9b 60 * Null check.
caroe 0:cb04b53e6f9b 61 */
caroe 0:cb04b53e6f9b 62 if (key == NULL) {
caroe 0:cb04b53e6f9b 63 return false;
caroe 0:cb04b53e6f9b 64 }
caroe 0:cb04b53e6f9b 65
caroe 0:cb04b53e6f9b 66 /*
caroe 0:cb04b53e6f9b 67 * Search a config_t object from the key.
caroe 0:cb04b53e6f9b 68 */
caroe 0:cb04b53e6f9b 69 config_t *p = search(key);
caroe 0:cb04b53e6f9b 70 if (p == NULL) {
caroe 0:cb04b53e6f9b 71 return false;
caroe 0:cb04b53e6f9b 72 }
caroe 0:cb04b53e6f9b 73
caroe 0:cb04b53e6f9b 74 /*
caroe 0:cb04b53e6f9b 75 * Check the storage size.
caroe 0:cb04b53e6f9b 76 */
caroe 0:cb04b53e6f9b 77 if (siz <= strlen(p->value)) {
caroe 0:cb04b53e6f9b 78 return false;
caroe 0:cb04b53e6f9b 79 }
caroe 0:cb04b53e6f9b 80
caroe 0:cb04b53e6f9b 81 /*
caroe 0:cb04b53e6f9b 82 * Copy the value to the storage.
caroe 0:cb04b53e6f9b 83 */
caroe 0:cb04b53e6f9b 84 strcpy(value, p->value);
caroe 0:cb04b53e6f9b 85 return true;
caroe 0:cb04b53e6f9b 86 }
caroe 0:cb04b53e6f9b 87
caroe 0:cb04b53e6f9b 88 /**
caroe 0:cb04b53e6f9b 89 * Set a set of a key and value.
caroe 0:cb04b53e6f9b 90 *
caroe 0:cb04b53e6f9b 91 * @param key A key.
caroe 0:cb04b53e6f9b 92 * @param value A value.
caroe 0:cb04b53e6f9b 93 *
caroe 0:cb04b53e6f9b 94 * @return True if it succeed.
caroe 0:cb04b53e6f9b 95 */
caroe 0:cb04b53e6f9b 96 bool ConfigFile::setValue(char *key, char *value) {
caroe 0:cb04b53e6f9b 97 /*
caroe 0:cb04b53e6f9b 98 * Null check.
caroe 0:cb04b53e6f9b 99 */
caroe 0:cb04b53e6f9b 100 if ((key == NULL) || (value == NULL)) {
caroe 0:cb04b53e6f9b 101 return false;
caroe 0:cb04b53e6f9b 102 }
caroe 0:cb04b53e6f9b 103
caroe 0:cb04b53e6f9b 104 /*
caroe 0:cb04b53e6f9b 105 * Size check.
caroe 0:cb04b53e6f9b 106 */
caroe 0:cb04b53e6f9b 107 if ((MAXLEN_KEY < strlen(key)) || (MAXLEN_VALUE < strlen(value))) {
caroe 0:cb04b53e6f9b 108 return false;
caroe 0:cb04b53e6f9b 109 }
caroe 0:cb04b53e6f9b 110
caroe 0:cb04b53e6f9b 111 /*
caroe 0:cb04b53e6f9b 112 * Search a config_t object from the key.
caroe 0:cb04b53e6f9b 113 */
caroe 0:cb04b53e6f9b 114 config_t *p = search(key);
caroe 0:cb04b53e6f9b 115 if (p == NULL) {
caroe 0:cb04b53e6f9b 116 /*
caroe 0:cb04b53e6f9b 117 * Allocation a memory for a new key.
caroe 0:cb04b53e6f9b 118 */
caroe 0:cb04b53e6f9b 119 char *k = (char *)malloc(sizeof(char) * (strlen(key) + 1));
caroe 0:cb04b53e6f9b 120 if (k == NULL) {
caroe 0:cb04b53e6f9b 121 return false;
caroe 0:cb04b53e6f9b 122 }
caroe 0:cb04b53e6f9b 123 strcpy(k, key);
caroe 0:cb04b53e6f9b 124
caroe 0:cb04b53e6f9b 125 /*
caroe 0:cb04b53e6f9b 126 * Allocation a memory for a new value.
caroe 0:cb04b53e6f9b 127 */
caroe 0:cb04b53e6f9b 128 char *v = (char *)malloc(sizeof(char) * (strlen(value) + 1));
caroe 0:cb04b53e6f9b 129 if (v == NULL) {
caroe 0:cb04b53e6f9b 130 free(k);
caroe 0:cb04b53e6f9b 131 return false;
caroe 0:cb04b53e6f9b 132 }
caroe 0:cb04b53e6f9b 133 strcpy(v, value);
caroe 0:cb04b53e6f9b 134
caroe 0:cb04b53e6f9b 135 /*
caroe 0:cb04b53e6f9b 136 * Allocation a memory for a new configuration.
caroe 0:cb04b53e6f9b 137 */
caroe 0:cb04b53e6f9b 138 config_t *cfg = (config_t *)malloc(sizeof(config_t) * 1);
caroe 0:cb04b53e6f9b 139 if (cfg == NULL) {
caroe 0:cb04b53e6f9b 140 free(k);
caroe 0:cb04b53e6f9b 141 free(v);
caroe 0:cb04b53e6f9b 142 return false;
caroe 0:cb04b53e6f9b 143 }
caroe 0:cb04b53e6f9b 144 cfg->key = k;
caroe 0:cb04b53e6f9b 145 cfg->value = v;
caroe 0:cb04b53e6f9b 146
caroe 0:cb04b53e6f9b 147 /*
caroe 0:cb04b53e6f9b 148 * Add the new configuration.
caroe 0:cb04b53e6f9b 149 */
caroe 0:cb04b53e6f9b 150 if (!add(cfg)) {
caroe 0:cb04b53e6f9b 151 free(k);
caroe 0:cb04b53e6f9b 152 free(v);
caroe 0:cb04b53e6f9b 153 free(cfg);
caroe 0:cb04b53e6f9b 154 return false;
caroe 0:cb04b53e6f9b 155 }
caroe 0:cb04b53e6f9b 156
caroe 0:cb04b53e6f9b 157 return true;
caroe 0:cb04b53e6f9b 158 } else {
caroe 0:cb04b53e6f9b 159 /*
caroe 0:cb04b53e6f9b 160 * The value is same.
caroe 0:cb04b53e6f9b 161 */
caroe 0:cb04b53e6f9b 162 if (strcmp(value, p->value) == 0) {
caroe 0:cb04b53e6f9b 163 return true;
caroe 0:cb04b53e6f9b 164 }
caroe 0:cb04b53e6f9b 165
caroe 0:cb04b53e6f9b 166 /*
caroe 0:cb04b53e6f9b 167 * Free a memory for the value.
caroe 0:cb04b53e6f9b 168 */
caroe 0:cb04b53e6f9b 169 free(p->value);
caroe 0:cb04b53e6f9b 170 p->value = NULL;
caroe 0:cb04b53e6f9b 171
caroe 0:cb04b53e6f9b 172 /*
caroe 0:cb04b53e6f9b 173 * Allocation memory for the new value.
caroe 0:cb04b53e6f9b 174 */
caroe 0:cb04b53e6f9b 175 char *v = (char *)malloc(sizeof(char) * (strlen(value) + 1));
caroe 0:cb04b53e6f9b 176 if (v == NULL) {
caroe 0:cb04b53e6f9b 177 return false;
caroe 0:cb04b53e6f9b 178 }
caroe 0:cb04b53e6f9b 179
caroe 0:cb04b53e6f9b 180 /*
caroe 0:cb04b53e6f9b 181 * Store it.
caroe 0:cb04b53e6f9b 182 */
caroe 0:cb04b53e6f9b 183 strcpy(v, value);
caroe 0:cb04b53e6f9b 184 p->value = v;
caroe 0:cb04b53e6f9b 185
caroe 0:cb04b53e6f9b 186 return true;
caroe 0:cb04b53e6f9b 187 }
caroe 0:cb04b53e6f9b 188 }
caroe 0:cb04b53e6f9b 189
caroe 0:cb04b53e6f9b 190 /**
caroe 0:cb04b53e6f9b 191 * Remove a config.
caroe 0:cb04b53e6f9b 192 *
caroe 0:cb04b53e6f9b 193 * @param key A key.
caroe 0:cb04b53e6f9b 194 *
caroe 0:cb04b53e6f9b 195 * @return True if it succeed.
caroe 0:cb04b53e6f9b 196 */
caroe 0:cb04b53e6f9b 197 bool ConfigFile::remove(char *key) {
caroe 0:cb04b53e6f9b 198 if (key == NULL) {
caroe 0:cb04b53e6f9b 199 return false;
caroe 0:cb04b53e6f9b 200 }
caroe 0:cb04b53e6f9b 201 for (int i = 0; i < MAXCONFIG; i++) {
caroe 0:cb04b53e6f9b 202 config_t *cfg = configlist[i];
caroe 0:cb04b53e6f9b 203 if (cfg != NULL) {
caroe 0:cb04b53e6f9b 204 if (strcmp(cfg->key, key) == 0) {
caroe 0:cb04b53e6f9b 205 free(cfg->key);
caroe 0:cb04b53e6f9b 206 free(cfg->value);
caroe 0:cb04b53e6f9b 207 free(cfg);
caroe 0:cb04b53e6f9b 208 configlist[i] = NULL;
caroe 0:cb04b53e6f9b 209 return true;
caroe 0:cb04b53e6f9b 210 }
caroe 0:cb04b53e6f9b 211 }
caroe 0:cb04b53e6f9b 212 }
caroe 0:cb04b53e6f9b 213 return false;
caroe 0:cb04b53e6f9b 214 }
caroe 0:cb04b53e6f9b 215
caroe 0:cb04b53e6f9b 216 /**
caroe 0:cb04b53e6f9b 217 * Remove all config.
caroe 0:cb04b53e6f9b 218 *
caroe 0:cb04b53e6f9b 219 * @return True if it succeed.
caroe 0:cb04b53e6f9b 220 */
caroe 0:cb04b53e6f9b 221 bool ConfigFile::removeAll(void) {
caroe 0:cb04b53e6f9b 222 for (int i = 0; i < MAXCONFIG; i++) {
caroe 0:cb04b53e6f9b 223 config_t *p = configlist[i];
caroe 0:cb04b53e6f9b 224 if (p != NULL) {
caroe 0:cb04b53e6f9b 225 free(p->key);
caroe 0:cb04b53e6f9b 226 free(p->value);
caroe 0:cb04b53e6f9b 227 }
caroe 0:cb04b53e6f9b 228 free(p);
caroe 0:cb04b53e6f9b 229 configlist[i] = NULL;
caroe 0:cb04b53e6f9b 230 }
caroe 0:cb04b53e6f9b 231 return true;
caroe 0:cb04b53e6f9b 232 }
caroe 0:cb04b53e6f9b 233
caroe 0:cb04b53e6f9b 234 /**
caroe 0:cb04b53e6f9b 235 * Get a number of configuration sets.
caroe 0:cb04b53e6f9b 236 *
caroe 0:cb04b53e6f9b 237 * @return number of configuration sets.
caroe 0:cb04b53e6f9b 238 */
caroe 0:cb04b53e6f9b 239 int ConfigFile::getCount() {
caroe 0:cb04b53e6f9b 240 int cnt = 0;
caroe 0:cb04b53e6f9b 241 for (int i = 0; i < MAXCONFIG; i++) {
caroe 0:cb04b53e6f9b 242 config_t *p = configlist[i];
caroe 0:cb04b53e6f9b 243 if (p != NULL) {
caroe 0:cb04b53e6f9b 244 cnt++;
caroe 0:cb04b53e6f9b 245 }
caroe 0:cb04b53e6f9b 246 }
caroe 0:cb04b53e6f9b 247 return cnt;
caroe 0:cb04b53e6f9b 248 }
caroe 0:cb04b53e6f9b 249
caroe 0:cb04b53e6f9b 250 /**
caroe 0:cb04b53e6f9b 251 * Get a key and a value.
caroe 0:cb04b53e6f9b 252 *
caroe 0:cb04b53e6f9b 253 * @param index Index number of this list.
caroe 0:cb04b53e6f9b 254 * @param key A pointer to a buffer for key.
caroe 0:cb04b53e6f9b 255 * @param keybufsiz A size of the key buffer.
caroe 0:cb04b53e6f9b 256 * @param value A pointer to a buffer for value.
caroe 0:cb04b53e6f9b 257 * @param valuebufsiz A size of the value buffer.
caroe 0:cb04b53e6f9b 258 *
caroe 0:cb04b53e6f9b 259 * @return true if it succeed.
caroe 0:cb04b53e6f9b 260 */
caroe 0:cb04b53e6f9b 261 bool ConfigFile::getKeyAndValue(int index, char *key, size_t keybufsiz, char *value, size_t valuebufsiz) {
caroe 0:cb04b53e6f9b 262 int cnt = 0;
caroe 0:cb04b53e6f9b 263 for (int i = 0; i < MAXCONFIG; i++) {
caroe 0:cb04b53e6f9b 264 config_t *p = configlist[i];
caroe 0:cb04b53e6f9b 265 if (p != NULL) {
caroe 0:cb04b53e6f9b 266 if (cnt == index) {
caroe 0:cb04b53e6f9b 267 if ((strlen(p->key) < keybufsiz) && (strlen(p->value) < valuebufsiz)) {
caroe 0:cb04b53e6f9b 268 strcpy(key, p->key);
caroe 0:cb04b53e6f9b 269 strcpy(value, p->value);
caroe 0:cb04b53e6f9b 270 return true;
caroe 0:cb04b53e6f9b 271 }
caroe 0:cb04b53e6f9b 272 return false;
caroe 0:cb04b53e6f9b 273 }
caroe 0:cb04b53e6f9b 274 cnt++;
caroe 0:cb04b53e6f9b 275 }
caroe 0:cb04b53e6f9b 276 }
caroe 0:cb04b53e6f9b 277 return false;
caroe 0:cb04b53e6f9b 278 }
caroe 0:cb04b53e6f9b 279
caroe 0:cb04b53e6f9b 280 /**
caroe 0:cb04b53e6f9b 281 * Read from the target file.
caroe 0:cb04b53e6f9b 282 *
caroe 0:cb04b53e6f9b 283 * @param file A target file name.
caroe 0:cb04b53e6f9b 284 */
caroe 0:cb04b53e6f9b 285 bool ConfigFile::read(char *file) {
caroe 0:cb04b53e6f9b 286 /*
caroe 0:cb04b53e6f9b 287 * Open the target file.
caroe 0:cb04b53e6f9b 288 */
caroe 0:cb04b53e6f9b 289 FILE *fp = fopen(file, "r");
caroe 0:cb04b53e6f9b 290 if (fp == NULL) {
caroe 0:cb04b53e6f9b 291 return false;
caroe 0:cb04b53e6f9b 292 }
caroe 0:cb04b53e6f9b 293
caroe 0:cb04b53e6f9b 294 /*
caroe 0:cb04b53e6f9b 295 * Remove all configuration.
caroe 0:cb04b53e6f9b 296 */
caroe 0:cb04b53e6f9b 297 removeAll();
caroe 0:cb04b53e6f9b 298
caroe 0:cb04b53e6f9b 299 /*
caroe 0:cb04b53e6f9b 300 * Read from a file.
caroe 0:cb04b53e6f9b 301 */
caroe 0:cb04b53e6f9b 302 char buf[MAXLEN_KEY + 8 + MAXLEN_VALUE];
caroe 0:cb04b53e6f9b 303 while (fgets(buf, sizeof(buf), fp) != NULL) {
caroe 0:cb04b53e6f9b 304 /*
caroe 0:cb04b53e6f9b 305 * Ignore a comment.
caroe 0:cb04b53e6f9b 306 */
caroe 0:cb04b53e6f9b 307 if (buf[0] == '#') {
caroe 0:cb04b53e6f9b 308 continue;
caroe 0:cb04b53e6f9b 309 }
caroe 0:cb04b53e6f9b 310
caroe 0:cb04b53e6f9b 311 /*
caroe 0:cb04b53e6f9b 312 * Trim a return.
caroe 0:cb04b53e6f9b 313 */
caroe 0:cb04b53e6f9b 314 const size_t len = strlen(buf);
caroe 0:cb04b53e6f9b 315 for (int i = 0; i < len; i++) {
caroe 0:cb04b53e6f9b 316 if ((buf[i] == '\r') || (buf[i] == '\n')) {
caroe 0:cb04b53e6f9b 317 buf[i] = '\0';
caroe 0:cb04b53e6f9b 318 }
caroe 0:cb04b53e6f9b 319 }
caroe 0:cb04b53e6f9b 320
caroe 0:cb04b53e6f9b 321 /*
caroe 0:cb04b53e6f9b 322 * Separate key and value.
caroe 0:cb04b53e6f9b 323 */
caroe 0:cb04b53e6f9b 324 char k[MAXLEN_KEY];
caroe 0:cb04b53e6f9b 325 char v[MAXLEN_VALUE];
caroe 0:cb04b53e6f9b 326 char *sp = strchr(buf, SEPARATOR);
caroe 0:cb04b53e6f9b 327 if (sp != NULL) {
caroe 0:cb04b53e6f9b 328 strcpy(v, sp + 1);
caroe 0:cb04b53e6f9b 329 *sp = '\0';
caroe 0:cb04b53e6f9b 330 strcpy(k, buf);
caroe 0:cb04b53e6f9b 331 setValue(k, v);
caroe 0:cb04b53e6f9b 332 }
caroe 0:cb04b53e6f9b 333 }
caroe 0:cb04b53e6f9b 334 fclose(fp);
caroe 0:cb04b53e6f9b 335 return true;
caroe 0:cb04b53e6f9b 336 }
caroe 0:cb04b53e6f9b 337
caroe 0:cb04b53e6f9b 338 /**
caroe 0:cb04b53e6f9b 339 * Write from the target file.
caroe 0:cb04b53e6f9b 340 *
caroe 0:cb04b53e6f9b 341 * @param file A pointer to a file name.
caroe 0:cb04b53e6f9b 342 * @param header A pointer to a header.
caroe 0:cb04b53e6f9b 343 * @param ff File format.
caroe 0:cb04b53e6f9b 344 */
caroe 0:cb04b53e6f9b 345 bool ConfigFile::write(char *file, char *header, FileFormat ff) {
caroe 0:cb04b53e6f9b 346 /*
caroe 0:cb04b53e6f9b 347 * Open the target file.
caroe 0:cb04b53e6f9b 348 */
caroe 0:cb04b53e6f9b 349 FILE *fp = fopen(file, "w");
caroe 0:cb04b53e6f9b 350 if (fp == NULL) {
caroe 0:cb04b53e6f9b 351 return false;
caroe 0:cb04b53e6f9b 352 }
caroe 0:cb04b53e6f9b 353
caroe 0:cb04b53e6f9b 354 /*
caroe 0:cb04b53e6f9b 355 * Set a type of new line.
caroe 0:cb04b53e6f9b 356 */
caroe 0:cb04b53e6f9b 357 char *newline = NEWLINE_UNIX;
caroe 0:cb04b53e6f9b 358 switch (ff) {
caroe 0:cb04b53e6f9b 359 case UNIX:
caroe 0:cb04b53e6f9b 360 newline = NEWLINE_UNIX;
caroe 0:cb04b53e6f9b 361 break;
caroe 0:cb04b53e6f9b 362 case MAC:
caroe 0:cb04b53e6f9b 363 newline = NEWLINE_MAC;
caroe 0:cb04b53e6f9b 364 break;
caroe 0:cb04b53e6f9b 365 case DOS:
caroe 0:cb04b53e6f9b 366 newline = NEWLINE_DOS;
caroe 0:cb04b53e6f9b 367 break;
caroe 0:cb04b53e6f9b 368 default:
caroe 0:cb04b53e6f9b 369 newline = NEWLINE_UNIX;
caroe 0:cb04b53e6f9b 370 break;
caroe 0:cb04b53e6f9b 371 }
caroe 0:cb04b53e6f9b 372
caroe 0:cb04b53e6f9b 373 /*
caroe 0:cb04b53e6f9b 374 * Write the header.
caroe 0:cb04b53e6f9b 375 */
caroe 0:cb04b53e6f9b 376 if (header != NULL) {
caroe 0:cb04b53e6f9b 377 fprintf(fp, "%s%s", header, newline);
caroe 0:cb04b53e6f9b 378 }
caroe 0:cb04b53e6f9b 379
caroe 0:cb04b53e6f9b 380 /*
caroe 0:cb04b53e6f9b 381 * Write the data.
caroe 0:cb04b53e6f9b 382 */
caroe 0:cb04b53e6f9b 383 for (int i = 0; i < MAXCONFIG; i++) {
caroe 0:cb04b53e6f9b 384 config_t *cfg = configlist[i];
caroe 0:cb04b53e6f9b 385 if (cfg != NULL) {
caroe 0:cb04b53e6f9b 386 fprintf(fp, "%s=%s%s", cfg->key, cfg->value, newline);
caroe 0:cb04b53e6f9b 387 }
caroe 0:cb04b53e6f9b 388 }
caroe 0:cb04b53e6f9b 389 fclose(fp);
caroe 0:cb04b53e6f9b 390 return true;
caroe 0:cb04b53e6f9b 391 }
caroe 0:cb04b53e6f9b 392
caroe 0:cb04b53e6f9b 393 ConfigFile::config_t *ConfigFile::search(char *key) {
caroe 0:cb04b53e6f9b 394 if (key == NULL) {
caroe 0:cb04b53e6f9b 395 return NULL;
caroe 0:cb04b53e6f9b 396 }
caroe 0:cb04b53e6f9b 397 for (int i = 0; i < MAXCONFIG; i++) {
caroe 0:cb04b53e6f9b 398 if (configlist[i] != NULL) {
caroe 0:cb04b53e6f9b 399 if (strcmp(configlist[i]->key, key) == 0) {
caroe 0:cb04b53e6f9b 400 return configlist[i];
caroe 0:cb04b53e6f9b 401 }
caroe 0:cb04b53e6f9b 402 }
caroe 0:cb04b53e6f9b 403 }
caroe 0:cb04b53e6f9b 404 return NULL;
caroe 0:cb04b53e6f9b 405 }
caroe 0:cb04b53e6f9b 406
caroe 0:cb04b53e6f9b 407 bool ConfigFile::add(config_t *cfg) {
caroe 0:cb04b53e6f9b 408 for (int i = 0; i < MAXCONFIG; i++) {
caroe 0:cb04b53e6f9b 409 if (configlist[i] == NULL) {
caroe 0:cb04b53e6f9b 410 configlist[i] = cfg;
caroe 0:cb04b53e6f9b 411 return true;
caroe 0:cb04b53e6f9b 412 }
caroe 0:cb04b53e6f9b 413 }
caroe 0:cb04b53e6f9b 414 return false;
caroe 0:cb04b53e6f9b 415 }