1 /*
2  * Copyright (C) 2019-2020 Alibaba Group Holding Limited
3  */
4 
5 #ifndef _VENDOR_MODEL_H
6 #define _VENDOR_MODEL_H
7 
8 #define CONFIG_CID_TAOBAO 0x01A8
9 #define CONFIG_MESH_VENDOR_COMPANY_ID CONFIG_CID_TAOBAO
10 
11 #define BT_MESH_MODEL_VND_COMPANY_ID 0x01A8
12 #define BT_MESH_MODEL_VND_MODEL_SRV 0x0000
13 #define BT_MESH_MODEL_VND_MODEL_CLI 0x0001
14 
15 
16 #define VENDOR_OP_ATTR_GET_STATUS        0xD0
17 #define VENDOR_OP_ATTR_SET_ACK           0xD1
18 #define VENDOR_OP_ATTR_SET_UNACK         0xD2
19 #define VENDOR_OP_ATTR_STATUS            0xD3
20 #define VENDOR_OP_ATTR_TRANS_MSG         0xCF
21 #define VENDOR_OP_ATTR_TRANS_INDICATE    0xCE
22 #define VENDOR_OP_ATTR_TRANS_ACK         0xCD
23 #define VENDOR_OP_ATTR_MESH_AUTOCONFIG   0xD6
24 #define VENDOR_OP_ATTR_MESH_AUTOCONFIG_GET   0xD7
25 #define VENDOR_OP_ATTR_MESH_AUTOCONFIG_STATUS 0xD8
26 
27 #define VENDOR_OP_ATTR_INDICATE          0xD4
28 #define VENDOR_OP_ATTR_CONFIRM           0xD5
29 #define VENDOR_OP_ATTR_INDICATE_TG       0xDE
30 #define VENDOR_OP_ATTR_CONFIRM_TG        0xDF
31 
32 
33 #define ONOFF_T           0x0100
34 #define LIGHTNESS_LEVEL_T 0x0121
35 
36 #define VENDOR_MODEL_MSG_DFT_RETRY_TIMES 5
37 #define VENDOR_MODEL_MSG_MAX_RETRY_TIMES 10
38 #define VENDOR_MODEL_MSG_RETRY_PERIOD 500
39 
40 /**
41  * p_elem: pointer to the element which the messsage want to be sent to
42  * retry: retry counts before desired confirm message received
43  * * fill negative value if retransmission is not necessary
44  * * fill positive value if retransmission is needed
45  * * * will be round in this scope - [VENDOR_MODEL_MSG_DFT_RETRY_TIMES, VENDOR_MODEL_MSG_MAX_RETRY_TIMES]
46  * retry_period: wait for retry_period before retransmit the message, in unit of ms
47  * opid: hightest byte in Opcode defined in the vendor model spec designed by Alibaba IoT Group
48  * * e.g. for Vendor Message Attr Get message, Opcode is 0xD001A8, corresponding opid is 0xD0
49  * * refer to the marco named VENDOR_OP_ATTR_xxxx
50  * tid:
51  * * if the message is with type of VENDOR_OP_ATTR_CONFIRM or VENDOR_OP_ATTR_CONFIRM_TG,
52  * * tid should be filled with the replied message's tid
53  * len: payload length
54  * data: pointer to the vendor message's payload
55  * */
56 typedef struct _vnd_model_msg {
57     struct bt_mesh_model *model;
58     uint16_t netkey_idx;
59     uint16_t appkey_idx;
60     uint16_t dst_addr;
61     uint16_t len;
62     uint8_t  retry;
63     uint8_t  retry_period;
64     uint8_t  opid;
65     uint8_t  tid;
66     uint8_t  *data;
67 } vnd_model_msg;
68 
69 typedef struct _vnd_model_msg_n {
70     sys_dnode_t node;
71     s8_t left_retry;
72     long long timeout;
73     vnd_model_msg msg;
74 } vnd_model_msg_n;
75 
76 
77 #endif //_VENDOR_MODEL_H
78