blob: 4fbccbe39d2d80ab2e5403aab22283e154e28969 [file] [log] [blame]
Claudio Takahasi6b7aad52016-08-08 22:32:08 -03001/*
2 * Copyright (c) 2016, CESAR.
3 * All rights reserved.
4 *
5 * This software may be modified and distributed under the terms
6 * of the BSD license. See the LICENSE file for details.
7 *
8 */
9
Tiago Barros9ca6b3d2016-09-05 14:27:05 -030010#ifndef __KNOT_THING_MAIN_H__
11#define __KNOT_THING_MAIN_H__
Claudio Takahasi6b7aad52016-08-08 22:32:08 -030012
Tiago Barros9ca6b3d2016-09-05 14:27:05 -030013#ifdef __cplusplus
14extern "C" {
15#endif
Claudio Takahasi6b7aad52016-08-08 22:32:08 -030016
Rodrigo Alves925ba532016-11-03 10:54:05 -030017#include "knot_thing_protocol.h"
Claudio Takahasi6b7aad52016-08-08 22:32:08 -030018
Tiago Barros9ca6b3d2016-09-05 14:27:05 -030019typedef int (*intDataFunction) (int32_t *val, int32_t *multiplier);
20typedef int (*floatDataFunction) (int32_t *val_int, uint32_t *val_dec, int32_t *multiplier);
21typedef int (*boolDataFunction) (uint8_t *val);
22typedef int (*rawDataFunction) (uint8_t *val, uint8_t *len);
Claudio Takahasi6b7aad52016-08-08 22:32:08 -030023
Tiago Barros9ca6b3d2016-09-05 14:27:05 -030024typedef struct __attribute__ ((packed)) {
25 intDataFunction read;
26 intDataFunction write;
27} knot_int_functions;
Claudio Takahasi6b7aad52016-08-08 22:32:08 -030028
Tiago Barros9ca6b3d2016-09-05 14:27:05 -030029typedef struct __attribute__ ((packed)) {
30 floatDataFunction read;
31 floatDataFunction write;
32} knot_float_functions;
Claudio Takahasi6b7aad52016-08-08 22:32:08 -030033
Tiago Barros9ca6b3d2016-09-05 14:27:05 -030034typedef struct __attribute__ ((packed)) {
35 boolDataFunction read;
36 boolDataFunction write;
37} knot_bool_functions;
Claudio Takahasi6b7aad52016-08-08 22:32:08 -030038
Tiago Barros9ca6b3d2016-09-05 14:27:05 -030039typedef struct __attribute__ ((packed)) {
40 rawDataFunction read;
41 rawDataFunction write;
42} knot_raw_functions;
Claudio Takahasi6b7aad52016-08-08 22:32:08 -030043
Tiago Barros9ca6b3d2016-09-05 14:27:05 -030044typedef union __attribute__ ((packed)) {
45 knot_int_functions int_f;
46 knot_float_functions float_f;
47 knot_bool_functions bool_f;
48 knot_raw_functions raw_f;
49} knot_data_functions;
Claudio Takahasi6b7aad52016-08-08 22:32:08 -030050
Tiago Barros9ca6b3d2016-09-05 14:27:05 -030051/* KNOT Thing main initialization functions and polling */
Rodrigo Alves4d633dc2016-11-09 11:03:04 -030052int8_t knot_thing_init(const char *thing_name);
Tiago Barros9ca6b3d2016-09-05 14:27:05 -030053void knot_thing_exit(void);
54int8_t knot_thing_run(void);
Claudio Takahasifa33d712016-08-10 10:09:39 -030055
Claudio Takahasi05c71902016-08-10 09:41:51 -030056/*
Rodrigo Alvesc2653c42016-11-21 16:12:42 -030057 * Data item (source/sink) registration functions
Claudio Takahasi05c71902016-08-10 09:41:51 -030058 */
Tiago Barros9ca6b3d2016-09-05 14:27:05 -030059int8_t knot_thing_register_raw_data_item(uint8_t sensor_id, const char *name,
60 uint8_t *raw_buffer, uint8_t raw_buffer_len, uint16_t type_id,
61 uint8_t value_type, uint8_t unit, knot_data_functions *func);
Claudio Takahasi05c71902016-08-10 09:41:51 -030062
Tiago Barros9ca6b3d2016-09-05 14:27:05 -030063int8_t knot_thing_register_data_item(uint8_t sensor_id, const char *name, uint16_t type_id,
64 uint8_t value_type, uint8_t unit, knot_data_functions *func);
65
Tiago Barrosc468b9e2017-07-07 10:29:02 -030066int knot_thing_create_schema(uint8_t id, knot_msg_schema *msg);
67int knot_thing_data_item_read(uint8_t id, knot_msg_data *data);
68int knot_thing_data_item_write(uint8_t id, knot_msg_data *data);
69int knot_thing_verify_events(knot_msg_data *data);
70int knot_thing_config_data_item(uint8_t id, uint8_t evflags, uint16_t time_sec,
71 knot_value_types *lower,
72 knot_value_types *upper);
73
Tiago Barros9ca6b3d2016-09-05 14:27:05 -030074#ifdef __cplusplus
75}
76#endif
77
78#endif /* __KNOT_THING_MAIN_H__ */