FreeCalypso > hg > fc-tourmaline
comparison src/cs/services/lls/lls_functions.c @ 0:4e78acac3d88
src/{condat,cs,gpf,nucleus}: import from Selenite
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Fri, 16 Oct 2020 06:23:26 +0000 |
parents | |
children | 5bf097aeaad7 |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:4e78acac3d88 |
---|---|
1 /** | |
2 * @file lls_functions.c | |
3 * | |
4 * Implementation of LLS functions. | |
5 * | |
6 * @author Laurent Sollier (l-sollier@ti.com) | |
7 * @version 0.1 | |
8 */ | |
9 | |
10 /* | |
11 * History: | |
12 * | |
13 * Date Author Modification | |
14 * ---------------------------------------- | |
15 * 03/12/2002 L Sollier Create | |
16 * | |
17 * | |
18 * (C) Copyright 2002 by Texas Instruments Incorporated, All Rights Reserved | |
19 */ | |
20 | |
21 #ifndef _WINDOWS | |
22 #include "l1sw.cfg" | |
23 #include "chipset.cfg" | |
24 #endif | |
25 | |
26 #include "lls/lls_i.h" | |
27 #include "lls/lls_api.h" | |
28 | |
29 #include "spi/spi_api.h" | |
30 #include "rvf/rvf_api.h" | |
31 | |
32 | |
33 /* Number of available equipment's */ | |
34 #define NUMBER_OF_EQUIPMENT 3 | |
35 | |
36 /* Parameters for each EQUIPMENT */ | |
37 typedef struct | |
38 { | |
39 T_LLS_EQUIPMENT equipment_sort; | |
40 UINT16 page; | |
41 UINT16 address; | |
42 UINT8 bit; | |
43 } T_EQUIPMENT_PARAM; | |
44 | |
45 /* Table of parameters for all the equipment's */ | |
46 typedef T_EQUIPMENT_PARAM T_EQUIPMENT_PARAM_TABLE[NUMBER_OF_EQUIPMENT]; | |
47 | |
48 /* Definition of the parameters for the equipment */ | |
49 #if (ANLG_FAM == 2) | |
50 static T_EQUIPMENT_PARAM_TABLE equipment_param_table = | |
51 { {LLS_LED_A, PAGE1, AUXLED, 0}, | |
52 {LLS_BACKLIGHT, PAGE1, AUXLED, 1}, | |
53 {LLS_PRECHARGE_LED, PAGE0, BCICTL2, 5} | |
54 }; | |
55 #else | |
56 static T_EQUIPMENT_PARAM_TABLE equipment_param_table = {0}; | |
57 #endif | |
58 | |
59 /* Save of the action to perform */ | |
60 typedef struct | |
61 { | |
62 T_LLS_EQUIPMENT equipment_index; | |
63 UINT8 action; | |
64 } T_ACTION; | |
65 | |
66 static T_ACTION action_to_perform = {0}; | |
67 | |
68 /* Mutex used to protect perform only one action simultaneously */ | |
69 static T_RVF_MUTEX mutex; | |
70 | |
71 | |
72 /** | |
73 * @name Functions implementation | |
74 * | |
75 */ | |
76 /*@{*/ | |
77 | |
78 /** | |
79 * function: lls_initialize | |
80 */ | |
81 T_RV_RET lls_initialize(void) | |
82 { | |
83 T_RV_RET ret = RV_OK; | |
84 UINT8 i; | |
85 | |
86 /* Mutex initialization */ | |
87 ret = rvf_initialize_mutex(&mutex); | |
88 if (ret != RVF_OK) | |
89 return RV_INTERNAL_ERR; | |
90 | |
91 /* Initialisation of the equipment at SWITCH_OFF */ | |
92 for (i = 0; i < NUMBER_OF_EQUIPMENT; i++) | |
93 { | |
94 ret = lls_switch_off(equipment_param_table[i].equipment_sort); | |
95 if (ret != RV_OK) | |
96 return RV_INTERNAL_ERR; | |
97 } | |
98 | |
99 return RV_OK; | |
100 } | |
101 | |
102 | |
103 /** | |
104 * function: lls_kill_service | |
105 */ | |
106 T_RV_RET lls_kill_service(void) | |
107 { | |
108 T_RV_RET ret = RV_OK; | |
109 ret = rvf_delete_mutex(&mutex); | |
110 if (ret != RVF_OK) | |
111 return RV_INTERNAL_ERR; | |
112 | |
113 return ret; | |
114 } | |
115 | |
116 | |
117 /** | |
118 * function: lls_callback_equipment_status | |
119 */ | |
120 void lls_callback_equipment_status(UINT16* equipment_status) | |
121 { | |
122 T_RV_RET ret = RV_OK; | |
123 UINT16 new_equipment_status = *equipment_status; | |
124 | |
125 LLS_SEND_TRACE_PARAM("LLS: Received equipment status", (UINT32) new_equipment_status, RV_TRACE_LEVEL_DEBUG_LOW); | |
126 | |
127 if (action_to_perform.action == SWITCH_ON) | |
128 new_equipment_status |= 1 << equipment_param_table[action_to_perform.equipment_index].bit; | |
129 else | |
130 new_equipment_status &= ~(1 << equipment_param_table[action_to_perform.equipment_index].bit); | |
131 | |
132 LLS_SEND_TRACE_PARAM("LLS: New equipment status", (UINT32) new_equipment_status, RV_TRACE_LEVEL_DEBUG_LOW); | |
133 | |
134 ret = spi_abb_write(equipment_param_table[action_to_perform.equipment_index].page, | |
135 equipment_param_table[action_to_perform.equipment_index].address, | |
136 new_equipment_status); | |
137 | |
138 if (ret != RV_OK) | |
139 LLS_SEND_TRACE("LLS: Error on SPI read", RV_TRACE_LEVEL_ERROR); | |
140 | |
141 | |
142 rvf_unlock_mutex(&mutex); | |
143 } | |
144 | |
145 /** | |
146 * function: lls_manage_equipment | |
147 */ | |
148 T_RV_RET lls_manage_equipment(UINT8 equipment_index, UINT8 action) | |
149 { | |
150 T_RV_RET ret = RV_OK; | |
151 | |
152 /* Lock mutex until response from SPI is received */ | |
153 rvf_lock_mutex(&mutex); | |
154 | |
155 /* Save action to do */ | |
156 action_to_perform.equipment_index = equipment_index; | |
157 action_to_perform.action = action; | |
158 | |
159 ret = spi_abb_read(equipment_param_table[equipment_index].page, | |
160 equipment_param_table[equipment_index].address, | |
161 lls_callback_equipment_status); | |
162 | |
163 if (ret != RV_OK) | |
164 LLS_SEND_TRACE("LLS: Error on SPI read", RV_TRACE_LEVEL_ERROR); | |
165 | |
166 return ret; | |
167 } | |
168 | |
169 /** | |
170 * function: lls_search_index | |
171 */ | |
172 T_RV_RET lls_search_index(T_LLS_EQUIPMENT equipment, UINT8* equipment_index) | |
173 { | |
174 T_RV_RET ret = RV_OK; | |
175 UINT8 i; | |
176 | |
177 for (i = 0; i < NUMBER_OF_EQUIPMENT; i++) | |
178 if (equipment == equipment_param_table[i].equipment_sort) | |
179 { | |
180 *equipment_index = i; | |
181 return RV_OK; | |
182 } | |
183 | |
184 return RV_INVALID_PARAMETER; | |
185 } | |
186 | |
187 | |
188 | |
189 /*@}*/ |