This is a demonstration of two Choro Q Hybrid cars.

appconf.cpp

Committer:
shintamainjp
Date:
2010-11-22
Revision:
0:d825f8dae2be

File content as of revision 0:d825f8dae2be:

#include "appconf.h"
#include <ConfigFile.h>

LocalFileSystem fs_local("local");

/*
 * Configuration File Example.
 *
 * Ch1=A
 * Ch2=B
 */

#define CONFIG_FILENAME "/local/SETUP.CFG"

#define KEY_CH1 "Ch1"
#define KEY_CH2 "Ch2"
#define VALUE_CHANNEL_A "A"
#define VALUE_CHANNEL_B "B"
#define VALUE_CHANNEL_C "C"
#define VALUE_CHANNEL_D "D"

/**
 * Initialize a configuration.
 *
 * @param p A pointer to a configuration structure.
 */
void appconf_init(appconf_t *p) {
    p->ch1 = ChoroQ::ChA;
    p->ch2 = ChoroQ::ChB;
}

/**
 * Get a channel from the key.
 *
 * @param cf A pointer to a config file object.
 * @param p A pointer to a application config.
 * @param key The key.
 * @param ch A pointer to the channel.
 *
 * @return Return 0 if it succeed.
 */
static int getChannel(ConfigFile *cf, appconf_t *p, char *key, ChoroQ::Channel *ch) {
    char value[64];
    if (!cf->getValue(key, value, sizeof(value))) {
        return -1;
    }

    if (strcmp(value, VALUE_CHANNEL_A) == 0) {
        *ch = ChoroQ::ChA;
        return 0;
    } else if (strcmp(value, VALUE_CHANNEL_B) == 0) {
        *ch = ChoroQ::ChB;
        return 0;
    } else if (strcmp(value, VALUE_CHANNEL_C) == 0) {
        *ch = ChoroQ::ChC;
        return 0;
    } else if (strcmp(value, VALUE_CHANNEL_D) == 0) {
        *ch = ChoroQ::ChD;
        return 0;
    } else {
        return -2;
    }
}

/**
 * Read a configuration.
 *
 * @param p A pointer to a configuration structure.
 *
 * @return Return 0 if read succeed.
 */
int appconf_read(appconf_t *p) {
    ConfigFile cfg;

    if (!cfg.read(CONFIG_FILENAME)) {
        return -1;
    }

    if (getChannel(&cfg, p, KEY_CH1, &p->ch1) != 0) {
        return -2;
    }
    if (getChannel(&cfg, p, KEY_CH2, &p->ch2) != 0) {
        return -3;
    }

    return 0;
}