FreeCalypso > hg > fc-tourmaline
comparison src/cs/drivers/drv_app/kpd/kpd_env.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 |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:4e78acac3d88 |
---|---|
1 /** | |
2 * @file kpd_env.c | |
3 * | |
4 * Coding of the Riviera Generic Functions | |
5 * (except handle message and handle timer). | |
6 * | |
7 * @author Laurent Sollier (l-sollier@ti.com) | |
8 * @version 0.1 | |
9 */ | |
10 | |
11 /* | |
12 * History: | |
13 * | |
14 * Date Author Modification | |
15 * ---------------------------------------- | |
16 * 10/10/2001 L Sollier Create | |
17 * | |
18 * | |
19 * (C) Copyright 2001 by Texas Instruments Incorporated, All Rights Reserved | |
20 */ | |
21 | |
22 | |
23 | |
24 #include "kpd/kpd_env.h" | |
25 #include "kpd/kpd_i.h" | |
26 | |
27 #include "rvm/rvm_priorities.h" | |
28 #include "rvm/rvm_use_id_list.h" | |
29 | |
30 #include <string.h> | |
31 | |
32 | |
33 /* External declaration */ | |
34 extern T_RV_RET kpd_core(void); | |
35 | |
36 | |
37 /** | |
38 * Pointer on the structure gathering all the global variables | |
39 * used by KPD instance. | |
40 */ | |
41 T_KPD_ENV_CTRL_BLK* kpd_env_ctrl_blk = NULL; | |
42 | |
43 | |
44 /** | |
45 * @name Riviera generic functions implementation | |
46 * | |
47 */ | |
48 /*@{*/ | |
49 | |
50 /** | |
51 * function: kpd_get_info | |
52 */ | |
53 T_RVM_RETURN kpd_get_info(T_RVM_INFO_SWE* swe_info) | |
54 { | |
55 /* SWE info */ | |
56 swe_info->swe_type = RVM_SWE_TYPE_4; | |
57 swe_info->type_info.type4.swe_use_id = KPD_USE_ID; | |
58 | |
59 memcpy( swe_info->type_info.type4.swe_name, "KPD", sizeof("KPD") ); | |
60 | |
61 swe_info->type_info.type4.stack_size = KPD_STACK_SIZE; | |
62 swe_info->type_info.type4.priority = RVM_KPD_TASK_PRIORITY; | |
63 | |
64 | |
65 /* Set the return path */ | |
66 swe_info->type_info.type4.return_path.callback_func = NULL; | |
67 swe_info->type_info.type4.return_path.addr_id = 0; | |
68 | |
69 | |
70 /* memory bank info */ | |
71 swe_info->type_info.type4.nb_mem_bank = 1; | |
72 | |
73 memcpy ((UINT8 *) swe_info->type_info.type4.mem_bank[0].bank_name, "KPD_PRIM", 9); | |
74 swe_info->type_info.type4.mem_bank[0].initial_params.size = KPD_MB_PRIM_SIZE; | |
75 swe_info->type_info.type4.mem_bank[0].initial_params.watermark = KPD_MB_PRIM_WATERMARK; | |
76 | |
77 /* linked SWE info */ | |
78 /* this SWE does not require any SWE to run */ | |
79 swe_info->type_info.type4.nb_linked_swe = 0; | |
80 | |
81 /* generic functions */ | |
82 swe_info->type_info.type4.set_info = kpd_set_info; | |
83 swe_info->type_info.type4.init = kpd_init; | |
84 swe_info->type_info.type4.core = kpd_core; | |
85 swe_info->type_info.type4.stop = kpd_stop; | |
86 swe_info->type_info.type4.kill = kpd_kill; | |
87 | |
88 return RVM_OK; | |
89 | |
90 } | |
91 | |
92 | |
93 /** | |
94 * function: kpd_set_info | |
95 */ | |
96 T_RVM_RETURN kpd_set_info (T_RVF_ADDR_ID addr_id, | |
97 T_RV_RETURN return_path[], | |
98 T_RVF_MB_ID bk_id[], | |
99 T_RVM_RETURN (*rvm_error_ft)(T_RVM_NAME swe_name, | |
100 T_RVM_RETURN error_cause, | |
101 T_RVM_ERROR_TYPE error_type, | |
102 T_RVM_STRING error_msg)) | |
103 { | |
104 /* Create instance gathering all the variable used by EXPL instance */ | |
105 if (rvf_get_buf(bk_id[0], | |
106 sizeof(T_KPD_ENV_CTRL_BLK), | |
107 (T_RVF_BUFFER**)&kpd_env_ctrl_blk) != RVF_GREEN) | |
108 { | |
109 /* The environemnt will cancel the EXPL instance creation. */ | |
110 return RVM_MEMORY_ERR; | |
111 } | |
112 | |
113 /* Store the pointer to the error function */ | |
114 kpd_env_ctrl_blk->error_ft = rvm_error_ft ; | |
115 /* Store the mem bank id. */ | |
116 kpd_env_ctrl_blk->prim_id = bk_id[0]; | |
117 /* Store the address id */ | |
118 kpd_env_ctrl_blk->addr_id = addr_id; | |
119 kpd_env_ctrl_blk->swe_is_initialized = FALSE; | |
120 | |
121 | |
122 /* return_path of linked SWE -> not used */ | |
123 | |
124 return RVM_OK; | |
125 } | |
126 | |
127 | |
128 /** | |
129 * function: kpd_init | |
130 */ | |
131 T_RVM_RETURN kpd_init(void) | |
132 { | |
133 T_RV_RET ret = RV_OK; | |
134 | |
135 /* Initialise keypad driver */ | |
136 ret = kpd_initialize_keypad_driver(); | |
137 | |
138 /* Note that the (kpd_env_ctrl_blk != 0) check is normally | |
139 useless because if kpd_set_info fail, kpd_init will not | |
140 be called */ | |
141 if ( (ret == RV_OK) && (kpd_env_ctrl_blk != 0)) | |
142 { | |
143 kpd_env_ctrl_blk->swe_is_initialized = TRUE; | |
144 } | |
145 | |
146 return ret; | |
147 } | |
148 | |
149 | |
150 /** | |
151 * function: kpd_stop | |
152 */ | |
153 T_RVM_RETURN kpd_stop(void) | |
154 { | |
155 /* NB: Other SWEs have not been killed yet, kpd can send messages to other SWEs. */ | |
156 | |
157 return RVM_OK; | |
158 } | |
159 | |
160 | |
161 /** | |
162 * function: kpd_kill | |
163 */ | |
164 T_RVM_RETURN kpd_kill (void) | |
165 { | |
166 /* | |
167 * DO NOT SEND MESSAGES | |
168 */ | |
169 rvf_free_buf(kpd_env_ctrl_blk); | |
170 | |
171 kpd_kill_keypad_driver(); | |
172 | |
173 return RVM_OK; | |
174 } | |
175 | |
176 | |
177 /*@}*/ |