Implement handling of GPIO, I2C, Routes
[apps/agl-service-unicens.git] / ucs2-interface / ucs_config.h
1 /*------------------------------------------------------------------------------------------------*/
2 /* Unicens Integration Helper Component                                                           */
3 /* Copyright 2017, Microchip Technology Inc. and its subsidiaries.                                */
4 /*                                                                                                */
5 /* Redistribution and use in source and binary forms, with or without                             */
6 /* modification, are permitted provided that the following conditions are met:                    */
7 /*                                                                                                */
8 /* 1. Redistributions of source code must retain the above copyright notice, this                 */
9 /*    list of conditions and the following disclaimer.                                            */
10 /*                                                                                                */
11 /* 2. Redistributions in binary form must reproduce the above copyright notice,                   */
12 /*    this list of conditions and the following disclaimer in the documentation                   */
13 /*    and/or other materials provided with the distribution.                                      */
14 /*                                                                                                */
15 /* 3. Neither the name of the copyright holder nor the names of its                               */
16 /*    contributors may be used to endorse or promote products derived from                        */
17 /*    this software without specific prior written permission.                                    */
18 /*                                                                                                */
19 /* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"                    */
20 /* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE                      */
21 /* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE                 */
22 /* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE                   */
23 /* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL                     */
24 /* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR                     */
25 /* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER                     */
26 /* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,                  */
27 /* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE                  */
28 /* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.                           */
29 /*------------------------------------------------------------------------------------------------*/
30 #ifndef UNICENSINTEGRATION_H_
31 #define UNICENSINTEGRATION_H_
32
33 /*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/
34 /*                  USER ADJUSTABLE VALUES                              */
35 /*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/
36
37 #define ENABLE_INIC_WATCHDOG    (true)
38 #define ENABLE_AMS_LIB          (true)
39 #define DEBUG_XRM
40 #define BOARD_PMS_TX_SIZE       (72)
41 #define CMD_QUEUE_LEN           (6)
42 #define I2C_WRITE_MAX_LEN       (32)
43
44 #include <string.h>
45 #include <stdarg.h>
46
47 #include "ucs_cfg.h"
48 #include "ucs_api.h"
49
50 /*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/
51 /*                          PRIVATE SECTION                             */
52 /*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/
53
54 /**
55  * \brief Internal enum for Unicens Integration
56  */
57 typedef enum
58 {
59     /**Result is OK and the processing is finished. Safe to dequeue this command.*/
60     UniCmdResult_OK_ProcessFinished,
61     /**Result is OK but the processing is ongoing. Must wait for callback.*/
62     UniCmdResult_OK_NeedToWaitForCB,
63     /**Result is error and the processing is finished. Safe to dequeue this command.*/
64     UniCmdResult_ERROR_ProcessFinished
65 } UnicensCmdResult_t;
66
67 /**
68  * \brief Internal enum for Unicens Integration
69  */
70 typedef enum
71 {
72     UnicensCmd_Unknown,
73     UnicensCmd_Init,
74     UnicensCmd_Stop,
75     UnicensCmd_RmSetRoute,
76     UnicensCmd_NsRun,
77     UnicensCmd_GpioCreatePort,
78     UnicensCmd_GpioWritePort,
79     UnicensCmd_I2CWrite
80 } UnicensCmd_t;
81
82 /**
83  * \brief Internal struct for Unicens Integration
84  */
85 typedef struct
86 {
87     const Ucs_InitData_t *init_ptr;
88 } UnicensCmdInit_t;
89
90 /**
91  * \brief Internal struct for Unicens Integration
92  */
93 typedef struct
94 {
95     Ucs_Rm_Route_t *routePtr;
96     bool isActive;
97 } UnicensCmdRmSetRoute_t;
98
99 /**
100  * \brief Internal struct for Unicens Integration
101  */
102 typedef struct
103 {
104     Ucs_Rm_Node_t * node_ptr;
105 } UnicensCmdNsRun_t;
106
107 /**
108  * \brief Internal struct for Unicens Integration
109  */
110 typedef struct
111 {
112     uint16_t destination;
113     uint16_t debounceTime;
114 } UnicensCmdGpioCreatePort_t;
115
116 /**
117  * \brief Internal struct for Unicens Integration
118  */
119 typedef struct
120 {
121     uint16_t destination;
122     uint16_t mask;
123     uint16_t data;
124 } UnicensCmdGpioWritePort_t;
125
126 /**
127  * \brief Internal struct for Unicens Integration
128  */
129 typedef struct
130 {
131     uint16_t destination;
132     bool isBurst;
133     uint8_t blockCount;
134     uint8_t slaveAddr;
135     uint16_t timeout;
136     uint8_t dataLen;
137     uint8_t data[I2C_WRITE_MAX_LEN];
138 } UnicensCmdI2CWrite_t;
139
140 /**
141  * \brief Internal struct for Unicens Integration
142  */
143 typedef struct
144 {
145     UnicensCmd_t cmd;
146     union
147     {
148         UnicensCmdInit_t Init;
149         UnicensCmdRmSetRoute_t RmSetRoute;
150         UnicensCmdNsRun_t NsRun;
151         UnicensCmdGpioCreatePort_t GpioCreatePort;
152         UnicensCmdGpioWritePort_t GpioWritePort;
153         UnicensCmdI2CWrite_t I2CWrite;
154     } val;
155 } UnicensCmdEntry_t;
156
157 /**
158  * \brief Internal variables for one instance of Unicens Integration
159  * \note Never touch any of this fields!
160  */
161 typedef struct {
162     volatile uint8_t *dataQueue;
163     volatile uint8_t *pRx;
164     volatile uint8_t *pTx;
165     volatile uint32_t amountOfEntries;
166     volatile uint32_t sizeOfEntry;
167     volatile uint32_t rxPos;
168     volatile uint32_t txPos;
169 } RB_t;
170
171 /**
172  * \brief Internal variables for one instance of Unicens Integration
173  * \note Allocate this structure for each instance (static or malloc)
174  *        and pass it to UCSI_Init()
175  * \note Never touch any of this fields!
176  */
177 typedef struct
178 {
179     uint32_t magic;
180     void *tag;
181     bool initialized;
182     RB_t rb;
183     uint8_t rbBuf[(CMD_QUEUE_LEN * sizeof(UnicensCmdEntry_t))];
184     Ucs_Inst_t *unicens;
185     Ucs_InitData_t uniInitData;
186     bool triggerService;
187     Ucs_Lld_Api_t *uniLld;
188     void *uniLldHPtr;
189     UnicensCmdEntry_t *currentCmd;
190 } UCSI_Data_t;
191
192 #endif /* UNICENSINTEGRATION_H_ */