Add submodules and project sceleton
This commit is contained in:
parent
0943b102cb
commit
06a69f0edd
|
@ -0,0 +1,7 @@
|
||||||
|
build/
|
||||||
|
*.tar.gz
|
||||||
|
*.zip
|
||||||
|
*.rar
|
||||||
|
*.gz
|
||||||
|
*.bz2
|
||||||
|
*.vgcore
|
|
@ -0,0 +1,6 @@
|
||||||
|
[submodule "sdk"]
|
||||||
|
path = sdk
|
||||||
|
url = git@lowenware.com:lowenware/aisl-sdk.git
|
||||||
|
[submodule "cStuff"]
|
||||||
|
path = cStuff
|
||||||
|
url = git@lowenware.com:lowenware/cStuff.git
|
|
@ -0,0 +1,77 @@
|
||||||
|
#
|
||||||
|
# Makefile
|
||||||
|
# Ilja Kartašov, 2019-03-02 17:32
|
||||||
|
#
|
||||||
|
.POSIX:
|
||||||
|
|
||||||
|
# Project directories
|
||||||
|
SRC_DIR ?= src
|
||||||
|
SDK_DIR ?= sdk
|
||||||
|
CSTUFF_DIR ?= cStuff
|
||||||
|
OUT_DIR ?= ./build
|
||||||
|
|
||||||
|
# Project definition
|
||||||
|
include project.mk
|
||||||
|
|
||||||
|
# CFLAGS
|
||||||
|
|
||||||
|
CFLAGS := \
|
||||||
|
$(PROJECT_INCLUDES) \
|
||||||
|
-std=c99 \
|
||||||
|
-pedantic \
|
||||||
|
-Wall \
|
||||||
|
-Wmissing-prototypes \
|
||||||
|
-Wstrict-prototypes \
|
||||||
|
-Wold-style-definition \
|
||||||
|
-O2 \
|
||||||
|
-s \
|
||||||
|
-fvisibility=hidden \
|
||||||
|
-DVERSION_MAJOR=$(PROJECT_VERSION_MAJOR) \
|
||||||
|
-DVERSION_MINOR=$(PROJECT_VERSION_MINOR) \
|
||||||
|
-DVERSION_TWEAK=$(PROJECT_VERSION_TWEAK) \
|
||||||
|
-DVERSION_LABEL=$(PROJECT_VERSION_LABEL) \
|
||||||
|
$(PROJECT_CFLAGS) \
|
||||||
|
$(CFLAGS) \
|
||||||
|
|
||||||
|
|
||||||
|
LDFLAGS := \
|
||||||
|
$(PROJECT_LIBRARIES) \
|
||||||
|
$(LDFLAGS) \
|
||||||
|
$(PROJECT_LDFLAGS) \
|
||||||
|
|
||||||
|
|
||||||
|
SOURCE_LIST := $(wildcard $(PROJECT_SOURCES))
|
||||||
|
OBJECT_FILES := $(addprefix $(OUT_DIR)/o_, ${SOURCE_LIST:.c=.o})
|
||||||
|
|
||||||
|
|
||||||
|
project: dirs $(OBJECT_FILES)
|
||||||
|
$(info linking target: $@)
|
||||||
|
@$(CC) -o $(OUT_DIR)/$(PROJECT_NAME) $(OBJECT_FILES) $(LDFLAGS)
|
||||||
|
$(info done: $@)
|
||||||
|
|
||||||
|
|
||||||
|
build/o_%.o: %.c
|
||||||
|
$(info compiling file: $<)
|
||||||
|
@$(CC) $(CFLAGS) -c $< -o $@
|
||||||
|
|
||||||
|
dirs:
|
||||||
|
$(info preparing: build folders)
|
||||||
|
@mkdir -p $(OUT_DIR)/o_$(SRC_DIR)
|
||||||
|
@mkdir -p $(OUT_DIR)/o_$(CSTUFF_DIR)
|
||||||
|
@mkdir -p $(OUT_DIR)/o_$(SDK_DIR)/components
|
||||||
|
@mkdir -p $(OUT_DIR)/o_$(SDK_DIR)/mods
|
||||||
|
|
||||||
|
|
||||||
|
clean:
|
||||||
|
$(info cleaning: build files)
|
||||||
|
@rm -Rf $(OUT_DIR)
|
||||||
|
@rm -Rf ./vgcore.*
|
||||||
|
|
||||||
|
|
||||||
|
all: project
|
||||||
|
|
||||||
|
default: project
|
||||||
|
.PHONY: all dirs clean
|
||||||
|
|
||||||
|
# vim:ft=make
|
||||||
|
#
|
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit 4ba00ca17a6a86a9309fe8426220cc378d8f4579
|
|
@ -0,0 +1,3 @@
|
||||||
|
agent:
|
||||||
|
surgard-1 = surgard-serial:///dev/ttyUSB0/?speed=9600
|
||||||
|
osm-1 = osm://127.0.0.1/
|
|
@ -0,0 +1,77 @@
|
||||||
|
#
|
||||||
|
# config.mk
|
||||||
|
# Löwenware Makefile Config, 2019-03-02 17:35
|
||||||
|
#
|
||||||
|
|
||||||
|
PREFIX = /usr/
|
||||||
|
PKG_CONFIG = pkg-config
|
||||||
|
|
||||||
|
PROJECT_NAME = arcd
|
||||||
|
|
||||||
|
# Version
|
||||||
|
|
||||||
|
PROJECT_VERSION_MAJOR = 1
|
||||||
|
PROJECT_VERSION_MINOR = 0
|
||||||
|
PROJECT_VERSION_TWEAK = 0
|
||||||
|
PROJECT_VERSION_LABEL = 0
|
||||||
|
|
||||||
|
# Override default paths
|
||||||
|
#SRC_DIR = src
|
||||||
|
#SDK_DIR = sdk
|
||||||
|
#OUT_DIR = ./build
|
||||||
|
|
||||||
|
|
||||||
|
# Source files
|
||||||
|
|
||||||
|
PROJECT_SOURCES := \
|
||||||
|
$(SRC_DIR)/main.c \
|
||||||
|
$(SRC_DIR)/observer.c \
|
||||||
|
$(SRC_DIR)/agent.c \
|
||||||
|
\
|
||||||
|
$(CSTUFF_DIR)/log.c \
|
||||||
|
$(CSTUFF_DIR)/string.c \
|
||||||
|
$(CSTUFF_DIR)/list.c \
|
||||||
|
$(CSTUFF_DIR)/file.c \
|
||||||
|
\
|
||||||
|
$(SDK_DIR)/components/query.c \
|
||||||
|
$(SDK_DIR)/components/quick.c \
|
||||||
|
$(SDK_DIR)/components/validate.c \
|
||||||
|
$(SDK_DIR)/components/mail.c \
|
||||||
|
$(SDK_DIR)/components/log.c \
|
||||||
|
$(SDK_DIR)/components/todo.c \
|
||||||
|
\
|
||||||
|
$(SDK_DIR)/mods/context.c \
|
||||||
|
$(SDK_DIR)/mods/module.c \
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# includes
|
||||||
|
PROJECT_INCLUDES = \
|
||||||
|
-I./ \
|
||||||
|
-I./$(SDK_DIR) \
|
||||||
|
`$(PKG_CONFIG) --cflags libaisl` \
|
||||||
|
`$(PKG_CONFIG) --cflags libcurl` \
|
||||||
|
`$(PKG_CONFIG) --cflags uuid` \
|
||||||
|
|
||||||
|
# libraries
|
||||||
|
PROJECT_LIBRARIES = \
|
||||||
|
`$(PKG_CONFIG) --libs libaisl` \
|
||||||
|
`$(PKG_CONFIG) --libs libcurl` \
|
||||||
|
`$(PKG_CONFIG) --libs uuid` \
|
||||||
|
-lpthread \
|
||||||
|
|
||||||
|
# compilation macro options:
|
||||||
|
|
||||||
|
# flags
|
||||||
|
PROJECT_CFLAGS = -D_POSIX_C_SOURCE=200809L
|
||||||
|
PROJECT_CFLAGS += -D_ISOC99_SOURCE
|
||||||
|
PROJECT_CFLAGS += -D_XOPEN_SOURCE=500
|
||||||
|
PROJECT_CFLAGS += -D_GNU_SOURCE
|
||||||
|
# PROJECT_CFLAGS += -DDEBUG
|
||||||
|
|
||||||
|
|
||||||
|
# PROJECT_LDFLAGS = -L
|
||||||
|
|
||||||
|
|
||||||
|
# vim:ft=make
|
||||||
|
#
|
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit e00ffe6f708f1460ca1d2b00d94c739ebb2cb184
|
|
@ -0,0 +1,37 @@
|
||||||
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* Copyright (c) 2017-2019 by Löwenware Ltd
|
||||||
|
* Please, refer LICENSE file for legal information
|
||||||
|
*
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file agent.c
|
||||||
|
* @author Ilja Kartašov <ik@lowenware.com>
|
||||||
|
* @brief
|
||||||
|
*
|
||||||
|
* @see https://lowenware.com/
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "agent.h"
|
||||||
|
|
||||||
|
|
||||||
|
int
|
||||||
|
agent_init(void)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
agent_release(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int
|
||||||
|
agent_run_cycle(void)
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
|
@ -0,0 +1,31 @@
|
||||||
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* Copyright (c) 2017-2019 by Löwenware Ltd
|
||||||
|
* Please, refer LICENSE file for legal information
|
||||||
|
*
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file agent.h
|
||||||
|
* @author Ilja Kartašov <ik@lowenware.com>
|
||||||
|
* @brief
|
||||||
|
*
|
||||||
|
* @see https://lowenware.com/
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef AGENT_H_D0CDB429_AC49_4BC6_83FA_9163404D387E
|
||||||
|
#define AGENT_H_D0CDB429_AC49_4BC6_83FA_9163404D387E
|
||||||
|
|
||||||
|
|
||||||
|
int
|
||||||
|
agent_init(void);
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
agent_release(void);
|
||||||
|
|
||||||
|
|
||||||
|
int
|
||||||
|
agent_run_cycle(void);
|
||||||
|
|
||||||
|
#endif /* !AGENT_H */
|
|
@ -0,0 +1,58 @@
|
||||||
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* Copyright (c) 2017-2019 by Löwenware Ltd
|
||||||
|
* Please, refer LICENSE file for legal information
|
||||||
|
*
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file config.h
|
||||||
|
* @author Ilja Kartašov <ik@lowenware.com>
|
||||||
|
* @brief
|
||||||
|
*
|
||||||
|
* @see https://lowenware.com/
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef CONFIG_H_18E4DCB3_B446_424F_9E5E_06DC15FA40BA
|
||||||
|
#define CONFIG_H_18E4DCB3_B446_424F_9E5E_06DC15FA40BA
|
||||||
|
|
||||||
|
/** Default HTTP server port */
|
||||||
|
#ifndef CONFIG_HTTP_PORT
|
||||||
|
#define CONFIG_HTTP_PORT 8080
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef CONFIG_LOG_TARGET
|
||||||
|
#define CONFIG_LOG_TARGET "output.log"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef CONFIG_SMTP_SERVER
|
||||||
|
#define CONFIG_SMTP_SERVER "mx.lowenware.com"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef CONFIG_SMTP_PORT
|
||||||
|
#define CONFIG_SMTP_PORT 465
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef CONFIG_SMTP_USER
|
||||||
|
#define CONFIG_SMTP_USER "robot@lowenware.com"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef CONFIG_SMTP_PASS
|
||||||
|
#define CONFIG_SMTP_PASS "3HFzxiQYY9QJ6LN3" /* +){xA8}(mNF43B(~" */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef CONFIG_MAIL_FROM
|
||||||
|
#define CONFIG_MAIL_FROM CONFIG_SMTP_USER
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef CONFIG_MAIL_TO
|
||||||
|
#define CONFIG_MAIL_TO "ik@lowenware.com"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef CONFIG_MAIL_SUBJECT
|
||||||
|
#define CONFIG_MAIL_SUBJECT "Feedback from website"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* !CONFIG_H */
|
|
@ -0,0 +1,37 @@
|
||||||
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* Copyright (c) 2017-2019 by Löwenware Ltd
|
||||||
|
* Please, refer LICENSE file for legal information
|
||||||
|
*
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file end-points.h
|
||||||
|
* @author Ilja Kartašov <ik@lowenware.com>
|
||||||
|
* @brief Header-file only module with end-points URI macroses
|
||||||
|
*
|
||||||
|
* @see https://lowenware.com/
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef END_POINTS_H_406472C7_FC75_41D5_8988_AA12455597EC
|
||||||
|
#define END_POINTS_H_406472C7_FC75_41D5_8988_AA12455597EC
|
||||||
|
|
||||||
|
|
||||||
|
#define ROOT_URI "/"
|
||||||
|
#define HOOK_URI "/hook/"
|
||||||
|
#define BLOG_URI "/blog/"
|
||||||
|
#define TODO_URI "/todo/"
|
||||||
|
|
||||||
|
/* Pages */
|
||||||
|
|
||||||
|
/* Blog */
|
||||||
|
|
||||||
|
/* Static */
|
||||||
|
|
||||||
|
/* ToDo */
|
||||||
|
#define TODO_END_POINT TODO_URI
|
||||||
|
|
||||||
|
/* Hooks */
|
||||||
|
#define FEEDBACK_END_POINT HOOK_URI "feedback/"
|
||||||
|
|
||||||
|
#endif /* !END_POINTS_H */
|
|
@ -0,0 +1,33 @@
|
||||||
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* Copyright (c) 2017-2019 by Löwenware Ltd
|
||||||
|
* Please, refer LICENSE file for legal information
|
||||||
|
*
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file html.c
|
||||||
|
* @author Ilja Kartašov <ik@lowenware.com>
|
||||||
|
* @brief
|
||||||
|
*
|
||||||
|
* @see https://lowenware.com/
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "html.h"
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
|
||||||
|
HTML_HEADER = 0,
|
||||||
|
HTML_MENU = 20,
|
||||||
|
HTML_FOOTER = 100
|
||||||
|
|
||||||
|
} HtmlSequence;
|
||||||
|
|
||||||
|
|
||||||
|
const struct html html[] = {
|
||||||
|
{7, 0, 0, "<html>\n"}
|
||||||
|
, {7, 1, 0, "<head>\n"}
|
||||||
|
, {7, 2, 0, "<title>"},
|
||||||
|
, {9, 2, 0, "</title>\n"},
|
||||||
|
, {8, 1, 0, "</head>\n"},
|
||||||
|
};
|
|
@ -0,0 +1,26 @@
|
||||||
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* Copyright (c) 2017-2019 by Löwenware Ltd
|
||||||
|
* Please, refer LICENSE file for legal information
|
||||||
|
*
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file html.h
|
||||||
|
* @author Ilja Kartašov <ik@lowenware.com>
|
||||||
|
* @brief
|
||||||
|
*
|
||||||
|
* @see https://lowenware.com/
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef HTML_H_43FF7C60_6224_40DF_B3C6_6E4E18350871
|
||||||
|
#define HTML_H_43FF7C60_6224_40DF_B3C6_6E4E18350871
|
||||||
|
|
||||||
|
struct html {
|
||||||
|
uint32_t size;
|
||||||
|
uint16_t offset;
|
||||||
|
uint16_t reserve;
|
||||||
|
const char *data;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* !HTML_H */
|
|
@ -0,0 +1,26 @@
|
||||||
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* Copyright (c) 2017-2019 by Löwenware Ltd
|
||||||
|
* Please, refer LICENSE file for legal information
|
||||||
|
*
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file log.h
|
||||||
|
* @author Ilja Kartašov <ik@lowenware.com>
|
||||||
|
* @brief
|
||||||
|
*
|
||||||
|
* @see https://lowenware.com/
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef LOG_H_33B3B660_C0F7_455F_A17D_AB4FD0C0FD2C
|
||||||
|
#define LOG_H_33B3B660_C0F7_455F_A17D_AB4FD0C0FD2C
|
||||||
|
|
||||||
|
#include <components/log.h>
|
||||||
|
|
||||||
|
#define LOG_DEBUG(...) AX_LOG_DEBUG(__VA_ARGS__)
|
||||||
|
#define LOG_STATE(...) AX_LOG_STATE(__VA_ARGS__)
|
||||||
|
#define LOG_ALERT(...) AX_LOG_ALERT(__VA_ARGS__)
|
||||||
|
#define LOG_ERROR(...) AX_LOG_ERROR(__VA_ARGS__)
|
||||||
|
|
||||||
|
#endif /* !LOG_H */
|
|
@ -0,0 +1,142 @@
|
||||||
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* Copyright (c) 2017-2019 by Löwenware Ltd
|
||||||
|
* Please, refer LICENSE file for legal information
|
||||||
|
*
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file main.c
|
||||||
|
* @author Ilja Kartašov <ik@lowenware.com>
|
||||||
|
* @brief Lowenware.com backend main source code file
|
||||||
|
*
|
||||||
|
* @see https://lowenware.com/
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <locale.h>
|
||||||
|
|
||||||
|
/* Include library meta header */
|
||||||
|
#include <aisl/aisl.h>
|
||||||
|
#include "log.h"
|
||||||
|
#include "config.h"
|
||||||
|
#include "observer.h"
|
||||||
|
#include "agent.h"
|
||||||
|
|
||||||
|
|
||||||
|
static const struct aisl_cfg_srv m_srv[] = {{
|
||||||
|
.host = "0.0.0.0",
|
||||||
|
.port = CONFIG_HTTP_PORT,
|
||||||
|
.secure = false
|
||||||
|
}};
|
||||||
|
|
||||||
|
|
||||||
|
static const struct aisl_cfg m_cfg = {
|
||||||
|
AISL_CFG_DEFAULTS
|
||||||
|
, .srv = m_srv
|
||||||
|
, .srv_cnt = sizeof (m_srv) / sizeof (m_srv[0])
|
||||||
|
, .ssl = NULL
|
||||||
|
, .ssl_cnt = 0
|
||||||
|
, .callback = observer_on_aisl_event
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
static int
|
||||||
|
process_args(int argc, char **argv)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
char c = 0;
|
||||||
|
|
||||||
|
for (i = 1; i < argc; i++) {
|
||||||
|
switch (c) {
|
||||||
|
case 'd':
|
||||||
|
if (chdir(argv[i]) != 0) {
|
||||||
|
LOG_ERROR("Failed to set working directory `%s`: %s", argv[i],
|
||||||
|
strerror(errno));
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
if (strcmp(argv[i], "-d") == 0) {
|
||||||
|
c = 'd';
|
||||||
|
} else if (strcmp(argv[i], "-h") == 0) {
|
||||||
|
printf("arcd %d.%d.%d\n\n", VERSION_MAJOR, VERSION_MINOR, VERSION_TWEAK);
|
||||||
|
printf("USAGE: arcd [ARGUMENTS]\n");
|
||||||
|
printf("ARGUMENTS:\n");
|
||||||
|
printf("\t-h - show this information\n");
|
||||||
|
printf("\t-d :dir - set custom working directory\n");
|
||||||
|
printf("\n");
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
c = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (c) {
|
||||||
|
LOG_ERROR("No value for -%c argument", c);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int
|
||||||
|
main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
AislInstance aisl; /**< AISL instance pointer */
|
||||||
|
char cwd[64];
|
||||||
|
|
||||||
|
AX_LOG_INIT(CSTUFF_LOG_ALL);
|
||||||
|
|
||||||
|
if (!setlocale(LC_ALL, "C")) {
|
||||||
|
LOG_ERROR("Failed to set C locale");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (process_args(argc, argv)) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
LOG_STATE("working directory: `%s`", getcwd(cwd, sizeof(cwd)));
|
||||||
|
|
||||||
|
/* Initialize instance */
|
||||||
|
if ((aisl = aisl_new(&m_cfg)) != NULL) {
|
||||||
|
if (observer_init() == 0) {
|
||||||
|
if (agent_init() == 0) {
|
||||||
|
/* launch application loop */
|
||||||
|
fprintf(stdout, "Entering main loop");
|
||||||
|
for(;;) {
|
||||||
|
int rc, do_sleep = 1;
|
||||||
|
|
||||||
|
if ((rc = aisl_run_cycle(aisl)) == AISL_SUCCESS)
|
||||||
|
do_sleep = 0;
|
||||||
|
|
||||||
|
if ((rc = agent_run_cycle()) == 0)
|
||||||
|
do_sleep = 0;
|
||||||
|
|
||||||
|
if (!do_sleep)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
aisl_sleep(aisl, 500);
|
||||||
|
}
|
||||||
|
agent_release();
|
||||||
|
}
|
||||||
|
observer_release();
|
||||||
|
}
|
||||||
|
aisl_free(aisl);
|
||||||
|
} else {
|
||||||
|
fprintf(stderr, "Failed to initialize AISL");
|
||||||
|
}
|
||||||
|
|
||||||
|
AX_LOG_RELEASE();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,155 @@
|
||||||
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* Copyright (c) 2017-2019 by Löwenware Ltd
|
||||||
|
* Please, refer LICENSE file for legal information
|
||||||
|
*
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file observer.c
|
||||||
|
* @author Ilja Kartašov <ik@lowenware.com>
|
||||||
|
* @brief AISL event observer source code file
|
||||||
|
*
|
||||||
|
* @see https://lowenware.com/
|
||||||
|
*/
|
||||||
|
#include <string.h>
|
||||||
|
/* modules */
|
||||||
|
#include <mods/module.h>
|
||||||
|
/* commons */
|
||||||
|
#include "config.h"
|
||||||
|
#include "end-points.h"
|
||||||
|
#include "log.h"
|
||||||
|
#include "observer.h"
|
||||||
|
|
||||||
|
|
||||||
|
/* static struct ax_feedback m_feedback = {0}; */
|
||||||
|
|
||||||
|
AislStatus
|
||||||
|
observer_init(void)
|
||||||
|
{
|
||||||
|
AislStatus result = AISL_SUCCESS;
|
||||||
|
|
||||||
|
/* struct ax_feedback_cfg feedback_cfg; */
|
||||||
|
|
||||||
|
/*
|
||||||
|
memset(&feedback_cfg, 0, sizeof(struct ax_feedback_cfg));
|
||||||
|
feedback_cfg.end_point = FEEDBACK_END_POINT;
|
||||||
|
feedback_cfg.smtp.host = CONFIG_SMTP_SERVER;
|
||||||
|
feedback_cfg.smtp.user = CONFIG_SMTP_USER;
|
||||||
|
feedback_cfg.smtp.pass = CONFIG_SMTP_PASS;
|
||||||
|
feedback_cfg.smtp.port = CONFIG_SMTP_PORT;
|
||||||
|
feedback_cfg.mail_from = CONFIG_MAIL_FROM;
|
||||||
|
feedback_cfg.mail_to = CONFIG_MAIL_TO;
|
||||||
|
feedback_cfg.mail_subject = CONFIG_MAIL_SUBJECT;
|
||||||
|
feedback_cfg.name_email = "email";
|
||||||
|
feedback_cfg.name_msg = "msg";
|
||||||
|
|
||||||
|
if ((result = ax_feedback_init(&m_feedback, &feedback_cfg)) != 0)
|
||||||
|
return result;
|
||||||
|
*/
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
observer_release(void)
|
||||||
|
{
|
||||||
|
/* ax_feedback_release(&m_feedback); */
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void
|
||||||
|
observer_on_stream_event(const struct aisl_evt *evt)
|
||||||
|
{
|
||||||
|
AxModule mods[] = { /* AX_MODULE(&m_feedback) */ NULL };
|
||||||
|
|
||||||
|
int i, c = sizeof (mods) / sizeof (mods[0]);
|
||||||
|
|
||||||
|
for (i = 0; i < c; i++) {
|
||||||
|
|
||||||
|
/* TODO: remove !!!! */
|
||||||
|
if (!mods[i])
|
||||||
|
continue;
|
||||||
|
|
||||||
|
AislStatus status = ax_module_on_event(mods[i], evt);
|
||||||
|
|
||||||
|
switch(status) {
|
||||||
|
case AISL_IDLE:
|
||||||
|
continue;
|
||||||
|
|
||||||
|
case AISL_SUCCESS:
|
||||||
|
return;
|
||||||
|
|
||||||
|
default:
|
||||||
|
LOG_ALERT("Module error: %s", aisl_status_to_string(status));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void
|
||||||
|
observer_on_server_event(const struct aisl_evt *evt)
|
||||||
|
{
|
||||||
|
struct sockaddr_in srv_addr;
|
||||||
|
AislServer srv = (AislServer) evt->source;
|
||||||
|
AislStatus status = evt->status;
|
||||||
|
|
||||||
|
aisl_server_get_address(srv, &srv_addr);
|
||||||
|
|
||||||
|
LOG_STATE("HTTP%s server %s:%d: %s", (aisl_server_get_ssl(srv) ? "s" : ""),
|
||||||
|
inet_ntoa(srv_addr.sin_addr), ntohs(srv_addr.sin_port),
|
||||||
|
(status ? aisl_status_to_string(status) : "ready"));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void
|
||||||
|
observer_on_client_event(const struct aisl_evt *evt, const char *msg)
|
||||||
|
{
|
||||||
|
struct sockaddr_in cli_addr;
|
||||||
|
AislClient cli = (AislClient) evt->source;
|
||||||
|
|
||||||
|
aisl_client_get_address(cli, &cli_addr);
|
||||||
|
if (evt->status == AISL_IDLE)
|
||||||
|
msg = "timeout";
|
||||||
|
|
||||||
|
LOG_STATE( "HTTP%s client %s:%d: %s",
|
||||||
|
(aisl_client_is_secure(cli) ? "s" : ""),
|
||||||
|
inet_ntoa(cli_addr.sin_addr),
|
||||||
|
ntohs(cli_addr.sin_port),
|
||||||
|
msg
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
observer_on_aisl_event(const struct aisl_evt *evt, void *p_ctx)
|
||||||
|
{
|
||||||
|
switch(evt->code) {
|
||||||
|
case AISL_EVENT_SERVER_READY:
|
||||||
|
case AISL_EVENT_SERVER_ERROR:
|
||||||
|
observer_on_server_event(evt);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case AISL_EVENT_CLIENT_CONNECT:
|
||||||
|
observer_on_client_event(evt, "connected");
|
||||||
|
break;
|
||||||
|
|
||||||
|
|
||||||
|
case AISL_EVENT_CLIENT_DISCONNECT:
|
||||||
|
observer_on_client_event(evt, "disconnected");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case AISL_EVENT_STREAM_OPEN:
|
||||||
|
case AISL_EVENT_STREAM_HEADER:
|
||||||
|
case AISL_EVENT_STREAM_INPUT:
|
||||||
|
case AISL_EVENT_STREAM_REQUEST:
|
||||||
|
case AISL_EVENT_STREAM_OUTPUT:
|
||||||
|
case AISL_EVENT_STREAM_CLOSE:
|
||||||
|
case AISL_EVENT_STREAM_ERROR:
|
||||||
|
observer_on_stream_event(evt);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,34 @@
|
||||||
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* Copyright (c) 2017-2019 by Löwenware Ltd
|
||||||
|
* Please, refer LICENSE file for legal information
|
||||||
|
*
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file observer.h
|
||||||
|
* @author Ilja Kartašov <ik@lowenware.com>
|
||||||
|
* @brief AISL event observer header file
|
||||||
|
*
|
||||||
|
* @see https://lowenware.com/
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef OBSERVER_H_C0DE24F7_EC8D_4C89_B253_15F0BB5BF7B5
|
||||||
|
#define OBSERVER_H_C0DE24F7_EC8D_4C89_B253_15F0BB5BF7B5
|
||||||
|
|
||||||
|
#include <aisl/aisl.h>
|
||||||
|
|
||||||
|
|
||||||
|
AislStatus
|
||||||
|
observer_init(void);
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
observer_release(void);
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
observer_on_aisl_event(const struct aisl_evt *evt, void *p_ctx);
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* !OBSERVER_H */
|
|
@ -0,0 +1,12 @@
|
||||||
|
Port templight to SDK
|
||||||
|
Implement authentication UI
|
||||||
|
Implement authentication modules in SDK
|
||||||
|
Implement serial surgard receiver
|
||||||
|
Implement EBS OSM receiver
|
||||||
|
Define device file format
|
||||||
|
Implement device logs
|
||||||
|
Implement ARC journal
|
||||||
|
Implement device cards
|
||||||
|
Implement routes
|
||||||
|
x Create project repository
|
||||||
|
|
Loading…
Reference in New Issue