tio
tio.h
Go to the documentation of this file.
1 #ifndef __tio__
2 #define __tio__
3 
4 #ifdef __cplusplus
5 extern "C" {
6 #endif
7 
8 #include "kii.h"
9 #include "khc.h"
10 #include "jkii.h"
11 
18 extern const char TIO_TASK_NAME_UPDATE_STATE[];
19 
23 typedef kii_bool_t tio_bool_t;
24 
28 typedef kii_author_t tio_author_t;
29 
33 typedef enum tio_code_t {
47 } tio_code_t;
48 
54 typedef enum tio_data_type_t {
63 
67 typedef struct tio_action_value_t {
68  tio_data_type_t type;
77  union {
78  long long_value;
79  double double_value;
80  tio_bool_t bool_value;
81  const char *opaque_value;
82  } param;
89 
93 typedef struct tio_action_t {
98  const char* alias;
102  size_t alias_length;
107  const char* action_name;
116 } tio_action_t;
117 
121 typedef struct tio_action_err_t {
122  char err_message[64];
124 
128 typedef struct tio_action_result_data_t {
129  char json[128];
131 
138 typedef size_t (*TIO_CB_SIZE)(void* userdata);
139 
150 typedef size_t (*TIO_CB_READ)(char *buffer, size_t size, void *userdata);
151 
164 typedef tio_bool_t (*TIO_CB_ACTION)(tio_action_t* action, tio_action_err_t* err, tio_action_result_data_t* data, void* userdata);
175 typedef void (*TIO_CB_ERR)(tio_code_t code, const char* err_message, void* userdata);
193 typedef tio_bool_t (*TIO_CB_PUSH)(const char* message, size_t message_length, void* userdata);
194 
198 typedef struct tio_handler_t {
199  TIO_CB_ACTION _cb_action;
200  void* _cb_action_data;
201  TIO_CB_ERR _cb_err;
202  void* _cb_err_data;
203  TIO_CB_PUSH _cb_push;
204  void* _cb_push_data;
205  kii_t _kii;
206  size_t _keep_alive_interval;
207  KII_CB_TASK_CONTINUE _cb_task_continue;
208  void* _task_continue_data;
209  KII_CB_TASK_EXIT _cb_task_exit;
210  void* _task_exit_data;
211 } tio_handler_t;
212 
216 typedef struct {
217  kii_mqtt_error error;
218  kii_mqtt_task_state task_state;
220 
224 typedef struct tio_updater_t {
225  TIO_CB_SIZE _cb_state_size;
226  void* _cb_state_size_data;
227  TIO_CB_READ _state_reader;
228  void* _state_reader_data;
229  TIO_CB_ERR _cb_err;
230  void* _cb_err_data;
231  kii_t _kii;
232  size_t _update_interval;
233  KII_CB_TASK_CONTINUE _cb_task_continue;
234  void* _task_continue_data;
235  KII_CB_TASK_EXIT _cb_task_exit;
236  void* _task_exit_data;
237 } tio_updater_t;
238 
246 void tio_handler_init(tio_handler_t* handler);
247 
255 void tio_handler_set_cb_sock_connect_http(tio_handler_t* handler, KHC_CB_SOCK_CONNECT cb_connect, void* userdata);
263 void tio_handler_set_cb_sock_send_http(tio_handler_t* handler, KHC_CB_SOCK_SEND cb_send, void* userdata);
271 void tio_handler_set_cb_sock_recv_http(tio_handler_t* handler, KHC_CB_SOCK_RECV cb_recv, void* userdata);
279 void tio_handler_set_cb_sock_close_http(tio_handler_t* handler, KHC_CB_SOCK_CLOSE cb_close, void* userdata);
280 
298 void tio_handler_set_http_buff(tio_handler_t* handler, char* buff, size_t buff_size);
299 
322 void tio_handler_set_stream_buff(tio_handler_t* handler, char* buff, size_t buff_size);
323 
343 void tio_handler_set_resp_header_buff(tio_handler_t* handler, char* buff, size_t buff_size);
344 
356 void tio_handler_set_cb_sock_connect_mqtt(tio_handler_t* handler, KHC_CB_SOCK_CONNECT cb_connect, void* userdata);
368 void tio_handler_set_cb_sock_send_mqtt(tio_handler_t* handler, KHC_CB_SOCK_SEND cb_send, void* userdata);
380 void tio_handler_set_cb_sock_recv_mqtt(tio_handler_t* handler, KHC_CB_SOCK_RECV cb_recv, void* userdata);
392 void tio_handler_set_cb_sock_close_mqtt(tio_handler_t* handler, KHC_CB_SOCK_CLOSE cb_close, void* userdata);
404 void tio_handler_set_mqtt_to_sock_recv(tio_handler_t* handler, unsigned int to_sock_recv_sec);
416 void tio_handler_set_mqtt_to_sock_send(tio_handler_t* handler, unsigned int to_sock_send_sec);
424 void tio_handler_set_cb_task_create(tio_handler_t* handler, KII_CB_TASK_CREATE cb_task_create, void* userdata);
425 
447 void tio_handler_set_cb_task_continue(tio_handler_t* handler, KII_CB_TASK_CONTINUE cb_continue, void* userdata);
448 
483 void tio_handler_set_cb_task_exit(tio_handler_t* handler, KII_CB_TASK_EXIT cb_exit, void* userdata);
493 void tio_handler_set_cb_delay_ms(tio_handler_t* handler, KII_CB_DELAY_MS cb_delay_ms, void* userdata);
502 void tio_handler_set_cb_err(tio_handler_t* handler, TIO_CB_ERR cb_err, void* userdata);
512 void tio_handler_set_cb_push(tio_handler_t* handler, TIO_CB_PUSH cb_push, void* userdata);
513 
533 void tio_handler_set_mqtt_buff(tio_handler_t* handler, char* buff, size_t buff_size);
534 
545 void tio_handler_set_keep_alive_interval(tio_handler_t* handler, size_t keep_alive_interval_sec);
546 
554 void tio_handler_set_app(tio_handler_t* handler, const char* app_id, const char* host);
555 
565 void tio_handler_set_json_parser_resource(tio_handler_t* handler, jkii_resource_t* resource);
566 
578  tio_handler_t* handler,
579  JKII_CB_RESOURCE_ALLOC cb_alloc,
580  JKII_CB_RESOURCE_FREE cb_free);
581 
594  tio_handler_t* handler,
595  KHC_CB_SLIST_ALLOC cb_alloc,
596  KHC_CB_SLIST_FREE cb_free,
597  void* cb_alloc_data,
598  void* cb_free_data
599 );
600 
611  tio_handler_t* handler,
612  tio_bool_t enable_insecure_http
613 );
614 
625  tio_handler_t* handler,
626  tio_bool_t enable_insecure_mqtt
627 );
628 
648 tio_code_t tio_handler_onboard(
649  tio_handler_t* handler,
650  const char* vendor_thing_id,
651  const char* password,
652  const char* thing_type,
653  const char* firmware_version,
654  const char* layout_position,
655  const char* thing_properties
656 );
657 
668 const tio_author_t* tio_handler_get_author(
669  tio_handler_t* handler
670 );
671 
684 tio_code_t tio_handler_start(
685  tio_handler_t* handler,
686  const tio_author_t* author,
687  TIO_CB_ACTION cb_action,
688  void* userdata);
689 
713 tio_code_t tio_handler_handle_command(
714  tio_handler_t* handler,
715  const char* command,
716  size_t command_length,
717  TIO_CB_ACTION cb_action,
718  void* userdata);
719 
730 typedef void (*TIO_CB_PARSED_ACTION)(char* command_id, tio_action_t* action, void* userdata);
731 
748 tio_code_t tio_handler_parse_command(
749  tio_handler_t* handler,
750  const char* command,
751  size_t command_length,
752  TIO_CB_PARSED_ACTION cb_parsed_action,
753  void* userdata);
754 
762 void tio_updater_init(tio_updater_t* updater);
763 
771 void tio_updater_set_cb_sock_connect(tio_updater_t* updater, KHC_CB_SOCK_CONNECT cb_connect, void* userdata);
779 void tio_updater_set_cb_sock_send(tio_updater_t* updater, KHC_CB_SOCK_SEND cb_send, void* userdata);
787 void tio_updater_set_cb_sock_recv(tio_updater_t* updater, KHC_CB_SOCK_RECV cb_recv, void* userdata);
795 void tio_updater_set_cb_sock_close(tio_updater_t* updater, KHC_CB_SOCK_CLOSE cb_close, void* userdata);
803 void tio_updater_set_cb_task_create(tio_updater_t* updater, KII_CB_TASK_CREATE cb_task_create, void* userdata);
804 
823 void tio_updater_set_cb_task_continue(tio_updater_t* updater, KII_CB_TASK_CONTINUE cb_continue, void* userdata);
824 
853 void tio_updater_set_cb_task_exit(tio_updater_t* updater, KII_CB_TASK_EXIT cb_exit, void* userdata);
863 void tio_updater_set_cb_delay_ms(tio_updater_t* updater, KII_CB_DELAY_MS cb_delay_ms, void* userdata);
872 void tio_updater_set_cb_error(tio_updater_t* updater, TIO_CB_ERR cb_err, void* userdata);
873 
892 void tio_updater_set_buff(tio_updater_t* updater, char* buff, size_t buff_size);
893 
916 void tio_updater_set_stream_buff(tio_updater_t* updater, char* buff, size_t buff_size);
917 
937 void tio_updater_set_resp_header_buff(tio_updater_t* updater, char* buff, size_t buff_size);
945 void tio_updater_set_app(tio_updater_t* updater, const char* app_id, const char* host);
952 void tio_updater_set_interval(tio_updater_t* updater, size_t update_interval_sec);
953 
954 void tio_updater_set_json_parser_resource(tio_updater_t* updater, jkii_resource_t* resource);
955 
957  tio_updater_t* updater,
958  JKII_CB_RESOURCE_ALLOC cb_alloc,
959  JKII_CB_RESOURCE_FREE cb_free);
960 
973  tio_updater_t* updater,
974  KHC_CB_SLIST_ALLOC cb_alloc,
975  KHC_CB_SLIST_FREE cb_free,
976  void* cb_alloc_data,
977  void* cb_free_data
978 );
979 
990  tio_updater_t* updater,
991  tio_bool_t enable_insecure_http
992 );
993 
1013 tio_code_t tio_updater_onboard(
1014  tio_updater_t* updater,
1015  const char* vendor_thing_id,
1016  const char* password,
1017  const char* thing_type,
1018  const char* firmware_version,
1019  const char* layout_position,
1020  const char* thing_properties
1021 );
1022 
1033 const tio_author_t* tio_updater_get_author(
1034  tio_updater_t* updater
1035 );
1036 
1052 tio_code_t tio_updater_start(
1053  tio_updater_t* updater,
1054  const tio_author_t* author,
1055  TIO_CB_SIZE cb_state_size,
1056  void* state_size_data,
1057  TIO_CB_READ cb_read_state,
1058  void* read_state_data);
1059 
1060 #ifdef __cplusplus
1061 }
1062 #endif
1063 
1064 #endif
void tio_handler_set_stream_buff(tio_handler_t *handler, char *buff, size_t buff_size)
Set stream buffer. Stream buffer is used store part of HTTP body when reading/ writing it from the ne...
size_t opaque_value_length
Indicate length of opaque_value in case type is TIO_TYPE_STRING, TIO_TYPE_OBJECT or TIO_TYPE_ARRAY...
Definition: tio.h:87
tio_code_t tio_updater_onboard(tio_updater_t *updater, const char *vendor_thing_id, const char *password, const char *thing_type, const char *firmware_version, const char *layout_position, const char *thing_properties)
Execute onboarding.
const char * opaque_value
Definition: tio.h:81
Represents action result data.
Definition: tio.h:128
Data is larger than expected.
Definition: tio.h:42
void tio_updater_set_cb_task_exit(tio_updater_t *updater, KII_CB_TASK_EXIT cb_exit, void *userdata)
Callback called right before exit of tio_updater task.
void tio_handler_enable_insecure_mqtt(tio_handler_t *handler, tio_bool_t enable_insecure_mqtt)
Enable insecure MQTT connection.
struct tio_action_err_t tio_action_err_t
Represents error.
size_t alias_length
Length of the alias name.
Definition: tio.h:102
Error in write callback.
Definition: tio.h:39
Represents action.
Definition: tio.h:93
tio_action_value_t action_value
Value of the action.
Definition: tio.h:115
void tio_handler_set_json_parser_resource(tio_handler_t *handler, jkii_resource_t *resource)
Set JSON parser resource.
struct tio_action_value_t tio_action_value_t
Represents value of the action.
Stores data/ callbacks used by tio_updater.
Definition: tio.h:224
double double_value
Definition: tio.h:79
tio_code_t tio_updater_start(tio_updater_t *updater, const tio_author_t *author, TIO_CB_SIZE cb_state_size, void *state_size_data, TIO_CB_READ cb_read_state, void *read_state_data)
Start tio_updater task.
Socket error in connection.
Definition: tio.h:35
struct tio_action_t tio_action_t
Represents action.
kii_mqtt_task_state task_state
Definition: tio.h:218
kii_bool_t tio_bool_t
Boolean type.
Definition: tio.h:23
Represents error.
Definition: tio.h:121
void tio_handler_set_keep_alive_interval(tio_handler_t *handler, size_t keep_alive_interval_sec)
Set MQTT Keep-Alive interval.
long long_value
Definition: tio.h:78
void tio_handler_set_cb_task_continue(tio_handler_t *handler, KII_CB_TASK_CONTINUE cb_continue, void *userdata)
Set callback determines whether to continue or discontinue task.
void tio_updater_set_cb_delay_ms(tio_updater_t *updater, KII_CB_DELAY_MS cb_delay_ms, void *userdata)
Callback asks to delay/ sleep task execution.
tio_code_t tio_handler_start(tio_handler_t *handler, const tio_author_t *author, TIO_CB_ACTION cb_action, void *userdata)
Start tio_handler task.
void tio_handler_set_cb_sock_recv_http(tio_handler_t *handler, KHC_CB_SOCK_RECV cb_recv, void *userdata)
Set socket recv callback used for HTTP(S)
Socket error in sending data.
Definition: tio.h:36
void tio_handler_set_cb_slist_resource(tio_handler_t *handler, KHC_CB_SLIST_ALLOC cb_alloc, KHC_CB_SLIST_FREE cb_free, void *cb_alloc_data, void *cb_free_data)
Set custom memory allocator for the linked list used to constuct request headers of HTTP...
struct tio_updater_t tio_updater_t
Stores data/ callbacks used by tio_updater.
tio_bool_t bool_value
Definition: tio.h:80
Boolean type.
Definition: tio.h:56
Error in parsing JSON.
Definition: tio.h:44
void tio_updater_set_cb_sock_send(tio_updater_t *updater, KHC_CB_SOCK_SEND cb_send, void *userdata)
Set socket send callback used for HTTP(S)
const tio_author_t * tio_handler_get_author(tio_handler_t *handler)
Get author.
const char * action_name
Name of the action. You need to use action_name_length field to determine the length. It might not be null terminated.
Definition: tio.h:107
void tio_updater_set_stream_buff(tio_updater_t *updater, char *buff, size_t buff_size)
Set stream buffer. Stream buffer is used store part of HTTP body when reading/ writing it from the ne...
tio_code_t tio_handler_parse_command(tio_handler_t *handler, const char *command, size_t command_length, TIO_CB_PARSED_ACTION cb_parsed_action, void *userdata)
Parse the received command.
size_t(* TIO_CB_READ)(char *buffer, size_t size, void *userdata)
Callback reads state.
Definition: tio.h:150
void tio_updater_set_json_parser_resource(tio_updater_t *updater, jkii_resource_t *resource)
tio_data_type_t type
Data type of the value.
Definition: tio.h:68
const tio_author_t * tio_updater_get_author(tio_updater_t *updater)
Get author.
void tio_updater_enable_insecure_http(tio_updater_t *updater, tio_bool_t enable_insecure_http)
Enable insecure HTTP connection.
void tio_handler_set_http_buff(tio_handler_t *handler, char *buff, size_t buff_size)
Set buffer used to construct/ parse HTTP request/ response.
void tio_updater_set_cb_task_create(tio_updater_t *updater, KII_CB_TASK_CREATE cb_task_create, void *userdata)
Set callback creates task.
void tio_updater_set_cb_error(tio_updater_t *updater, TIO_CB_ERR cb_err, void *userdata)
Set callback propagates error. You can use it for debugging, etc or you can skip calling this API...
void tio_handler_set_resp_header_buff(tio_handler_t *handler, char *buff, size_t buff_size)
Set response header buffer.
void tio_handler_set_cb_sock_close_mqtt(tio_handler_t *handler, KHC_CB_SOCK_CLOSE cb_close, void *userdata)
Set socket close callback used for MQTT(S)
tio_bool_t(* TIO_CB_PUSH)(const char *message, size_t message_length, void *userdata)
Callback handles custom push notification.
Definition: tio.h:193
void tio_handler_set_cb_task_exit(tio_handler_t *handler, KII_CB_TASK_EXIT cb_exit, void *userdata)
Callback called right before exit of tio_handler task.
void tio_handler_set_cb_task_create(tio_handler_t *handler, KII_CB_TASK_CREATE cb_task_create, void *userdata)
Set callback creates task.
Socket error in closing.
Definition: tio.h:38
tio_bool_t(* TIO_CB_ACTION)(tio_action_t *action, tio_action_err_t *err, tio_action_result_data_t *data, void *userdata)
Callback handles action.
Definition: tio.h:164
void tio_updater_init(tio_updater_t *updater)
tio_updater_t initializer.
const char * alias
Name of the alias. You need to use alias_length field to determine the length. It might not be null t...
Definition: tio.h:98
Indicates handler state.
Definition: tio.h:216
String type.
Definition: tio.h:59
Stores data/ callbacks used by tio_handler.
Definition: tio.h:198
void tio_handler_set_cb_sock_connect_mqtt(tio_handler_t *handler, KHC_CB_SOCK_CONNECT cb_connect, void *userdata)
Set socket connect callback used for MQTT(S)
NULL type.
Definition: tio.h:55
void tio_handler_set_cb_sock_recv_mqtt(tio_handler_t *handler, KHC_CB_SOCK_RECV cb_recv, void *userdata)
Set socket recv callback used for MQTT(S)
kii_mqtt_error error
Definition: tio.h:217
Succeeded.
Definition: tio.h:34
void(* TIO_CB_ERR)(tio_code_t code, const char *err_message, void *userdata)
Callback propagates error information.
Definition: tio.h:175
void tio_handler_set_cb_json_parser_resource(tio_handler_t *handler, JKII_CB_RESOURCE_ALLOC cb_alloc, JKII_CB_RESOURCE_FREE cb_free)
JSON parser resource callbacks.
Integer type.
Definition: tio.h:57
void tio_updater_set_cb_json_parser_resource(tio_updater_t *updater, JKII_CB_RESOURCE_ALLOC cb_alloc, JKII_CB_RESOURCE_FREE cb_free)
void tio_updater_set_buff(tio_updater_t *updater, char *buff, size_t buff_size)
Set buffer used to construct/ parse HTTP request/ response.
Socket error in receiving data.
Definition: tio.h:37
void tio_handler_set_cb_sock_send_mqtt(tio_handler_t *handler, KHC_CB_SOCK_SEND cb_send, void *userdata)
Set socket send callback used for MQTT(S)
kii_author_t tio_author_t
Author of API.
Definition: tio.h:28
size_t(* TIO_CB_SIZE)(void *userdata)
Callback asks for size of the state to be uploaded.
Definition: tio.h:138
void tio_handler_set_mqtt_buff(tio_handler_t *handler, char *buff, size_t buff_size)
Set buffer used to parse MQTT message.
Error in creating task.
Definition: tio.h:45
const char TIO_TASK_NAME_UPDATE_STATE[]
tio_updater Task name.
void tio_updater_set_app(tio_updater_t *updater, const char *app_id, const char *host)
Set app identifier and host.
void tio_handler_set_cb_push(tio_handler_t *handler, TIO_CB_PUSH cb_push, void *userdata)
Set callback handles custom push message.
void tio_handler_set_mqtt_to_sock_recv(tio_handler_t *handler, unsigned int to_sock_recv_sec)
Set timeout of receiving data from socket user for MQTT(S)
Array type.
Definition: tio.h:61
void tio_handler_set_cb_sock_send_http(tio_handler_t *handler, KHC_CB_SOCK_SEND cb_send, void *userdata)
Set socket send callback used for HTTP(S)
Represents value of the action.
Definition: tio.h:67
void tio_updater_set_resp_header_buff(tio_updater_t *updater, char *buff, size_t buff_size)
Set response header buffer.
tio_code_t
Error Codes used in tio.
Definition: tio.h:33
void tio_handler_set_mqtt_to_sock_send(tio_handler_t *handler, unsigned int to_sock_send_sec)
Set timeout of sending data from socket user for MQTT(S)
struct tio_handler_t tio_handler_t
Stores data/ callbacks used by tio_handler.
void(* TIO_CB_PARSED_ACTION)(char *command_id, tio_action_t *action, void *userdata)
Callback handles parsed action.
Definition: tio.h:730
void tio_updater_set_cb_task_continue(tio_updater_t *updater, KII_CB_TASK_CONTINUE cb_continue, void *userdata)
Set callback determines whether to continue or discontinue task.
tio_data_type_t
Data types.
Definition: tio.h:54
Error in header callback.
Definition: tio.h:40
void tio_handler_set_cb_err(tio_handler_t *handler, TIO_CB_ERR cb_err, void *userdata)
Set callback propagates error. You can use it for debugging, etc or you can skip calling this API...
tio_code_t tio_handler_handle_command(tio_handler_t *handler, const char *command, size_t command_length, TIO_CB_ACTION cb_action, void *userdata)
Handle the command.
void tio_handler_set_cb_sock_connect_http(tio_handler_t *handler, KHC_CB_SOCK_CONNECT cb_connect, void *userdata)
Set socket connect callback used for HTTP(S)
void tio_handler_set_app(tio_handler_t *handler, const char *app_id, const char *host)
Set app identifier and host.
void tio_updater_set_cb_sock_recv(tio_updater_t *updater, KHC_CB_SOCK_RECV cb_recv, void *userdata)
Set socket recv callback used for HTTP(S)
tio_code_t tio_handler_onboard(tio_handler_t *handler, const char *vendor_thing_id, const char *password, const char *thing_type, const char *firmware_version, const char *layout_position, const char *thing_properties)
Execute onboarding.
Double type.
Definition: tio.h:58
void tio_handler_set_cb_delay_ms(tio_handler_t *handler, KII_CB_DELAY_MS cb_delay_ms, void *userdata)
Callback asks to delay/ sleep task execution.
void tio_handler_init(tio_handler_t *handler)
tio_handler_t initializer.
void tio_updater_set_cb_sock_connect(tio_updater_t *updater, KHC_CB_SOCK_CONNECT cb_connect, void *userdata)
Set socket connect callback used for HTTP(S)
Object type.
Definition: tio.h:60
REST API returns error status code.
Definition: tio.h:43
void tio_updater_set_cb_sock_close(tio_updater_t *updater, KHC_CB_SOCK_CLOSE cb_close, void *userdata)
Set socket close callback used for HTTP(S)
struct tio_action_result_data_t tio_action_result_data_t
Represents action result data.
Other errors.
Definition: tio.h:46
union tio_action_value_t::@0 param
Union stores value.
void tio_updater_set_cb_slist_resource(tio_updater_t *updater, KHC_CB_SLIST_ALLOC cb_alloc, KHC_CB_SLIST_FREE cb_free, void *cb_alloc_data, void *cb_free_data)
Set custom memory allocator for the linked list used to constuct request headers of HTTP...
Error in memory allocation.
Definition: tio.h:41
size_t action_name_length
Length of the action name.
Definition: tio.h:111
void tio_handler_set_cb_sock_close_http(tio_handler_t *handler, KHC_CB_SOCK_CLOSE cb_close, void *userdata)
Set socket close callback used for HTTP(S)
void tio_updater_set_interval(tio_updater_t *updater, size_t update_interval_sec)
Set interval of updating state.
void tio_handler_enable_insecure_http(tio_handler_t *handler, tio_bool_t enable_insecure_http)
Enable insecure HTTP connection.