diff options
author | Tobias Jahnke <tobias.jahnke@microchip.com> | 2017-11-10 08:57:11 +0100 |
---|---|---|
committer | Tobias Jahnke <tobias.jahnke@microchip.com> | 2017-11-11 22:15:37 +0100 |
commit | d2433a3c9848dd4263f9e8d7f833779f614be81d (patch) | |
tree | 78484a639d0f6cf144fdc6f6b5e229b646ba2faa | |
parent | 825ce525d20ac99cd590d40fc06237c1e363cd7e (diff) |
enables automatic network setup on bindinginit
Change-Id: Ie0c9f8cf04647c315949f0f2cecf61bb08b69e6d
Signed-off-by: Tobias Jahnke <tobias.jahnke@microchip.com>
-rw-r--r-- | ucs2-afb/ucs_binding.c | 65 |
1 files changed, 44 insertions, 21 deletions
diff --git a/ucs2-afb/ucs_binding.c b/ucs2-afb/ucs_binding.c index a234410..d343ec8 100644 --- a/ucs2-afb/ucs_binding.c +++ b/ucs2-afb/ucs_binding.c @@ -315,22 +315,16 @@ STATIC char* GetDefaultConfig(void) { return NULL; } -STATIC UcsXmlVal_t* ParseFile(struct afb_req request) { +STATIC UcsXmlVal_t* ParseFile(const char *filename) { char *xmlBuffer; ssize_t readSize; int fdHandle ; struct stat fdStat; UcsXmlVal_t* ucsConfig; - const char *filename = afb_req_value(request, "filename"); - if (!filename) { - afb_req_fail_f (request, "filename-missing", "No filename given"); - goto OnErrorExit; - } - fdHandle = open(filename, O_RDONLY); if (fdHandle <= 0) { - afb_req_fail_f (request, "fileread-error", "File not accessible: '%s' err=%s", filename, strerror(fdHandle)); + AFB_ERROR("File not accessible: '%s' err=%s", filename, strerror(fdHandle)); goto OnErrorExit; } @@ -342,13 +336,13 @@ STATIC UcsXmlVal_t* ParseFile(struct afb_req request) { xmlBuffer[readSize] = '\0'; /* In any case, terminate it. */ if (readSize != fdStat.st_size) { - afb_req_fail_f (request, "fileread-fail", "File to read fullfile '%s' size(%d!=%d)", filename, (int)readSize, (int)fdStat.st_size); + AFB_ERROR("File to read fullfile '%s' size(%d!=%d)", filename, (int)readSize, (int)fdStat.st_size); goto OnErrorExit; } ucsConfig = UcsXml_Parse(xmlBuffer); if (!ucsConfig) { - afb_req_fail_f (request, "filexml-error", "File XML invalid: '%s'", filename); + AFB_ERROR("File XML invalid: '%s'", filename); goto OnErrorExit; } @@ -358,22 +352,25 @@ STATIC UcsXmlVal_t* ParseFile(struct afb_req request) { return NULL; } -PUBLIC void ucs2_initialise (struct afb_req request) { +PUBLIC int StartConfiguration(const char *filename) { static UcsXmlVal_t *ucsConfig; static ucsContextT ucsContext; sd_event_source *evtSource; int err; - + /* Read and parse XML file */ - ucsConfig = ParseFile (request); - if (NULL == ucsConfig) goto OnErrorExit; + ucsConfig = ParseFile(filename); + if (NULL == ucsConfig) { + AFB_ERROR ("Cannot access or load file: '%s'", filename); + goto OnErrorExit; + } /* When ucsContextS is set, do not initalize UNICENS, CDEVs or system hooks, just load new XML */ if (!ucsContextS) { if (!ucsContextS && !InitializeCdevs(&ucsContext)) { - afb_req_fail_f (request, "devnit-error", "Fail to initialise device [rx=%s tx=%s]", CONTROL_CDEV_RX, CONTROL_CDEV_TX); + AFB_ERROR ("Fail to initialise device [rx=%s tx=%s]", CONTROL_CDEV_RX, CONTROL_CDEV_TX); goto OnErrorExit; } @@ -383,7 +380,7 @@ PUBLIC void ucs2_initialise (struct afb_req request) { /* register aplayHandle file fd into binder mainloop */ err = sd_event_add_io(afb_daemon_get_event_loop(), &evtSource, ucsContext.rx.fileHandle, EPOLLIN, onReadCB, &ucsContext); if (err < 0) { - afb_req_fail_f (request, "register-mainloop", "Cannot hook events to mainloop"); + AFB_ERROR ("Cannot hook events to mainloop"); goto OnErrorExit; } @@ -392,7 +389,26 @@ PUBLIC void ucs2_initialise (struct afb_req request) { } /* Initialise UNICENS with parsed config */ if (!UCSI_NewConfig(&ucsContext.ucsiData, ucsConfig)) { - afb_req_fail_f (request, "UNICENS-init", "Fail to initialize UNICENS"); + AFB_ERROR ("Fail to initialize UNICENS"); + goto OnErrorExit; + } + + return 0; + + OnErrorExit: + return -1; +} + +PUBLIC void ucs2_initialise (struct afb_req request) { + const char *filename = afb_req_value(request, "filename"); + + if (!filename) { + afb_req_fail_f (request, "filename-missing", "No filename given"); + goto OnErrorExit; + } + + if (StartConfiguration(filename) != 0) { + afb_req_fail_f (request, "load-failed", "Cannot parse file and start UNICENS"); goto OnErrorExit; } @@ -624,11 +640,18 @@ PUBLIC void ucs2_writei2c (struct afb_req request) { } PUBLIC int ucs2_initbinding(void) { - char *config_file = GetDefaultConfig(); - if (config_file != NULL) { +#ifndef DISABLE_AUTOSTART + char *filename = GetDefaultConfig(); + if (filename != NULL) { - free(config_file); + AFB_NOTICE("AUTO-LOAD configuration: %s", filename); + if (StartConfiguration(filename) == 0) { + AFB_NOTICE("AUTO-LOAD successful"); + } else { + AFB_NOTICE("AUTO-LOAD failed"); + } + free(filename); } - +#endif return 0; } |