TuyaOS
svc_rpc.h
浏览该文件的文档.
1
10#ifndef __SVC_RPC_H__
11#define __SVC_RPC_H__
12
13#include <stdint.h>
14#include "tuya_cloud_com_defs.h"
15
16#include "tuya_slist.h"
17#include "rpc_base.h"
18#include "json_rpc.h"
19#include "tal_thread.h"
20
21#ifdef __cplusplus
22extern "C" {
23#endif
24
25#define OPRT_RPC_CALL_TIMEOUT -10
26#define OPRT_RPC_CALL_NOT_FOUND -11
27#define OPRT_RPC_CALL_ERROR -11
28#define TUYA_RPC_DEFAULT_BUFSZ 256
29#define TUYA_RPC_ID_LEN (GW_ID_LEN)
30#define TUYA_RPC_KEY_LEN (LOCAL_KEY_LEN)
31
32typedef enum {
33 TUYA_RPC_ENCRYPT,
34 TUYA_RPC_DECRYPT,
35 TUYA_RPC_FREECRYPT,
36} tuya_rpc_crypt_mode_t;
37
38typedef enum {
39 RPC_BUFSIZE_SET_CMD,
40} tuya_rpc_cmd_t;
41
42typedef int (*rpc_crypt_cb)(uint8_t **data, uint32_t *len, uint8_t key[16], tuya_rpc_crypt_mode_t mode);
43
44typedef struct {
45 rpc_base_t base;
46 int fd;
47 uint32_t flag;
48 MUTEX_HANDLE mutex;
49 MUTEX_HANDLE node_mutex;
50 THREAD_HANDLE thread;
51 SLIST_HEAD node_list;
52 SLIST_HEAD declare_list;
53 SLIST_HEAD publish_list;
54 SLIST_HEAD subscribe_list;
55 rpc_crypt_cb crypt_cb;
56 char id [TUYA_RPC_ID_LEN + 1];
57 uint8_t key[16];
58 uint16_t buffer_size;
59 uint8_t *buffer;
60 uint8_t default_buffer[TUYA_RPC_DEFAULT_BUFSZ];
61 void *pipe_recv_cb;
62 void *pipe_args;
64
73typedef void (*rpc_method_cb)(jrpc_msg_t *request, void *arg, jrpc_msg_t *reply);
74
82typedef void (*rpc_subscribe_cb)(jrpc_msg_t *request, void *arg);
83
91typedef void (*rpc_async_cb)(jrpc_msg_t *result, void *arg);
92
104int tuya_rpc_init(tuya_rpc_t *rpc, char *id, char *addr);
105
117int tuya_rpc_control(tuya_rpc_t *rpc, uint8_t cmd, void *arg);
118
130int tuya_rpc_run(tuya_rpc_t *rpc, uint32_t stack_size, uint32_t prio);
131
146int tuya_rpc_call_async(tuya_rpc_t *rpc, char *id, jrpc_msg_t *requset, rpc_async_cb cb, void *arg, uint32_t sec);
147
161int tuya_rpc_call_sync(tuya_rpc_t *rpc, char *id, jrpc_msg_t *requset, jrpc_msg_t *reply, uint32_t sec);
162
174int tuya_rpc_call_notify(tuya_rpc_t *rpc, char *id, jrpc_msg_t *requset);
175
188int tuya_rpc_declare(tuya_rpc_t *rpc, char *name, rpc_method_cb cb, void *arg);
189
200int tuya_rpc_undeclare(tuya_rpc_t *rpc, char *name);
201
213int tuya_rpc_publish(tuya_rpc_t *rpc, char *name, jrpc_msg_t *msg);
214
228int tuya_rpc_subscribe(tuya_rpc_t *rpc, char *id, char *name, rpc_subscribe_cb cb, void *arg);
229
241int tuya_rpc_unsubscribe(tuya_rpc_t *rpc, char *id, char *name);
242
254int tuya_rpc_set_crypt(tuya_rpc_t *rpc, rpc_crypt_cb crypt_cb, uint8_t key[TUYA_RPC_KEY_LEN]);
255
266int tuya_rpc_set_crypt_key(tuya_rpc_t *rpc, uint8_t key[TUYA_RPC_KEY_LEN]);
267
278int tuya_rpc_set_crypt_cb(tuya_rpc_t *rpc, rpc_crypt_cb crypt_cb);
279
280
281#ifdef __cplusplus
282}
283#endif
284
285#endif
Common process - base rpc
Definition: json_rpc.h:42
Definition: rpc_base.h:82
Definition: svc_rpc.h:44
int tuya_rpc_set_crypt_cb(tuya_rpc_t *rpc, rpc_crypt_cb crypt_cb)
set encryption callback
void(* rpc_subscribe_cb)(jrpc_msg_t *request, void *arg)
rpc subscribe callback
Definition: svc_rpc.h:82
int tuya_rpc_declare(tuya_rpc_t *rpc, char *name, rpc_method_cb cb, void *arg)
declare one rpc according name
void(* rpc_method_cb)(jrpc_msg_t *request, void *arg, jrpc_msg_t *reply)
rpc method callback
Definition: svc_rpc.h:73
int tuya_rpc_set_crypt_key(tuya_rpc_t *rpc, uint8_t key[(LOCAL_KEY_LEN)])
set encryption key
void(* rpc_async_cb)(jrpc_msg_t *result, void *arg)
rpc async callback
Definition: svc_rpc.h:91
int tuya_rpc_call_sync(tuya_rpc_t *rpc, char *id, jrpc_msg_t *requset, jrpc_msg_t *reply, uint32_t sec)
rpc synchronous call
int tuya_rpc_call_notify(tuya_rpc_t *rpc, char *id, jrpc_msg_t *requset)
rpc call notify
int tuya_rpc_unsubscribe(tuya_rpc_t *rpc, char *id, char *name)
unsubscribe one rpc
int tuya_rpc_run(tuya_rpc_t *rpc, uint32_t stack_size, uint32_t prio)
create rpc task
int tuya_rpc_subscribe(tuya_rpc_t *rpc, char *id, char *name, rpc_subscribe_cb cb, void *arg)
subscribe one rpc
int tuya_rpc_init(tuya_rpc_t *rpc, char *id, char *addr)
rpc function init
int tuya_rpc_publish(tuya_rpc_t *rpc, char *name, jrpc_msg_t *msg)
publish one rpc
int tuya_rpc_control(tuya_rpc_t *rpc, uint8_t cmd, void *arg)
rpc control
int tuya_rpc_undeclare(tuya_rpc_t *rpc, char *name)
undeclare one rpc according name
int tuya_rpc_set_crypt(tuya_rpc_t *rpc, rpc_crypt_cb crypt_cb, uint8_t key[(LOCAL_KEY_LEN)])
set encryption key and callback
int tuya_rpc_call_async(tuya_rpc_t *rpc, char *id, jrpc_msg_t *requset, rpc_async_cb cb, void *arg, uint32_t sec)
rpc asynchronous call