c47781baf925295845cb82eb375bcefa7b419bd9
1 /*\r
2 * rpc.h\r
3 *\r
4 * This module contains the RPC (Remote Procedure Call) API for the\r
5 * ZigBee Network Processor (ZNP) Host Interface.\r
6 *\r
7 * Copyright (C) 2014 Texas Instruments Incorporated - http://www.ti.com/\r
8 * \r
9 * \r
10 * Redistribution and use in source and binary forms, with or without \r
11 * modification, are permitted provided that the following conditions \r
12 * are met:\r
13 *\r
14 * Redistributions of source code must retain the above copyright \r
15 * notice, this list of conditions and the following disclaimer.\r
16 *\r
17 * Redistributions in binary form must reproduce the above copyright\r
18 * notice, this list of conditions and the following disclaimer in the \r
19 * documentation and/or other materials provided with the \r
20 * distribution.\r
21 *\r
22 * Neither the name of Texas Instruments Incorporated nor the names of\r
23 * its contributors may be used to endorse or promote products derived\r
24 * from this software without specific prior written permission.\r
25 *\r
26 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \r
27 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT \r
28 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\r
29 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT \r
30 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, \r
31 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT \r
32 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r
33 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r
34 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT \r
35 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE \r
36 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
37 *\r
38 */\r
39 \r
40 #ifndef RPC_H\r
41 #define RPC_H\r
42 \r
43 #ifdef __cplusplus\r
44 extern "C"\r
45 {\r
46 #endif\r
47 \r
48 /***********************************************************************************\r
49 * INCLUDES\r
50 */\r
51 #include <stdint.h>\r
52 \r
53 /*********************************************************************\r
54 * MACROS\r
55 */\r
56 \r
57 /*********************************************************************\r
58 * CONSTANTS\r
59 */\r
60 \r
61 //\r
62 // RPC (Remote Procedure Call) definitions\r
63 //\r
64 // SOF (Start of Frame) indicator byte byte\r
65 #define MT_RPC_SOF (0xFE)\r
66 \r
67 // The 3 MSB's of the 1st command field byte (Cmd0) are for command type\r
68 #define MT_RPC_CMD_TYPE_MASK (0xE0)\r
69 \r
70 // The 5 LSB's of the 1st command field byte (Cmd0) are for the subsystem\r
71 #define MT_RPC_SUBSYSTEM_MASK (0x1F)\r
72 \r
73 // maximum length of RPC frame\r
74 // (1 byte length + 2 bytes command + 0-250 bytes data)\r
75 #define RPC_MAX_LEN (256)\r
76 \r
77 // RPC Frame field lengths\r
78 #define RPC_UART_SOF_LEN (1)\r
79 #define RPC_UART_FCS_LEN (1)\r
80 \r
81 #define RPC_UART_FRAME_START_IDX (1)\r
82 \r
83 #define RPC_LEN_FIELD_LEN (1)\r
84 #define RPC_CMD0_FIELD_LEN (1)\r
85 #define RPC_CMD1_FIELD_LEN (1)\r
86 \r
87 #define RPC_HDR_LEN (RPC_LEN_FIELD_LEN + RPC_CMD0_FIELD_LEN + \\r
88 RPC_CMD1_FIELD_LEN)\r
89 \r
90 #define RPC_UART_HDR_LEN (RPC_UART_SOF_LEN + RPC_HDR_LEN)\r
91 \r
92 /***********************************************************************************\r
93 * TYPEDEFS\r
94 */\r
95 \r
96 // Cmd0 Command Type\r
97 typedef enum\r
98 {\r
99 MT_RPC_CMD_POLL = 0x00, // POLL command\r
100 MT_RPC_CMD_SREQ = 0x20, // SREQ (Synchronous Request) command\r
101 MT_RPC_CMD_AREQ = 0x40, // AREQ (Acynchronous Request) command\r
102 MT_RPC_CMD_SRSP = 0x60, // SRSP (Synchronous Response)\r
103 MT_RPC_CMD_RES4 = 0x80, // Reserved\r
104 MT_RPC_CMD_RES5 = 0xA0, // Reserved\r
105 MT_RPC_CMD_RES6 = 0xC0, // Reserved\r
106 MT_RPC_CMD_RES7 = 0xE0 // Reserved\r
107 } mtRpcCmdType_t;\r
108 \r
109 // Cmd0 Command Subsystem\r
110 typedef enum\r
111 {\r
112 MT_RPC_SYS_RES0, // Reserved.\r
113 MT_RPC_SYS_SYS, // SYS interface\r
114 MT_RPC_SYS_MAC,\r
115 MT_RPC_SYS_NWK,\r
116 MT_RPC_SYS_AF, // AF interface\r
117 MT_RPC_SYS_ZDO, // ZDO interface\r
118 MT_RPC_SYS_SAPI, // Simple API interface\r
119 MT_RPC_SYS_UTIL, // UTIL interface\r
120 MT_RPC_SYS_DBG,\r
121 MT_RPC_SYS_APP,\r
122 MT_RPC_SYS_OTA,\r
123 MT_RPC_SYS_ZNP,\r
124 MT_RPC_SYS_SPARE_12,\r
125 MT_RPC_SYS_SBL = 13, // 13 to be compatible with existing RemoTI - AKA MT_RPC_SYS_UBL\r
126 MT_RPC_SYS_MAX // Maximum value, must be last (so 14-32 available, not yet assigned).\r
127 } mtRpcSysType_t;\r
128 \r
129 // Error codes in Attribute byte of SRSP packet\r
130 typedef enum\r
131 {\r
132 MT_RPC_SUCCESS = 0, // success\r
133 MT_RPC_ERR_SUBSYSTEM = 1, // invalid subsystem\r
134 MT_RPC_ERR_COMMAND_ID = 2, // invalid command ID\r
135 MT_RPC_ERR_PARAMETER = 3, // invalid parameter\r
136 MT_RPC_ERR_LENGTH = 4 // invalid length\r
137 } mtRpcErrorCode_t;\r
138 \r
139 /***********************************************************************************\r
140 * GLOBAL VARIABLES\r
141 */\r
142 \r
143 /***********************************************************************************\r
144 * GLOBAL FUNCTIONS\r
145 */\r
146 \r
147 int32_t rpcOpen(char *devicePath, uint32_t port);\r
148 void rpcClose(void);\r
149 int32_t rpcProcess(void);\r
150 uint8_t rpcSendFrame(uint8_t cmd0, uint8_t cmd1, uint8_t * payload,\r
151 uint8_t payload_len);\r
152 void rpcForceRun(void);\r
153 int32_t rpcInitMq(void);\r
154 int32_t rpcGetMqClientMsg(void);\r
155 int32_t rpcWaitMqClientMsg(uint32_t timeout);\r
156 \r
157 #ifdef __cplusplus\r
158 }\r
159 #endif\r
160 \r
161 #endif /* RPC_H */\r