diff options
author | root <root@beaglebone.(none)> | 2000-01-01 00:41:04 +0000 |
---|---|---|
committer | root <root@beaglebone.(none)> | 2000-01-01 00:41:04 +0000 |
commit | 6a8219d0c4c3d1458673bcf28af359bbcb519454 (patch) | |
tree | f00d323027f7885b5c6d5384152b2919cbc91992 /cethcan/main.c | |
parent | a645cf73e2825aef54e307ea326afac73fde65b0 (diff) | |
parent | cd4484ab068678edfa9335a1c6d7c91b93793970 (diff) |
Merge branch 'cethcan'
Diffstat (limited to 'cethcan/main.c')
-rw-r--r-- | cethcan/main.c | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/cethcan/main.c b/cethcan/main.c new file mode 100644 index 0000000..5bdca0a --- /dev/null +++ b/cethcan/main.c @@ -0,0 +1,68 @@ +#include "cethcan.h" + +struct event_base *ev_base; + +int main(int argc, char **argv) +{ + int optch = 0; + const char *cfgfile = "cethcan.json"; + json_error_t je; + json_t *config, *ethercfg, *lightcfg, *socancfg; + + do { + optch = getopt(argc, argv, "c:"); + switch (optch) { + case 'c': + cfgfile = optarg; + break; + case -1: + break; + } + } while (optch != -1); + + if (optind < argc) { + fprintf(stderr, "leftover arguments\n"); + return 1; + } + + config = json_load_file(cfgfile, JSON_REJECT_DUPLICATES, &je); + if (!config) { + fprintf(stderr, "failed to load config:\n%s:%d:%d %s\n", + je.source, je.line, je.column, je.text); + return 1; + } + if (!json_is_object(config)) { + fprintf(stderr, "config must be object/dictionary\n"); + return 1; + } + + ev_base = event_base_new(); + + can_init(); + + ethercfg = json_object_get(config, "ethernet"); + for (size_t i = 0; i < json_array_size(ethercfg); i++) { + json_t *c = json_array_get(ethercfg, i); + if (ether_init(c)) + return 1; + } + + lightcfg = json_object_get(config, "lights"); + for (size_t i = 0; i < json_array_size(lightcfg); i++) { + json_t *c = json_array_get(lightcfg, i); + if (light_init_conf(c)) + return 1; + } + + socancfg = json_object_get(config, "socketcan"); + for (size_t i = 0; i < json_array_size(socancfg); i++) { + json_t *c = json_array_get(socancfg, i); + if (socan_init(c)) + return 1; + } + + http_init(); + + event_base_loop(ev_base, 0); + return 0; +} |