summaryrefslogtreecommitdiff
path: root/cethcan/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'cethcan/main.c')
-rw-r--r--cethcan/main.c68
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;
+}