TuyaOS
tuya_cloud_types.h
1/*
2tuya_cloud_types.h
3Copyright(C),2018-2020, 涂鸦科技 www.tuya.comm
4*/
5
6#ifndef TUYA_CLOUD_TYPES_H
7#define TUYA_CLOUD_TYPES_H
8
9#include "tuya_iot_config.h"
10#include <stdarg.h>
11
12#if OPERATING_SYSTEM == SYSTEM_LINUX
13#include <ctype.h>
14#endif
15
16#include <stddef.h>
17#include <stdint.h>
18#include <stdbool.h>
19#include <string.h>
20#include "tuya_error_code.h"
21
22
23#ifdef __cplusplus
24extern "C" {
25#endif
26
27typedef int OPERATE_RET;
28typedef long long DLONG_T;
29typedef DLONG_T *PDLONG_T;
30typedef float FLOAT_T;
31typedef FLOAT_T *PFLOAT_T;
32typedef signed int INT_T;
33typedef int *PINT_T;
34typedef void *PVOID_T;
35typedef char CHAR_T;
36typedef char *PCHAR_T;
37typedef signed char SCHAR_T;
38typedef unsigned char UCHAR_T;
39typedef short SHORT_T;
40typedef unsigned short USHORT_T;
41typedef short *PSHORT_T;
42typedef long LONG_T;
43typedef unsigned long ULONG_T;
44typedef long *PLONG_T;
45typedef unsigned char BYTE_T;
46typedef BYTE_T *PBYTE_T;
47typedef unsigned int UINT_T;
48typedef unsigned int *PUINT_T;
49typedef int BOOL_T;
50typedef BOOL_T *PBOOL_T;
51typedef long long int INT64_T;
52typedef INT64_T *PINT64_T;
53typedef unsigned long long int UINT64_T;
54typedef UINT64_T *PUINT64_T;
55typedef unsigned int UINT32_T;
56typedef unsigned int *PUINT32_T;
57typedef int INT32_T;
58typedef int *PINT32_T;
59typedef short INT16_T;
60typedef INT16_T *PINT16_T;
61typedef unsigned short UINT16_T;
62typedef UINT16_T *PUINT16_T;
63typedef signed char INT8_T;
64typedef INT8_T *PINT8_T;
65typedef unsigned char UINT8_T;
66typedef UINT8_T *PUINT8_T;
67typedef ULONG_T TIME_MS;
68typedef ULONG_T TIME_S;
69typedef unsigned int TIME_T;
70typedef double DOUBLE_T;
71typedef unsigned short WORD_T;
72typedef WORD_T *PWORD_T;
73typedef unsigned int DWORD_T;
74typedef DWORD_T *PDWORD_T;
75
76#ifndef FALSE
77#define FALSE 0
78#endif
79
80#ifndef TRUE
81#define TRUE 1
82#endif
83
84#ifndef IN
85#define IN
86#endif
87
88#ifndef OUT
89#define OUT
90#endif
91
92#ifndef INOUT
93#define INOUT
94#endif
95
96#ifndef VOID
97#define VOID void
98#endif
99
100#ifndef VOID_T
101#define VOID_T void
102#endif
103
104
105#ifndef CONST
106#define CONST const
107#endif
108
109#ifndef STATIC
110#define STATIC static
111#endif
112
113#ifndef SIZEOF
114#define SIZEOF sizeof
115#endif
116
117#ifndef INLINE
118#define INLINE inline
119#endif
120
121#ifndef NULL
122#ifdef __cplusplus
123#define NULL 0
124#else
125#define NULL ((void *)0)
126#endif
127#endif
128
129#ifndef bool_t
130typedef int bool_t;
131#endif
132
133#ifndef true
134#define true 1
135#endif
136
137#ifndef false
138#define false 0
139#endif
140
141typedef size_t SIZE_T;
142
143#ifndef MAX
144#define MAX(a,b) (((a) > (b)) ? (a) : (b))
145#endif
146
147#ifndef MIN
148#define MIN(a,b) (((a) < (b)) ? (a) : (b))
149#endif
150
151#ifndef BIT
152#define BIT(nr) (1UL << (nr))
153#endif
154#define MAKEWORD(a, b) ((WORD_T)(((BYTE_T)(a)) | ((WORD_T)((BYTE_T)(b))) << 8))
155#define MAKELONG(a, b) ((LONG_T)(((WORD_T)(a)) | ((DWORD_T)((WORD_T)(b))) << 16))
156#define LOWORD(l) ((WORD_T)(l))
157#define HIWORD(l) ((WORD_T)(((DWORD_T)(l) >> 16) & 0xFFFF))
158#define LOBYTE(w) ((BYTE_T)(w))
159#define HIBYTE(w) ((BYTE_T)(((WORD_T)(w) >> 8) & 0xFF))
160
161#define WORD_SWAP(X) (((X << 8) | (X >> 8))&0xFFFF)
162#define DWORD_SWAP(X) ( (((X)&0xff)<<24) + \
163 (((X)&0xff00)<<8) + \
164 (((X)&0xff0000)>>8) + \
165 (((X)&0xff000000)>>24) )
166#define DDWORD_SWAP(X) { \
167 unsigned long temp_low, temp_high; \
168 temp_low = DWORD_SWAP((unsigned long)((X) & 0xffffffff)); \
169 temp_high = DWORD_SWAP((unsigned long)((X) >> 32)); \
170 X = 0; \
171 X |= temp_low; \
172 X <<= 32; \
173 X |= temp_high;\
174}
175
176#if defined(LITTLE_END) && (LITTLE_END==1)
177#define UNI_NTOHS(X) WORD_SWAP(X)
178#define UNI_HTONS(X) WORD_SWAP(X)
179#define UNI_NTOHL(X) DWORD_SWAP(X)
180#define UNI_HTONL(X) DWORD_SWAP(X)
181#define UNI_NTOHLL(X) DDWORD_SWAP(X)
182#define UNI_HTONLL(X) DDWORD_SWAP(X)
183
184#else
185
186#define UNI_NTOHS(X) X
187#define UNI_HTONS(X) X
188#define UNI_NTOHL(X) X
189#define UNI_HTONL(X) X
190#define UNI_NTOHLL(X) X
191#define UNI_HTONLL(X) X
192
193#endif
194
195#define OFFSOF(s,m) ((SIZE_T)(&(((s*)0)->m)))
196#define CNTSOF(a) (sizeof(a)/sizeof(a[0]))
197#define CNTR_OF(ptr, type, member) \
198 ({(type *)( (char *)ptr - OFFSOF(type,member) );}) // continer of
199
200typedef struct
201{
202 char ip[16]; /* ip addr: xxx.xxx.xxx.xxx */
203 char mask[16]; /* net mask: xxx.xxx.xxx.xxx */
204 char gw[16]; /* gateway: xxx.xxx.xxx.xxx */
205}NW_IP_S;
206
207#define MAC_ADDR_LEN 6
208typedef struct {
209 UINT8_T mac[MAC_ADDR_LEN];
210}NW_MAC_S;
211
212typedef enum {
213 TUYA_IO_BITS_0,
214 TUYA_IO_BITS_1,
215 TUYA_IO_BITS_2,
216 TUYA_IO_BITS_3,
217 TUYA_IO_BITS_4,
218 TUYA_IO_BITS_5,
219 TUYA_IO_BITS_6,
220 TUYA_IO_BITS_7,
221 TUYA_IO_BITS_8,
222 TUYA_IO_BITS_9,
223 TUYA_IO_BITS_10,
224 TUYA_IO_BITS_11,
225 TUYA_IO_BITS_12,
226 TUYA_IO_BITS_13,
227 TUYA_IO_BITS_14,
228 TUYA_IO_BITS_15,
229 TUYA_IO_BITS_16,
230 TUYA_IO_BITS_17,
231 TUYA_IO_BITS_18,
232 TUYA_IO_BITS_19,
233 TUYA_IO_BITS_20,
234 TUYA_IO_BITS_21,
235 TUYA_IO_BITS_22,
236 TUYA_IO_BITS_23,
237 TUYA_IO_BITS_24,
238 TUYA_IO_BITS_25,
239 TUYA_IO_BITS_26,
240 TUYA_IO_BITS_27,
241 TUYA_IO_BITS_28,
242 TUYA_IO_BITS_29,
243 TUYA_IO_BITS_30,
244 TUYA_IO_BITS_31,
245}TUYA_ADDR_BITS_DEF_E;
246
250typedef enum {
251 ADC_NUM_0 = 0, // ADC 0
252 ADC_NUM_1 = 1, // ADC 1
253 ADC_NUM_2 = 2, // ADC 2
254 ADC_NUM_3 = 3, // ADC 3
255 ADC_NUM_4 = 4, // ADC 4
256 ADC_NUM_5 = 5, // ADC 5
257 ADC_NUM_6 = 6, // ADC 6
258 ADC_NUM_MAX,
259} TUYA_ADC_NUM_E;
260typedef enum {
261 TUYA_ADC_INNER_SAMPLE_VOL = 0,
262 TUYA_ADC_EXTERNAL_SAMPLE_VOL
263} TUYA_ADC_TYPE_E;
264
268typedef enum {
269 TUYA_ADC_SINGLE = 0,
270 TUYA_ADC_CONTINUOUS,
271 TUYA_ADC_SCAN,
272} TUYA_ADC_MODE_E;
273
277typedef struct {
278 UINT8_T *ch_list; // adc channel list
279 UINT8_T ch_nums; // adc channel number
280 UINT8_T width; // sampling width
281 UINT32_T freq; // sampling frequency
282 TUYA_ADC_TYPE_E type; // sampling type
283 TUYA_ADC_MODE_E mode; // sampling mode
284 UINT16_T conv_cnt; // sampling times
285 UINT32_T ref_vol; // reference voltage (bat: mv), if dont support set reference voltage, ignore it
287
292typedef enum {
293 DAC_NUM_0 = 0, // DAC 0
294 DAC_NUM_1 = 1, // DAC 1
295 DAC_NUM_2 = 2, // DAC 2
296 DAC_NUM_3 = 3, // DAC 3
297 DAC_NUM_4 = 4, // DAC 4
298 DAC_NUM_5 = 5, // DAC 5
299 DAC_NUM_6 = 6, // DAC 6
300 DAC_NUM_MAX,
301} TUYA_DAC_NUM_E;
305typedef struct {
306 UINT8_T *ch_list; // dac channel list
307 UINT8_T ch_nums; // dac channel number
308 UINT8_T width; // output width
309 UINT32_T freq; // convert freq
311
312typedef struct{
313 UINT8_T *data;
314 UINT32_T len;
316
317typedef enum {
318 TUYA_DAC_WRITE_FIFO = 0, /*设置DAC的FIIO的数据*/
319 TUYA_DAC_SET_BASE_CFG, /*设置DAC的基本配置*/
320} TUYA_DAC_CMD_E;
321
322typedef struct{
323 TUYA_DAC_CMD_E cmd;
324 VOID * argu;
326
331typedef enum {
332 TUYA_FLASH_TYPE_BTL0 = 0,
333 TUYA_FLASH_TYPE_BTL1,
334 TUYA_FLASH_TYPE_STACK,
335 TUYA_FLASH_TYPE_APP,
336 TUYA_FLASH_TYPE_OTA,
337 TUYA_FLASH_TYPE_USER0,
338 TUYA_FLASH_TYPE_USER1,
339 TUYA_FLASH_TYPE_KV_DATA,
340 TUYA_FLASH_TYPE_KV_SWAP,
341 TUYA_FLASH_TYPE_KV_KEY,
342 TUYA_FLASH_TYPE_UF,
343 TUYA_FLASH_TYPE_INFO,
344 TUYA_FLASH_TYPE_KV_UF,
345 TUYA_FLASH_TYPE_KV_PROTECT,
346 TUYA_FLASH_TYPE_RCD,
347 TUYA_FLASH_TYPE_MAX,
348} TUYA_FLASH_TYPE_E;
349
354typedef struct {
355 UINT_T block_size;
356 UINT_T start_addr;
357 UINT_T size;
359
364#ifndef TUYA_FLASH_TYPE_MAX_PARTITION_NUM
365#define TUYA_FLASH_TYPE_MAX_PARTITION_NUM 10
366#endif
367
368typedef struct {
369 UINT_T partition_num;
370 TUYA_FLASH_PARTITION_T partition[TUYA_FLASH_TYPE_MAX_PARTITION_NUM];
372
376typedef enum {
377 GPIO_NUM_0, // GPIO 0
378 GPIO_NUM_1, // GPIO 1
379 GPIO_NUM_2, // GPIO 2
380 GPIO_NUM_3, // GPIO 3
381 GPIO_NUM_4, // GPIO 4
382 GPIO_NUM_5, // GPIO 5
383 GPIO_NUM_6, // GPIO 6
384 GPIO_NUM_7, // GPIO 7
385 GPIO_NUM_8, // GPIO 8
386 GPIO_NUM_9, // GPIO 9
387 GPIO_NUM_10, // GPIO 10
388 GPIO_NUM_11, // GPIO 11
389 GPIO_NUM_12, // GPIO 12
390 GPIO_NUM_13, // GPIO 13
391 GPIO_NUM_14, // GPIO 14
392 GPIO_NUM_15, // GPIO 15
393 GPIO_NUM_16, // GPIO 16
394 GPIO_NUM_17, // GPIO 17
395 GPIO_NUM_18, // GPIO 18
396 GPIO_NUM_19, // GPIO 19
397 GPIO_NUM_20, // GPIO 20
398 GPIO_NUM_21, // GPIO 21
399 GPIO_NUM_22, // GPIO 22
400 GPIO_NUM_23, // GPIO 23
401 GPIO_NUM_24, // GPIO 24
402 GPIO_NUM_25, // GPIO 25
403 GPIO_NUM_26, // GPIO 26
404 GPIO_NUM_27, // GPIO 27
405 GPIO_NUM_28, // GPIO 28
406 GPIO_NUM_29, // GPIO 29
407 GPIO_NUM_30, // GPIO 30
408 GPIO_NUM_31, // GPIO 31
409 GPIO_NUM_32, // GPIO 32
410 GPIO_NUM_33, // GPIO 33
411 GPIO_NUM_34, // GPIO 34
412 GPIO_NUM_35,
413 GPIO_NUM_36,
414 GPIO_NUM_37,
415 GPIO_NUM_38,
416 GPIO_NUM_39,
417 GPIO_NUM_40,
418 GPIO_NUM_41,
419 GPIO_NUM_42,
420 GPIO_NUM_43,
421 GPIO_NUM_44,
422 GPIO_NUM_45,
423 GPIO_NUM_46,
424 GPIO_NUM_47,
425 GPIO_NUM_48,
426 GPIO_NUM_49,
427 GPIO_NUM_50,
428 GPIO_NUM_51,
429 GPIO_NUM_52,
430 GPIO_NUM_53,
431 GPIO_NUM_54,
432 GPIO_NUM_55,
433 GPIO_NUM_56,
434 GPIO_NUM_57,
435 GPIO_NUM_58,
436 GPIO_NUM_59,
437 GPIO_NUM_60,
438 GPIO_NUM_MAX,
439} TUYA_GPIO_NUM_E;
440
444typedef enum {
445 TUYA_GPIO_LEVEL_LOW = 0,
446 TUYA_GPIO_LEVEL_HIGH,
447} TUYA_GPIO_LEVEL_E;
448
452typedef enum {
453 TUYA_GPIO_INPUT = 0,
454 TUYA_GPIO_OUTPUT,
455} TUYA_GPIO_DRCT_E;
456
460typedef enum {
461 TUYA_GPIO_PULLUP = 0, // for input
462 TUYA_GPIO_PULLDOWN, // for input
463 TUYA_GPIO_HIGH_IMPEDANCE, // for input
464 TUYA_GPIO_FLOATING, // for input
465 TUYA_GPIO_PUSH_PULL, // for output
466 TUYA_GPIO_OPENDRAIN, // for output
467 TUYA_GPIO_OPENDRAIN_PULLUP, // for output
468} TUYA_GPIO_MODE_E;
469
473typedef enum {
474 TUYA_GPIO_IRQ_RISE = 0,
475 TUYA_GPIO_IRQ_FALL,
476 TUYA_GPIO_IRQ_RISE_FALL,
477 TUYA_GPIO_IRQ_LOW,
478 TUYA_GPIO_IRQ_HIGH,
479} TUYA_GPIO_IRQ_E;
480
484typedef struct {
485 TUYA_GPIO_MODE_E mode;
486 TUYA_GPIO_DRCT_E direct;
487 TUYA_GPIO_LEVEL_E level;
489
490typedef VOID_T (*TUYA_GPIO_IRQ_CB)(VOID_T *args);
491
495typedef struct {
496 TUYA_GPIO_IRQ_E mode;
497 TUYA_GPIO_IRQ_CB cb;
498 VOID_T *arg;
500
505typedef enum {
506 I2C_NUM_0, // I2C 0
507 I2C_NUM_1, // I2C 1
508 I2C_NUM_2, // I2C 2
509 I2C_NUM_3, // I2C 3
510 I2C_NUM_4, // I2C 4
511 I2C_NUM_5, // I2C 5
512 I2C_NUM_MAX,
513} TUYA_I2C_NUM_E;
514
519typedef enum {
520 TUYA_IIC_MODE_MASTER,
521 TUYA_IIC_MODE_SLAVE
522}TUYA_IIC_ROLE_E;
523
528typedef enum {
529 TUYA_IIC_BUS_SPEED_100K = 0,
530 TUYA_IIC_BUS_SPEED_400K = 1,
531 TUYA_IIC_BUS_SPEED_1M = 2,
532 TUYA_IIC_BUS_SPEED_3_4M = 3
533}TUYA_IIC_SPEED_E;
534
539typedef enum {
540 TUYA_IIC_ADDRESS_7BIT = 0,
541 TUYA_IIC_ADDRESS_10BIT = 1
542} TUYA_IIC_ADDR_MODE_E;
543
548typedef struct {
549 TUYA_IIC_ROLE_E role;
550 TUYA_IIC_SPEED_E speed;
551 TUYA_IIC_ADDR_MODE_E addr_width;
553
554typedef struct {
555 UINT32_T busy : 1;
556 UINT32_T mode : 1;
557 UINT32_T direction : 1;
558 UINT32_T general_call : 1;
559 UINT32_T arbitration_lost : 1;
560 UINT32_T bus_error : 1;
562
567typedef enum {
568 TUYA_IIC_EVENT_TRANSFER_DONE = 0,
569 TUYA_IIC_EVENT_TRANSFER_INCOMPLETE = 1,
570 TUYA_IIC_EVENT_SLAVE_TRANSMIT = 2,
571 TUYA_IIC_EVENT_SLAVE_RECEIVE = 3,
572 TUYA_IIC_EVENT_ADDRESS_NACK = 4,
573 TUYA_IIC_EVENT_GENERAL_CALL = 5,
574 TUYA_IIC_EVENT_ARBITRATION_LOST = 6,
575 TUYA_IIC_EVENT_BUS_ERROR = 7,
576 TUYA_IIC_EVENT_BUS_CLEAR = 8
577} TUYA_IIC_IRQ_EVT_E;
578
579typedef VOID_T (*TUYA_I2C_IRQ_CB)(TUYA_I2C_NUM_E port, TUYA_IIC_IRQ_EVT_E event);
580
585// #define TUYA_I2C_FLAG_WR (1u << 0) // write flag
586// #define TUYA_I2C_FLAG_RD (1u << 1) // read flag
587// #define TUYA_I2C_FLAG_ADDR_10BIT (1u << 2) // 10bits addr mode
588// #define TUYA_I2C_FLAG_NO_START (1u << 3) // no start
589// #define TUYA_I2C_FLAG_IGNORE_NACK (1u << 4) // ignore NACK
590// #define TUYA_I2C_FLAG_NO_READ_ACK (1u << 5) // read without ACK
591// #define TUYA_I2C_FLAG_NO_ADDR (1u << 6) // masg without addr
592
597// typedef struct {
598// UINT32_T flags;
599// UINT16_T addr;
600// UINT16_T len;
601// UINT8_T *buff;
602// } TUYA_I2C_MSG_T;
603
608typedef enum {
609 PWM_NUM_0, // PWM 0
610 PWM_NUM_1, // PWM 1
611 PWM_NUM_2, // PWM 2
612 PWM_NUM_3, // PWM 3
613 PWM_NUM_4, // PWM 4
614 PWM_NUM_5, // PWM 5
615 PWM_NUM_MAX,
616} TUYA_PWM_NUM_E;
617
621typedef enum {
622 TUYA_PWM_NEGATIVE = 0,
623 TUYA_PWM_POSITIVE,
624} TUYA_PWM_POLARITY_E;
625
629typedef struct {
630 TUYA_PWM_POLARITY_E polarity;
631 UINT_T duty; // (bet: 1/10000 ,exp : 100 == 1/100)
632 UINT_T frequency; // (bet: Hz)
634
639typedef enum {
640 SPI_NUM_0, // SPI 0
641 SPI_NUM_1, // SPI 1
642 SPI_NUM_2, // SPI 2
643 SPI_NUM_3, // SPI 3
644 SPI_NUM_4, // SPI 4
645 SPI_NUM_5, // SPI 5
646 SPI_NUM_MAX,
647} TUYA_SPI_NUM_E;
648
649typedef enum {
650 TUYA_SPI_MODE0 = 0, // CPOL = 0, CPHA = 0
651 TUYA_SPI_MODE1 = 1, // CPOL = 0, CPHA = 1
652 TUYA_SPI_MODE2 = 2, // CPOL = 1, CPHA = 0
653 TUYA_SPI_MODE3 = 3 // CPOL = 1, CPHA = 1
654} TUYA_SPI_MODE_E;
655
660typedef enum {
661 TUYA_SPI_ORDER_MSB2LSB = 0, // SPI Bit order from MSB to LSB
662 TUYA_SPI_ORDER_LSB2MSB = 1, // SPI Bit order from LSB to MSB
663} TUYA_SPI_BIT_ORDER_E;
664
665/*----- SPI Control Codes: Mode -----*/
666typedef enum {
667 TUYA_SPI_ROLE_INACTIVE,
668 TUYA_SPI_ROLE_MASTER,
669 TUYA_SPI_ROLE_SLAVE,
670 TUYA_SPI_ROLE_MASTER_SIMPLEX,
671 TUYA_SPI_ROLE_SLAVE_SIMPLEX
672} TUYA_SPI_ROLE_E;
673
678typedef enum {
679 TUYA_SPI_DATA_BIT8 = 0,
680 TUYA_SPI_DATA_BIT16,
681} TUYA_SPI_DATABITS_E;
682
687typedef enum {
688 TUYA_SPI_AUTO_TYPE = 0, // hardware auto set
689 TUYA_SPI_SOFT_TYPE, // software manual set
690 TUYA_SPI_SOFT_ONE_WIRE_TYPE, // software manual set(miso mosi pin multiplexing)
691} TUYA_SPI_TYPE_E;
692
697typedef struct {
698 TUYA_SPI_ROLE_E role;
699 TUYA_SPI_MODE_E mode;
700 TUYA_SPI_TYPE_E type;
701 TUYA_SPI_DATABITS_E databits;
702 TUYA_SPI_BIT_ORDER_E bitorder;
703 UINT_T freq_hz;
705
706/****** SPI Event *****/
707typedef enum {
708 TUYA_SPI_EVENT_TRANSFER_COMPLETE = 0,
709 TUYA_SPI_EVENT_TX_COMPLETE,
710 TUYA_SPI_EVENT_RX_COMPLETE,
711 TUYA_SPI_EVENT_DATA_LOST,
712 TUYA_SPI_EVENT_MODE_FAULT
713}TUYA_SPI_IRQ_EVT_E;
714
719typedef VOID_T (*TUYA_SPI_IRQ_CB)(TUYA_SPI_NUM_E port, TUYA_SPI_IRQ_EVT_E event);
720
725typedef struct {
726 UINT32_T busy : 1;
727 UINT32_T data_lost : 1;
728 UINT32_T mode_fault : 1;
730
739typedef enum {
740 I2S_NUM_0 = 0,
741 I2S_NUM_1 = 1,
742 I2S_NUM_MAX,
743} TUYA_I2S_NUM_E;
744
749typedef enum {
750 TUYA_I2S_MODE_MASTER = (0x1 << 0),
751 TUYA_I2S_MODE_SLAVE = (0x1 << 1),
752 TUYA_I2S_MODE_TX = (0x1 << 2),
753 TUYA_I2S_MODE_RX = (0x1 << 3),
754} TUYA_I2S_MODE_E;
755
756typedef enum {
757 TUYA_I2S_BITS_PER_SAMPLE_8BIT = 8,
758 TUYA_I2S_BITS_PER_SAMPLE_16BIT = 16,
759 TUYA_I2S_BITS_PER_SAMPLE_24BIT = 24,
760 TUYA_I2S_BITS_PER_SAMPLE_32BIT = 32,
761} TUYA_I2S_BITS_PER_SAMP_E;
762
763typedef enum {
764 TUYA_I2S_CHANNEL_FMT_RIGHT_LEFT,
765 TUYA_I2S_CHANNEL_FMT_ALL_RIGHT,
766 TUYA_I2S_CHANNEL_FMT_ALL_LEFT,
767 TUYA_I2S_CHANNEL_FMT_ONLY_RIGHT,
768 TUYA_I2S_CHANNEL_FMT_ONLY_LEFT,
769} TUYA_I2S_CHANNEL_FMT_E;
770
771typedef enum {
772 I2S_COMM_FORMAT_STAND_I2S = 0X01,
773 I2S_COMM_FORMAT_STAND_MSB = 0X02,
774 I2S_COMM_FORMAT_STAND_PCM_SHORT = 0x04,
775 I2S_COMM_FORMAT_STAND_PCM_LONG = 0x0C,
776 I2S_COMM_FORMAT_STAND_MAX,
777} TUYA_I2S_COMM_FORMAT_E;
778
779typedef struct {
780 TUYA_I2S_MODE_E mode;
781 UINT32_T sample_rate;
782 UINT32_T mclk;
783 TUYA_I2S_BITS_PER_SAMP_E bits_per_sample;
784 TUYA_I2S_CHANNEL_FMT_E channel_format;
785 TUYA_I2S_COMM_FORMAT_E communication_format;
786 UINT32_T i2s_dma_flags;
788
789 // 文件访问权限
790#define TUYA_IRUSR 0400 /* Read by owner. */
791#define TUYA_IWUSR 0200 /* Write by owner. */
792#define TUYA_IXUSR 0100 /* Execute by owner. */
793
794
795 // 缓冲区搜索起始位置类型
796#define TUYA_SEEK_SET 0 /* Seek from beginning of file. */
797#define TUYA_SEEK_CUR 1 /* Seek from current position. */
798#define TUYA_SEEK_END 2 /* Seek from end of file. */
799
800#define TUYA_R_OK 4
801#define TUYA_W_OK 2
802#define TUYA_X_OK 1
803#define TUYA_F_OK 0
804
805typedef VOID_T* TUYA_DIR;
806typedef VOID_T* TUYA_FILEINFO;
807typedef VOID_T* TUYA_FILE;
808
809
813typedef enum {
814 TUYA_CPU_SLEEP,
815 TUYA_CPU_DEEP_SLEEP,
816} TUYA_CPU_SLEEP_MODE_E;
817
821typedef VOID_T (*TUYA_PRE_SLEEP_CB)(VOID_T);
822
826typedef VOID_T (*TUYA_POST_WAKEUP_CB)(VOID_T);
827
831typedef struct {
832 TUYA_PRE_SLEEP_CB pre_sleep_cb;
833 TUYA_POST_WAKEUP_CB post_wakeup_cb;
835
836
837
838#if OPERATING_SYSTEM == SYSTEM_LINUX
839typedef UINT64_T SYS_TICK_T;
840typedef UINT64_T SYS_TIME_T;
841#else
842typedef UINT_T SYS_TICK_T;
843typedef UINT_T SYS_TIME_T;
844#endif
845
846/*
847 * reasons for restart
848 */
849typedef enum {
850 TUYA_RESET_REASON_POWERON = 0,
851 TUYA_RESET_REASON_HW_WDOG = 1,
852 TUYA_RESET_REASON_FAULT = 2,
853 TUYA_RESET_REASON_SW_WDOG = 3,
854 TUYA_RESET_REASON_SOFTWARE = 4,
855 TUYA_RESET_REASON_DEEPSLEEP = 5,
856 TUYA_RESET_REASON_EXTERNAL = 6,
857 TUYA_RESET_REASON_UNKNOWN = 7,
858 TUYA_RESET_REASON_FIB = 8,
859 TUYA_RESET_REASON_BOOTLOADER = 8,
860 TUYA_RESET_REASON_CRASH = 10,
861 TUYA_RESET_REASON_FLASH = 11,
862 TUYA_RESET_REASON_FATAL = 12,
863 TUYA_RESET_REASON_BROWNOUT = 13,
864 TUYA_RESET_REASON_UNSUPPORT = 0xFF,
865} TUYA_RESET_REASON_E;
866
867
868/* ota */
869#define TUYA_OTA_FILE_MD5_LEN 16
870
871/*
872 * ota upgrade type
873 */
874typedef enum {
875 TUYA_OTA_FULL = 1,
876 TUYA_OTA_DIFF = 2,
877} TUYA_OTA_TYPE_E;
878
879
880typedef enum {
881 TUYA_OTA_PATH_AIR = 0,
882 TUYA_OTA_PATH_UART = 1,
883 TUYA_OTA_PATH_BLE = 2,
884 TUYA_OTA_PATH_ZIGBEE = 3,
885}TUYA_OTA_PATH_E;
886
887
888typedef struct {
889 UINT32_T len;
890 UINT32_T crc32;
891 UINT8_T md5[TUYA_OTA_FILE_MD5_LEN];
893
894/*
895 * ota pack data
896 */
897typedef struct {
898 UINT_T total_len;
899 UINT_T offset;
900 UCHAR_T* data;
901 UINT_T len;
902 VOID_T* pri_data;
904
909typedef enum {
910 UART_NUM_0, // UART 0
911 UART_NUM_1, // UART 1
912 UART_NUM_2, // UART 2
913 UART_NUM_3, // UART 3
914 UART_NUM_4, // UART 4
915 UART_NUM_5, // UART 5
916 UART_NUM_MAX,
917} TUYA_UART_NUM_E;
918
919typedef enum {
920 TUYA_UART_SYS = 0,
921 TUYA_UART_USB,
922 TUYA_UART_SDIO,
923 TUYA_UART_MAX_TYPE,
924} TUYA_UART_TYPE_E;
925
930typedef enum {
931 TUYA_UART_DATA_LEN_5BIT = 0x05,
932 TUYA_UART_DATA_LEN_6BIT = 0x06,
933 TUYA_UART_DATA_LEN_7BIT = 0x07,
934 TUYA_UART_DATA_LEN_8BIT = 0x08,
935} TUYA_UART_DATA_LEN_E;
936
941typedef enum {
942 TUYA_UART_STOP_LEN_1BIT = 0x01,
943 TUYA_UART_STOP_LEN_1_5BIT1 = 0x02,
944 TUYA_UART_STOP_LEN_2BIT = 0x03,
945} TUYA_UART_STOP_LEN_E;
946
951typedef enum {
952 TUYA_UART_PARITY_TYPE_NONE = 0,
953 TUYA_UART_PARITY_TYPE_ODD = 1,
954 TUYA_UART_PARITY_TYPE_EVEN = 2,
955} TUYA_UART_PARITY_TYPE_E;
956
957typedef enum {
958 TUYA_UART_FLOWCTRL_NONE = 0,
959 TUYA_UART_FLOWCTRL_RTSCTS,
960 TUYA_UART_FLOWCTRL_XONXOFF,
961 TUYA_UART_FLOWCTRL_DTRDSR,
962} TUYA_UART_FLOWCTRL_TYPE_E;
963
964#define TUYA_UART_PORT_ID(port_type, port_num) ((((port_type) << 16) & 0xFFFF0000) | (port_num))
965#define TUYA_UART_GET_PORT_TYPE(port_id) (((port_id) >> 16) & 0xFFFF)
966#define TUYA_UART_GET_PORT_NUMBER(port_id) ((port_id) & 0xFFFF)
967
972typedef struct {
973 UINT_T baudrate;
974 TUYA_UART_PARITY_TYPE_E parity;
975 TUYA_UART_DATA_LEN_E databits;
976 TUYA_UART_STOP_LEN_E stopbits;
977 TUYA_UART_FLOWCTRL_TYPE_E flowctrl;
979
980
991typedef VOID_T (*TUYA_UART_IRQ_CB)(TUYA_UART_NUM_E port_id);
992
997typedef enum{
998 TUYA_UART_SUSPEND_CMD = 0,
999 TUYA_UART_RESUME_CMD,
1000 TUYA_UART_FLUSH_CMD,
1001 TUYA_UART_RECONFIG_CMD,
1002 TUYA_UART_USER_CMD,
1003 TUYA_UART_MAX_CMD = 1000
1004}TUYA_UART_IOCTL_CMD_E;
1005
1006
1007typedef struct {
1008 UINT_T interval_ms;
1010
1015typedef enum {
1016 TIMER_NUM_0, // TIMER 0
1017 TIMER_NUM_1, // TIMER 1
1018 TIMER_NUM_2, // TIMER 2
1019 TIMER_NUM_3, // TIMER 3
1020 TIMER_NUM_4, // TIMER 4
1021 TIMER_NUM_5, // TIMER 5
1022 TIMER_NUM_MAX,
1023} TUYA_TIMER_NUM_E;
1024
1025#define TUYA_TIMER_CFG(__CFG, __MODE, __CB, __ARG) \
1026 (__CFG)->mode = __MODE; \
1027 (__CFG)->cb = __CB; \
1028 (__CFG)->arg = __ARG
1029
1030typedef enum {
1031 TUYA_TIMER_MODE_ONCE = 0,
1032 TUYA_TIMER_MODE_PERIOD
1033} TUYA_TIMER_MODE_E;
1034
1035typedef VOID (*TUYA_TIMER_ISR_CB)(VOID *args);
1036
1037typedef struct {
1038 TUYA_TIMER_MODE_E mode;
1039 TUYA_TIMER_ISR_CB cb;
1040 VOID *args;
1042
1043#if defined(SYSTEM_LINUX) && (OPERATING_SYSTEM == SYSTEM_LINUX)
1044/* max fd numbers in linux */
1045#define TUYA_FD_MAX_COUNT (1024)
1046#else
1047/* max fd numbers in other system */
1048#define TUYA_FD_MAX_COUNT (64)
1049#endif
1050
1051typedef INT_T TUYA_OPT_LEVEL;
1052typedef INT_T TUYA_OPT_NAME;
1053
1054/* tuyaos definition of fd operations */
1055typedef struct {
1056 UINT8_T placeholder[(TUYA_FD_MAX_COUNT+7)/8];
1058
1059/* tuyaos definition of socket protocol */
1060typedef enum {
1061 PROTOCOL_TCP = 0,
1062 PROTOCOL_UDP = 1,
1063 PROTOCOL_RAW = 2,
1064}TUYA_PROTOCOL_TYPE_E;
1065
1066/* tuyaos definition of transfer type */
1067typedef enum {
1068 TRANS_RECV = 0,
1069 TRANS_SEND = 1,
1070}TUYA_TRANS_TYPE_E;
1071
1072
1073/* tuyaos definition of IP addr */
1074typedef UINT_T TUYA_IP_ADDR_T;
1075
1076/* tuyaos errorno */
1077typedef UINT_T TUYA_ERRNO;
1078#define TUYA_ERRNO_NOT_SUPPORT 255
1079
1080
1081#ifdef __cplusplus
1082}
1083#endif
1084
1085#endif // TUYA_CLOUD_TYPES_H
1086
Definition: tuya_cloud_types.h:201
Definition: tuya_cloud_types.h:208
adc config
Definition: tuya_cloud_types.h:277
dac config //xbf
Definition: tuya_cloud_types.h:305
Definition: tuya_cloud_types.h:322
Definition: tuya_cloud_types.h:312
Definition: tuya_cloud_types.h:1055
Definition: tuya_cloud_types.h:368
flash partition information
Definition: tuya_cloud_types.h:354
gpio config
Definition: tuya_cloud_types.h:484
gpio interrupt config
Definition: tuya_cloud_types.h:495
Definition: tuya_cloud_types.h:779
UINT32_T mclk
Definition: tuya_cloud_types.h:782
UINT32_T sample_rate
Definition: tuya_cloud_types.h:781
TUYA_I2S_COMM_FORMAT_E communication_format
Definition: tuya_cloud_types.h:785
TUYA_I2S_MODE_E mode
Definition: tuya_cloud_types.h:780
TUYA_I2S_CHANNEL_FMT_E channel_format
Definition: tuya_cloud_types.h:784
UINT32_T i2s_dma_flags
Definition: tuya_cloud_types.h:786
TUYA_I2S_BITS_PER_SAMP_E bits_per_sample
Definition: tuya_cloud_types.h:783
i2c cfg
Definition: tuya_cloud_types.h:548
Definition: tuya_cloud_types.h:554
UINT32_T direction
Direction: 0=Transmitter, 1=Receiver
Definition: tuya_cloud_types.h:557
UINT32_T arbitration_lost
Master lost arbitration(in case of multi-masters) (cleared on start of next Master operation)
Definition: tuya_cloud_types.h:559
UINT32_T general_call
General Call(address 0) indication (cleared on start of next Slave operation)
Definition: tuya_cloud_types.h:558
UINT32_T mode
Mode: 0=Slave, 1=Master
Definition: tuya_cloud_types.h:556
UINT32_T busy
Transmitter/Receiver busy flag,1 is busy.
Definition: tuya_cloud_types.h:555
UINT32_T bus_error
Bus error detected (cleared on start of next Master/Slave operation)
Definition: tuya_cloud_types.h:560
Definition: tuya_cloud_types.h:897
UINT_T offset
ota image offset
Definition: tuya_cloud_types.h:899
UINT_T total_len
ota image totle len
Definition: tuya_cloud_types.h:898
void * pri_data
private pointer
Definition: tuya_cloud_types.h:902
UINT_T len
ota data len
Definition: tuya_cloud_types.h:901
UCHAR_T * data
ota data
Definition: tuya_cloud_types.h:900
Definition: tuya_cloud_types.h:888
pwm config
Definition: tuya_cloud_types.h:629
sleep callback
Definition: tuya_cloud_types.h:831
spi config
Definition: tuya_cloud_types.h:697
SPI Status
Definition: tuya_cloud_types.h:725
UINT32_T busy
Transmitter/Receiver busy flag
Definition: tuya_cloud_types.h:726
UINT32_T data_lost
Data lost: Receive overflow / Transmit underflow (cleared on start of transfer operation)
Definition: tuya_cloud_types.h:727
UINT32_T mode_fault
Mode fault detected; optional (cleared on start of transfer operation)
Definition: tuya_cloud_types.h:728
Definition: tuya_cloud_types.h:1037
uart config
Definition: tuya_cloud_types.h:972
Definition: tuya_cloud_types.h:1007