]> rtime.felk.cvut.cz Git - arc.git/blob - boards/mpc5516it/examples/mem_nvm_fee/Nvm_App.c
Nvm/Fee: now uses SchM
[arc.git] / boards / mpc5516it / examples / mem_nvm_fee / Nvm_App.c
1 /* -------------------------------- Arctic Core ------------------------------\r
2  * Arctic Core - the open source AUTOSAR platform http://arccore.com\r
3  *\r
4  * Copyright (C) 2009  ArcCore AB <contact@arccore.com>\r
5  *\r
6  * This source code is free software; you can redistribute it and/or modify it\r
7  * under the terms of the GNU General Public License version 2 as published by the\r
8  * Free Software Foundation; See <http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt>.\r
9  *\r
10  * This program is distributed in the hope that it will be useful, but\r
11  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\r
12  * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License\r
13  * for more details.\r
14  * -------------------------------- Arctic Core ------------------------------*/\r
15 \r
16 /*\r
17  * EXAMPLE\r
18  *   Just a simple example that uses the NvM API's.\r
19  *\r
20  */\r
21 \r
22 \r
23 \r
24 /* ----------------------------[includes]------------------------------------*/\r
25 #include "Std_Types.h"\r
26 #include "Os.h"\r
27 #include "Det.h"\r
28 #include "stdio.h"\r
29 #include "NvM.h"\r
30 #include "NvM_Cbk.h"\r
31 #include "MemIf.h"\r
32 #include <string.h>\r
33 #include <assert.h>\r
34 \r
35 /* ----------------------------[private define]------------------------------*/\r
36 \r
37 /* STD_ON  - Block_2_Native will be written. Block_2_Native will only\r
38  *           be called once.\r
39  * STD_OFF - Block_2_Native's will be called at every startup since no\r
40  *           data is ever written to the block\r
41  */\r
42 #define WRITE_BLOCK_2           STD_OFF\r
43 \r
44 /* ----------------------------[private macro]-------------------------------*/\r
45 \r
46 #define PATTERN_FILL(_block,_st_val) patternFill(_block,sizeof(_block),_st_val)\r
47 #define PATTERN_VERIFY(_block,_st_val) patternVerify(_block,sizeof(_block),_st_val)\r
48 \r
49 #define BUSY_WAIT(_block,_var)  \\r
50         do { \\r
51                 NvM_GetErrorStatus(_block, &_var); \\r
52         } while( _var != NVM_REQ_OK );\r
53 \r
54 \r
55 /* ----------------------------[private typedef]-----------------------------*/\r
56 /* ----------------------------[private function prototypes]-----------------*/\r
57 /* ----------------------------[private variables]---------------------------*/\r
58 \r
59 \r
60 uint8 TEST_RamBlock_Dataset_0[20];\r
61 uint8 TEST_RamBlock_Dataset_1[2];\r
62 uint8 TEST_tmpRam[100];\r
63 \r
64 uint8 Block_2_RamBlock[10];\r
65 \r
66 /* ----------------------------[private functions]---------------------------*/\r
67 \r
68 static void nvmApplication(void);\r
69 \r
70 /**\r
71  * Fill memory with a increasing number starting with startVal\r
72  *\r
73  * @param bPtr\r
74  * @param numBytes\r
75  * @param startVal\r
76  */\r
77 static void patternFill( uint8 *bPtr, uint32 numBytes, uint8 startVal )\r
78 {\r
79         int i;\r
80         for(i=0;i< numBytes; i++) {\r
81                 bPtr[i] = startVal++;\r
82         }\r
83 }\r
84 \r
85 /**\r
86  * Verify a pattern filled by patternFill.\r
87  *\r
88  * @param bPtr\r
89  * @param numBytes\r
90  * @param startVal\r
91  * @return\r
92  */\r
93 static int patternVerify( uint8 *bPtr, uint32 numBytes, uint8 startVal )\r
94 {\r
95         int i;\r
96         for(i=0;i< numBytes; i++, startVal++) {\r
97                 if( bPtr[i] != startVal ) {\r
98                         return 1;\r
99                 }\r
100         }\r
101 \r
102         return 0;\r
103 }\r
104 \r
105 \r
106 /* ----------------------------[public functions]----------------------------*/\r
107 \r
108 void MultiBlock_Callback(uint8 ServiceId, NvM_RequestResultType JobResult) {\r
109 \r
110 }\r
111 \r
112 /*\r
113  * Block_1_DataSet\r
114  */\r
115 \r
116 void Block_Dataset_SingleCallback( void ) {\r
117 }\r
118 \r
119 /*\r
120  * Block_2_Native\r
121  */\r
122 \r
123 void Block_2_InitCallback( void ) {\r
124         PATTERN_FILL(Block_2_RamBlock,10);\r
125 }\r
126 \r
127 \r
128 /*\r
129  * The application task\r
130  */\r
131 TASK(Application) {\r
132         for(;;) {\r
133                 nvmApplication();\r
134         }\r
135 }\r
136 \r
137 /**\r
138  *\r
139  */\r
140 static void nvmApplication(void) {\r
141         NvM_RequestResultType errorStatus;\r
142         Std_ReturnType rv;\r
143         int currBlock;\r
144         static int counter = 0;\r
145 \r
146         /* Verify that a block read during NvM_ReadAll() is there */\r
147         rv = PATTERN_VERIFY(Block_2_RamBlock,10);\r
148         assert(rv == 0);\r
149 \r
150         currBlock = NVM_Block_1_Dataset_HANDLE;\r
151 \r
152         /*\r
153          * Write some pattern to Dataset 0\r
154          */\r
155         PATTERN_FILL(TEST_RamBlock_Dataset_0,0);\r
156         NvM_WriteBlock(currBlock,TEST_RamBlock_Dataset_0);\r
157         BUSY_WAIT(currBlock,&errorStatus);\r
158 \r
159         memset(TEST_RamBlock_Dataset_0,0,sizeof(TEST_RamBlock_Dataset_0));\r
160         NvM_ReadBlock(currBlock,TEST_RamBlock_Dataset_0);\r
161         BUSY_WAIT(currBlock,&errorStatus);\r
162 \r
163         rv = PATTERN_VERIFY(TEST_RamBlock_Dataset_0,0);\r
164         assert(rv == 0);\r
165 \r
166         /*\r
167          * Write some pattern to Dataset 1\r
168          */\r
169         rv = NvM_SetDataIndex(currBlock,1);\r
170         assert( rv == E_OK );\r
171         BUSY_WAIT(currBlock,&errorStatus);\r
172 \r
173         PATTERN_FILL(TEST_RamBlock_Dataset_0,5);\r
174         NvM_WriteBlock(currBlock,TEST_RamBlock_Dataset_0);\r
175         BUSY_WAIT(currBlock,&errorStatus);\r
176 \r
177         memset(TEST_RamBlock_Dataset_0,0,sizeof(TEST_RamBlock_Dataset_0));\r
178         NvM_ReadBlock(currBlock,TEST_RamBlock_Dataset_0);\r
179         BUSY_WAIT(currBlock,&errorStatus);\r
180 \r
181         rv = PATTERN_VERIFY(TEST_RamBlock_Dataset_0,5);\r
182         assert(rv == 0);\r
183 \r
184 \r
185         /*\r
186          * Back to Dataset 0 and check data.\r
187          */\r
188         NvM_SetDataIndex(currBlock,0);\r
189         assert( rv == E_OK );\r
190         BUSY_WAIT(currBlock,&errorStatus);\r
191 \r
192         NvM_ReadBlock(currBlock,TEST_RamBlock_Dataset_0);\r
193         BUSY_WAIT(currBlock,&errorStatus);\r
194 \r
195         rv = PATTERN_VERIFY(TEST_RamBlock_Dataset_0,0);\r
196         assert(rv == 0);\r
197 \r
198 \r
199 #if (WRITE_BLOCK_2 == STD_ON)\r
200 \r
201         currBlock = NVM_Block_2_Native_HANDLE;\r
202 \r
203         rv = NvM_WriteBlock(currBlock,NULL);\r
204         assert( rv == E_OK );\r
205 \r
206         do {\r
207                 NvM_GetErrorStatus(currBlock, &errorStatus);\r
208         } while( errorStatus != NVM_REQ_OK );\r
209 \r
210 #endif\r
211 \r
212 }\r
213 \r
214 \r