]> Gitweb @ Texas Instruments - Open Source Git Repositories - git.TI.com/gitweb - processor-sdk/pdk.git/blob - packages/ti/transport/ndk/nimu_icss/example/CCLink/cclink_master/library/include/SLMP.h
transport: add to PDK
[processor-sdk/pdk.git] / packages / ti / transport / ndk / nimu_icss / example / CCLink / cclink_master / library / include / SLMP.h
1 /*\r
2  * Copyright (C) 2017 - 2018 Texas Instruments Incorporated - http://www.ti.com/\r
3  * Copyright (C) 2016 CC-Link Partner Association -http://am.cc-link.org/\r
4  * \r
5  * \r
6  *  Redistribution and use in source and binary forms, with or without \r
7  *  modification, are permitted provided that the following conditions \r
8  *  are met:\r
9  *\r
10  *    Redistributions of source code must retain the above copyright \r
11  *    notice, this list of conditions and the following disclaimer.\r
12  *\r
13  *    Redistributions in binary form must reproduce the above copyright\r
14  *    notice, this list of conditions and the following disclaimer in the \r
15  *    documentation and/or other materials provided with the   \r
16  *    distribution.\r
17  *\r
18  *    Neither the name of Texas Instruments Incorporated nor the names of\r
19  *    its contributors may be used to endorse or promote products derived\r
20  *    from this software without specific prior written permission.\r
21  *\r
22  *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \r
23  *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT \r
24  *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\r
25  *  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT \r
26  *  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, \r
27  *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT \r
28  *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r
29  *  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r
30  *  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT \r
31  *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE \r
32  *  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
33  *\r
34 */\r
35 \r
36 #ifndef         __SLMP_H__\r
37 #define         __SLMP_H__\r
38 \r
39 #include <stdint.h>\r
40 \r
41 #ifdef __cplusplus\r
42 extern "C" {\r
43 #endif\r
44 \r
45 /*[ Structure of SLMP Info  ]*/\r
46 typedef struct \r
47 {\r
48         uint32_t        ulFrameType;                    /* Frame Type */\r
49         uint16_t        usSerialNumber;                 /* Serial Number */\r
50         uint16_t        usNetNumber;                    /* Network Number */\r
51         uint16_t        usNodeNumber;                   /* Node Number */\r
52         uint16_t        usProcNumber;                   /* Processor Number */\r
53         uint16_t        usDataLength;                   /* Data Length */\r
54         uint16_t        usTimer;                                /* Timer Value */\r
55         uint16_t        usCommand;                              /* Command */\r
56         uint16_t        usSubCommand;                   /* Sub Command */\r
57         uint16_t        usEndCode;                              /* End Code */\r
58         uint8_t *       pucData;                                /* Data */\r
59 }SLMP_INFO;\r
60 \r
61 /*[ Definition of Frame Type ]*/\r
62 #define SLMP_FTYPE_BIN_REQ_ST                                                   (0x5000)\r
63 #define SLMP_FTYPE_BIN_RES_ST                                                   (0xD000)\r
64 #define SLMP_FTYPE_BIN_REQ_MT                                                   (0x5400)\r
65 #define SLMP_FTYPE_BIN_RES_MT                                                   (0xD400)\r
66 #define SLMP_FTYPE_ASCII_REQ_ST                                                 (0x35303030) /* '5000' */\r
67 #define SLMP_FTYPE_ASCII_RES_ST                                                 (0x44303030) /* 'D000' */\r
68 #define SLMP_FTYPE_ASCII_REQ_MT                                                 (0x35343030) /* '5400' */\r
69 #define SLMP_FTYPE_ASCII_RES_MT                                                 (0x44343030) /* 'D400' */\r
70 \r
71 /*[ Definition of Index per frame type ]*/\r
72 #define SLMP_FTYPE_BIN_REQ_ST_INDEX                                             (0x00)\r
73 #define SLMP_FTYPE_BIN_RES_ST_INDEX                                             (0x01)\r
74 #define SLMP_FTYPE_BIN_REQ_MT_INDEX                                             (0x02)\r
75 #define SLMP_FTYPE_BIN_RES_MT_INDEX                                             (0x03)\r
76 #define SLMP_FTYPE_ASCII_REQ_ST_INDEX                                   (0x04)\r
77 #define SLMP_FTYPE_ASCII_RES_ST_INDEX                                   (0x05)\r
78 #define SLMP_FTYPE_ASCII_REQ_MT_INDEX                                   (0x06)\r
79 #define SLMP_FTYPE_ASCII_RES_MT_INDEX                                   (0x07)\r
80 \r
81 /*[ Definition of Data Code ]*/\r
82 #define SLMP_DATA_CODE_BIN                                                              0\r
83 #define SLMP_DATA_CODE_ASCII                                                    1\r
84 #define SLMP_DATA_CODE(a)\\r
85         (((a == SLMP_FTYPE_BIN_REQ_ST) | (a == SLMP_FTYPE_BIN_RES_ST) | (a == SLMP_FTYPE_BIN_REQ_MT) | (a == SLMP_FTYPE_BIN_RES_MT)) ? SLMP_DATA_CODE_BIN :\\r
86          ((a == SLMP_FTYPE_ASCII_REQ_ST) | (a == SLMP_FTYPE_ASCII_RES_ST) | (a == SLMP_FTYPE_ASCII_REQ_MT) | (a == SLMP_FTYPE_ASCII_RES_MT)) ? SLMP_DATA_CODE_ASCII : -1)\r
87 \r
88 /*[ Definition of Response Frame Type ]*/\r
89 #define SLMP_RESPONSE_FRAME_TYPE(a)\\r
90         ((a == SLMP_FTYPE_BIN_REQ_ST) ? SLMP_FTYPE_BIN_RES_ST :\\r
91         ((a == SLMP_FTYPE_BIN_REQ_MT) ? SLMP_FTYPE_BIN_RES_MT :\\r
92         ((a == SLMP_FTYPE_ASCII_REQ_ST) ? SLMP_FTYPE_ASCII_RES_ST :\\r
93         ((a == SLMP_FTYPE_ASCII_REQ_MT) ? SLMP_FTYPE_ASCII_RES_MT : -1))))\r
94 \r
95 /*[ Definition of SLMP Frame Header Size ]*/\r
96 #define SLMP_HEADER_SIZE(a)\\r
97         (((a == SLMP_FTYPE_BIN_REQ_ST) | (a == SLMP_FTYPE_BIN_RES_ST)) ? 11 :\\r
98         (((a == SLMP_FTYPE_BIN_REQ_MT) | (a == SLMP_FTYPE_BIN_RES_MT)) ? 15 :\\r
99         (((a == SLMP_FTYPE_ASCII_REQ_ST) | (a == SLMP_FTYPE_ASCII_RES_ST)) ? 22 :\\r
100         (((a == SLMP_FTYPE_ASCII_REQ_MT) | (a == SLMP_FTYPE_ASCII_RES_MT)) ? 30 : 0))))\r
101 \r
102 /*[ Definition of SLMP Commands ]*/\r
103 /* Device */\r
104 #define SLMP_COMMAND_DEVICE_READ                                                        (0x0401)\r
105 #define SLMP_COMMAND_DEVICE_WRITE                                                       (0x1401)\r
106 #define SLMP_COMMAND_DEVICE_READ_RANDOM                                         (0x0403)\r
107 #define SLMP_COMMAND_DEVICE_WRITE_RANDOM                                        (0x1402)\r
108 #define SLMP_COMMAND_DEVICE_ENTRY_MONITOR_DEVICE                        (0x0801)\r
109 #define SLMP_COMMAND_DEVICE_EXECUTE_MONITOR                                     (0x0802)\r
110 #define SLMP_COMMAND_DEVICE_READ_BLOCK                                          (0x0406)\r
111 #define SLMP_COMMAND_DEVICE_WRITE_BLOCK                                         (0x1406)\r
112 \r
113 /* Memory */\r
114 #define SLMP_COMMAND_MEMORY_READ                                                        (0x0613)\r
115 #define SLMP_COMMAND_MEMORY_WRITE                                                       (0x1613)\r
116 \r
117 /* ExtendUnit */\r
118 #define SLMP_COMMAND_EXTEND_UNIT_READ                                           (0x0601)\r
119 #define SLMP_COMMAND_EXTEND_UNIT_WRITE                                          (0x1601)\r
120 \r
121 /* RemoteControl */\r
122 #define SLMP_COMMAND_REMOTE_RUN                                                         (0x1001)\r
123 #define SLMP_COMMAND_REMOTE_STOP                                                        (0x1002)\r
124 #define SLMP_COMMAND_REMOTE_PAUSE                                                       (0x1003)\r
125 #define SLMP_COMMAND_REMOTE_LATCH_CLEAR                                         (0x1005)\r
126 #define SLMP_COMMAND_REMOTE_RESET                                                       (0x1006)\r
127 #define SLMP_COMMAND_REMOTE_READ_TYPE_NAME                                      (0x0101)\r
128 \r
129 /* Drive */\r
130 #define SLMP_COMMAND_DRIVE_READ_DISK_STATE                                      (0x0205)\r
131 #define SLMP_COMMAND_DRIVE_DEFRAG                                                       (0x1207)\r
132 \r
133 /* FILE */\r
134 #define SLMP_COMMAND_FILE_READ_FILE_INFO                                        (0x0201)\r
135 #define SLMP_COMMAND_FILE_READ_FILE_INFO_DETAIL                         (0x0202)\r
136 #define SLMP_COMMAND_FILE_READ_FILE_INFO_FILE_NUMBER_USAGE      (0x0204)\r
137 #define SLMP_COMMAND_FILE_CHANGE_FILE_INFO                                      (0x1204)\r
138 #define SLMP_COMMAND_FILE_SEARCH                                                        (0x0203)\r
139 #define SLMP_COMMAND_FILE_READ_ACCESS_TYPE_A                            (0x0206)\r
140 #define SLMP_COMMAND_FILE_WRITE_ACCESS_TYPE_A                           (0x1203)\r
141 #define SLMP_COMMAND_FILE_LOCK_CONTROL                                          (0x0808)\r
142 #define SLMP_COMMAND_FILE_COPY_ACCESS_TYPE_A                            (0x1206)\r
143 #define SLMP_COMMAND_FILE_COPY_ACCESS_TYPE_B                            (0x1824)\r
144 #define SLMP_COMMAND_FILE_DELETE_ACCESS_TYPE_A                          (0x1205)\r
145 #define SLMP_COMMAND_FILE_DELETE_ACCESS_TYPE_B                          (0x1822)\r
146 #define SLMP_COMMAND_FILE_READ_DEIRECTORY_FILE                          (0x1810)\r
147 #define SLMP_COMMAND_FILE_SEARCH_DIRECTORY_FILE                         (0x1811)\r
148 #define SLMP_COMMAND_FILE_CREATE_NEW_FILE_ACCESS_TYPE_A         (0x1202)\r
149 #define SLMP_COMMAND_FILE_CREATE_NEW_FILE_ACCESS_TYPE_B         (0x1820)\r
150 #define SLMP_COMMAND_FILE_CHANGE_FILE_STATE                                     (0x1825)\r
151 #define SLMP_COMMAND_FILE_CHANGE_FILE_DATE                                      (0x1826)\r
152 #define SLMP_COMMAND_FILE_OPEN_FILE                                                     (0x1827)\r
153 #define SLMP_COMMAND_FILE_READ_ACCESS_TYPE_B                            (0x1828)\r
154 #define SLMP_COMMAND_FILE_WRITE_ACCESS_TYPE_B                           (0x1829)\r
155 #define SLMP_COMMAND_FILE_CLOSE_FILE                                            (0x182A)\r
156 \r
157 /* TEST */\r
158 #define SLMP_COMMAND_SELF_TEST                                                          (0x0619)\r
159 \r
160 /* CLEAR ERROR */\r
161 #define SLMP_COMMAND_CLEAR_ERROR_CODE                                           (0x1617)\r
162 \r
163 /* REMOTE PASSWORD */\r
164 #define SLMP_COMMAND_PASSWORD_LOCK                                                      (0x1630)\r
165 #define SLMP_COMMAND_PASSWORD_UNLOCK                                            (0x1631)\r
166 \r
167 /* ONDEMAND */\r
168 #define SLMP_COMMAND_ONDEMAND                                                           (0x2101)\r
169 \r
170 /* NODE CONNECT */\r
171 #define SLMP_COMMAND_NODE_SEARCH                                                        (0x0E30)\r
172 #define SLMP_COMMAND_IP_ADDRESS_SET                                                     (0x0E31)\r
173 \r
174 /* PARAMETER SETTING */\r
175 #define SLMP_COMMAND_DEVICE_INFO_COMPARE                                        (0x0E32)\r
176 #define SLMP_COMMAND_PARAMETER_GET                                                      (0x0E33)\r
177 #define SLMP_COMMAND_PARAMETER_SET                                                      (0x0E34)\r
178 #define SLMP_COMMAND_PARAMETER_SET_START                                        (0x0E35)\r
179 #define SLMP_COMMAND_PARAMETER_SET_END                                          (0x0E36)\r
180 #define SLMP_COMMAND_PARAMETER_SET_CANCEL                                       (0x0E3A)\r
181 \r
182 /* NODE MONITORING */\r
183 #define SLMP_COMMAND_STATUS_READ                                                        (0x0E44)\r
184 #define SLMP_COMMAND_COMMUNICATION_SETTING_GET                          (0x0E45)\r
185 #define SLMP_COMMAND_STATUS_READ2                                                       (0x0E53)\r
186 \r
187 /* CCIEF-BASIC */\r
188 #define SLMP_COMMAND_CYCLIC_DATA                                                        (0x0E70)\r
189 \r
190 /*[ Definition of Processor Number ]*/\r
191 #define SLMP_CPU_ACTIVE                                                                         (0x03D0)\r
192 #define SLMP_CPU_STANDBY                                                                        (0x03D1)\r
193 #define SLMP_CPU_TYPE_A                                                                         (0x03D2)\r
194 #define SLMP_CPU_TYPE_B                                                                         (0x03D3)\r
195 #define SLMP_CPU_1                                                                                      (0x03E0)\r
196 #define SLMP_CPU_2                                                                                      (0x03E1)\r
197 #define SLMP_CPU_3                                                                                      (0x03E2)\r
198 #define SLMP_CPU_4                                                                                      (0x03E3)\r
199 #define SLMP_CPU_DEFAULT                                                                        (0x03FF)\r
200 \r
201 /*[ Definition of Timer Value ]*/\r
202 #define SLMP_TIMER_WAIT_FOREVER                                                         (0x0000)\r
203 \r
204 /*[ Definition of SLMP Error Codes ]*/\r
205 #define SLMP_ERR_COMMAND_SUBCOMMAND                                                     (0xC059)\r
206 #define SLMP_ERR_WRONG_DATA                                                                     (0xC05C)\r
207 #define SLMP_ERR_DATA_LENGTH                                                            (0xC061)\r
208 #define SLMP_ERR_UNDER_EXECUTION                                                        (0xCEE0)\r
209 #define SLMP_ERR_REQ_DATA_SIZE                                                          (0xCEE1)\r
210 #define SLMP_ERR_RES_DATA_SIZE                                                          (0xCEE2)\r
211 #define SLMP_ERR_NO_EXIST_SERVER_NO                                                     (0xCF10)\r
212 #define SLMP_ERR_CAN_NOT_COMMUNICATION_SETTING                          (0xCF20)\r
213 #define SLMP_ERR_NO_EXIST_PARAM_ID                                                      (0xCF30)\r
214 #define SLMP_ERR_CAN_NOT_PARAMETER_SET                                          (0xCF31)\r
215 \r
216 /*[ Definition for CCIEF-BASIC End Code ]*/\r
217 #define SLMP_END_DUPLICATE_MASTER                                                       (0xCFE0)\r
218 #define SLMP_END_INVALID_NUMBER_OF_OCCUPIED_STATIONS            (0xCFE1)\r
219 #define SLMP_END_SLAVE                                                                          (0xCFF0)\r
220 #define SLMP_END_DISCONNECTED_REQUEST                                           (0xCFFF)\r
221 \r
222 /*[ Definition of value ]*/\r
223 #define SLMP_ERR_OK             0\r
224 #define SLMP_ERR_NG             (-1)\r
225 #ifndef NULL\r
226 #define NULL                    0\r
227 #endif\r
228 \r
229 /*[ Definition of mask value ]*/\r
230 #define MASK_UPPER4BIT          (0xF0)\r
231 #define MASK_LOWER4BIT          (0x0F)\r
232 \r
233 /*[ Definition of bit operation ]*/\r
234 #define SHIFT_R24(a)                    ((uint8_t)(((a) >> 24) & 0xFF ))\r
235 #define SHIFT_R20(a)                    ((uint8_t)(((a) >> 20) & 0xFF ))\r
236 #define SHIFT_R16(a)                    ((uint8_t)(((a) >> 16) & 0xFF ))\r
237 #define SHIFT_R12(a)                    ((uint8_t)(((a) >> 12) & 0xFF ))\r
238 #define SHIFT_R8(a)                             ((uint8_t)(((a) >>  8) & 0xFF ))\r
239 #define SHIFT_R7(a)                             ((uint8_t)(((a) >>  7) & 0xFF ))\r
240 #define SHIFT_R6(a)                             ((uint8_t)(((a) >>  6) & 0xFF ))\r
241 #define SHIFT_R5(a)                             ((uint8_t)(((a) >>  5) & 0xFF ))\r
242 #define SHIFT_R4(a)                             ((uint8_t)(((a) >>  4) & 0xFF ))\r
243 #define SHIFT_R3(a)                             ((uint8_t)(((a) >>  3) & 0xFF ))\r
244 #define SHIFT_R2(a)                             ((uint8_t)(((a) >>  2) & 0xFF ))\r
245 #define SHIFT_R1(a)                             ((uint8_t)(((a) >>  1) & 0xFF ))\r
246 #define SHIFT_R0(a)                             ((uint8_t)(((a)      ) & 0xFF ))\r
247 \r
248 #define SHIFT_L0(a)                             ((uint8_t) (((a)      ) & 0xFF ))\r
249 #define SHIFT_L1(a)                             ((uint8_t) (((a) <<  1) & 0xFF ))\r
250 #define SHIFT_L2(a)                             ((uint8_t) (((a) <<  2) & 0xFF ))\r
251 #define SHIFT_L3(a)                             ((uint8_t) (((a) <<  3) & 0xFF ))\r
252 #define SHIFT_L4(a)                             ((uint8_t) (((a) <<  4) & 0xFF ))\r
253 #define SHIFT_L5(a)                             ((uint8_t) (((a) <<  5) & 0xFF ))\r
254 #define SHIFT_L6(a)                             ((uint8_t) (((a) <<  6) & 0xFF ))\r
255 #define SHIFT_L7(a)                             ((uint8_t) (((a) <<  7) & 0xFF ))\r
256 #define SHIFT_L8(a)                             ((uint16_t)(((a) <<  8) & 0xFFFF))\r
257 #define SHIFT_L16(a)                    ((uint32_t)( (a) << 16))\r
258 #define SHIFT_L24(a)                    ((uint32_t)( (a) << 24))\r
259 \r
260 #define CONCAT_2ASCII(a, b)                             (((uint16_t)(a) <<  4) | (b))\r
261 #define CONCAT_4ASCII(a, b, c, d)               (((uint16_t)(a) << 12) | ((uint16_t)(b) <<  8) | ((uint16_t)(c) << 4) | (d))\r
262 #define CONCAT_6ASCII(a, b, c, d, e, f) (((uint16_t)(a) << 20) | ((uint16_t)(b) << 16) | ((uint16_t)(c) << 12) |\\r
263                                                                                  ((uint16_t)(d) <<  8) | ((uint16_t)(e) <<  4) | (f))\r
264 #define CONCAT_8ASCII(a, b, c, d, e, f, g, h)   (((uint16_t)(a) << 28) | ((uint16_t)(b) << 24) | ((uint16_t)(c) << 20) |\\r
265                                                                                                  ((uint16_t)(d) << 16) | ((uint16_t)(e) << 12) | ((uint16_t)(f) << 8) |\\r
266                                                                                                  ((uint16_t)(g) << 4) | (h))\r
267 #define CONCAT_2BIN(a, b)                       (((uint16_t)(a) <<  8) | (b))\r
268 #define CONCAT_3BIN(a, b, c)            (((uint16_t)(a) << 16) | ((uint16_t)(b) << 8) | (c))\r
269 #define CONCAT_4BIN(a, b, c, d)         (((uint32_t) (a) << 24) | ((uint32_t)(b) << 16) | ((uint32_t)(c) << 8) | (d))\r
270 \r
271 #define BIT_GET(a, b)                           (((((uint8_t*)a)[(b)/8]) >> ((b)%8)) & 0x01)\r
272 #define BIT_SET(a, b, c)                        ((((c) & 0x01) == 0x01) ? ((((uint8_t*)a)[(b)/8]) |= (0x01 << ((b)%8))) : \\r
273                                                                         ((((uint8_t*)a)[(b)/8]) &= ~(0x01 << ((b)%8))))\r
274 \r
275 \r
276 /*[ Definition of Public API ]*/\r
277 int SLMP_MakePacketStream ( uint32_t ulFrameType, const SLMP_INFO *p, uint8_t *pucStream );\r
278 int SLMP_GetSlmpInfo ( SLMP_INFO *p, const uint8_t *pucStream );\r
279 int SLMP_MakeErrorData ( const SLMP_INFO *p, uint8_t *pucStream, uint16_t *pusDataSize );\r
280 uint8_t local_itoa( uint8_t ucInt );\r
281 uint8_t local_atoi( uint8_t ucInt );\r
282 \r
283 #ifdef __cplusplus\r
284 }\r
285 #endif\r
286 \r
287 #endif\r
288 /*EOF*/\r