LibDriver AS608
Loading...
Searching...
No Matches
driver_as608_register_test.c
Go to the documentation of this file.
1
36
38#include <stdlib.h>
39
40static as608_handle_t gs_handle;
41static uint8_t gs_output_buffer[512];
42
51uint8_t as608_register_test(uint32_t addr)
52{
53 uint8_t res;
54 uint16_t i;
55 uint16_t j;
56 uint16_t output_len;
57 uint32_t randn;
58 uint8_t data[32];
59 uint8_t data_check[32];
60 as608_info_t info;
61 as608_status_t status;
62 as608_params_t param;
63 as608_gpio_level_t output_level;
64
65 /* link interface function */
74
75 /* get as608 information */
76 res = as608_info(&info);
77 if (res != 0)
78 {
79 as608_interface_debug_print("as608: get info failed.\n");
80
81 return 1;
82 }
83 else
84 {
85 /* print chip information */
86 as608_interface_debug_print("as608: chip is %s.\n", info.chip_name);
87 as608_interface_debug_print("as608: manufacturer is %s.\n", info.manufacturer_name);
88 as608_interface_debug_print("as608: interface is %s.\n", info.interface);
89 as608_interface_debug_print("as608: driver version is %d.%d.\n", info.driver_version / 1000, (info.driver_version % 1000) / 100);
90 as608_interface_debug_print("as608: min supply voltage is %0.1fV.\n", info.supply_voltage_min_v);
91 as608_interface_debug_print("as608: max supply voltage is %0.1fV.\n", info.supply_voltage_max_v);
92 as608_interface_debug_print("as608: max current is %0.2fmA.\n", info.max_current_ma);
93 as608_interface_debug_print("as608: max temperature is %0.1fC.\n", info.temperature_max);
94 as608_interface_debug_print("as608: min temperature is %0.1fC.\n", info.temperature_min);
95 }
96
97 /* start register test */
98 as608_interface_debug_print("as608: start register test.\n");
99
100 /* as608 init */
101 res = as608_init(&gs_handle, addr);
102 if (res != 0)
103 {
104 as608_interface_debug_print("as608: init failed.\n");
105
106 return 1;
107 }
108
109 /* as608_get_last_status test */
110 as608_interface_debug_print("as608: as608_get_last_status test.\n");
111
112 /* get last status */
113 res = as608_get_last_status(&gs_handle, &status);
114 if (res != 0)
115 {
116 as608_interface_debug_print("as608: get last status failed.\n");
117 (void)as608_deinit(&gs_handle);
118
119 return 1;
120 }
121
122 /* output */
123 as608_interface_debug_print("as608: last status is 0x%02X.\n", status);
124
125 /* as608_print_status test */
126 as608_interface_debug_print("as608: as608_print_status test.\n");
127
128 /* print status */
129 res = as608_print_status(&gs_handle, status);
130 if (res != 0)
131 {
132 as608_interface_debug_print("as608: print status failed.\n");
133 (void)as608_deinit(&gs_handle);
134
135 return 1;
136 }
137
138 /* as608_set_baud_rate test */
139 as608_interface_debug_print("as608: as608_set_baud_rate test.\n");
140
141 /* 57600bps */
142 res = as608_set_baud_rate(&gs_handle, addr, 6, &status);
143 if (res != 0)
144 {
145 as608_interface_debug_print("as608: set baud rate failed.\n");
146 (void)as608_deinit(&gs_handle);
147
148 return 1;
149 }
150
151 /* output */
152 as608_interface_debug_print("as608: set baud rate %d.\n", 57600);
153
154 /* as608_set_level test */
155 as608_interface_debug_print("as608: as608_set_level test.\n");
156
157 /* set level 3 */
158 res = as608_set_level(&gs_handle, addr, AS608_LEVEL_3, &status);
159 if (res != 0)
160 {
161 as608_interface_debug_print("as608: set level failed.\n");
162 (void)as608_deinit(&gs_handle);
163
164 return 1;
165 }
166
167 /* output */
168 as608_interface_debug_print("as608: set level 3.\n");
169
170 /* as608_set_packet_size test */
171 as608_interface_debug_print("as608: as608_set_packet_size test.\n");
172
173 /* 128bytes */
174 res = as608_set_packet_size(&gs_handle, addr, AS608_PACKET_SIZE_128_BYTES, &status);
175 if (res != 0)
176 {
177 as608_interface_debug_print("as608: set packet size failed.\n");
178 (void)as608_deinit(&gs_handle);
179
180 return 1;
181 }
182
183 /* output */
184 as608_interface_debug_print("as608: set packet size 128bytes.\n");
185
186 /* as608_get_params test */
187 as608_interface_debug_print("as608: as608_get_params test.\n");
188
189 /* get params */
190 res = as608_get_params(&gs_handle, addr, &param, &status);
191 if (res != 0)
192 {
193 as608_interface_debug_print("as608: get params failed.\n");
194 (void)as608_deinit(&gs_handle);
195
196 return 1;
197 }
198
199 /* output */
200 as608_interface_debug_print("as608: status is 0x%02X.\n", param.status);
201 as608_interface_debug_print("as608: sensor type is 0x%02X.\n", param.sensor_type);
202 as608_interface_debug_print("as608: fingerprint size is %d.\n", param.fingerprint_size);
203 as608_interface_debug_print("as608: level is 0x%02X.\n", param.level);
204 as608_interface_debug_print("as608: address is 0x%04X.\n", param.address);
205 as608_interface_debug_print("as608: packet size is 0x%02X.\n", param.packet_size);
206 as608_interface_debug_print("as608: baud rate is %d.\n", param.n_9600 * 9600);
207
208 /* as608_set_password test */
209 as608_interface_debug_print("as608: as608_set_password test.\n");
210
211 /* 0x00000000 */
212 res = as608_set_password(&gs_handle, addr, 0x00000000, &status);
213 if (res != 0)
214 {
215 as608_interface_debug_print("as608: set password failed.\n");
216 (void)as608_deinit(&gs_handle);
217
218 return 1;
219 }
220
221 /* output */
222 as608_interface_debug_print("as608: set password 0x%08X.\n", 0x00000000);
223
224 /* as608_verify_password test */
225 as608_interface_debug_print("as608: as608_verify_password test.\n");
226
227 /* verify password */
228 res = as608_verify_password(&gs_handle, addr, 0x00000000, &status);
229 if (res != 0)
230 {
231 as608_interface_debug_print("as608: verify password failed.\n");
232 (void)as608_deinit(&gs_handle);
233
234 return 1;
235 }
236
237 /* output */
238 as608_interface_debug_print("as608: verify password %s.\n", status == AS608_STATUS_OK ? "ok" : "error");
239
240 /* as608_get_random test */
241 as608_interface_debug_print("as608: as608_get_random test.\n");
242
243 /* get random */
244 res = as608_get_random(&gs_handle, addr, &randn, &status);
245 if (res != 0)
246 {
247 as608_interface_debug_print("as608: get random failed.\n");
248 (void)as608_deinit(&gs_handle);
249
250 return 1;
251 }
252
253 /* output */
254 as608_interface_debug_print("as608: random is 0x%08X.\n", randn);
255
256 /* as608_set_chip_address test */
257 as608_interface_debug_print("as608: as608_set_chip_address test.\n");
258
259 /* set chip address */
260 res = as608_set_chip_address(&gs_handle, addr, 0xFFFFFFFFU, &status);
261 if (res != 0)
262 {
263 as608_interface_debug_print("as608: set chip address failed.\n");
264 (void)as608_deinit(&gs_handle);
265
266 return 1;
267 }
268
269 /* output */
270 as608_interface_debug_print("as608: set chip address 0x%08X.\n", 0xFFFFFFFFU);
271
272 /* as608_get_flash_information test */
273 as608_interface_debug_print("as608: as608_get_flash_information test.\n");
274
275 /* get flash information */
276 output_len = 512;
277 res = as608_get_flash_information(&gs_handle, addr, gs_output_buffer, &output_len, &status);
278 if (res != 0)
279 {
280 as608_interface_debug_print("as608: get flash information failed.\n");
281 (void)as608_deinit(&gs_handle);
282
283 return 1;
284 }
285
286 /* output */
287 as608_interface_debug_print("as608: flash information is\n");
288 for (i = 0; i < output_len; i++)
289 {
290 as608_interface_debug_print("0x%02X ", gs_output_buffer[i]);
291 }
293
294 /* as608_set_port test */
295 as608_interface_debug_print("as608: as608_set_port test.\n");
296
297 /* enable port */
298 res = as608_set_port(&gs_handle, addr, AS608_BOOL_TRUE, &status);
299 if (res != 0)
300 {
301 as608_interface_debug_print("as608: set port failed.\n");
302 (void)as608_deinit(&gs_handle);
303
304 return 1;
305 }
306
307 /* output */
308 as608_interface_debug_print("as608: enable port.\n");
309
310 /* as608_write_notepad/as608_read_notepad test */
311 as608_interface_debug_print("as608: as608_write_notepad/as608_read_notepad test test.\n");
312
313 for (i = 0; i < 16; i++)
314 {
315 /* random */
316 as608_interface_debug_print("as608: random.\n");
317 for (j = 0; j < 32; j++)
318 {
319 data[j] = rand() % 0xFF;
320 as608_interface_debug_print("0x%02X ", data[j]);
321 }
323
324 /* write notepad */
325 res = as608_write_notepad(&gs_handle, addr, (uint8_t)i, data, &status);
326 if (res != 0)
327 {
328 as608_interface_debug_print("as608: write notepad failed.\n");
329 (void)as608_deinit(&gs_handle);
330
331 return 1;
332 }
333
334 /* read notepad */
335 res = as608_read_notepad(&gs_handle, addr, (uint8_t)i, data_check, &status);
336 if (res != 0)
337 {
338 as608_interface_debug_print("as608: read notepad failed.\n");
339 (void)as608_deinit(&gs_handle);
340
341 return 1;
342 }
343
344 /* output */
345 as608_interface_debug_print("as608: check page number %d %s.\n", i, (memcmp(data, data_check, 32) == 0) ? "ok" : "error");
346 }
347
348 /* as608_set_gpio_level test */
349 as608_interface_debug_print("as608: as608_set_gpio_level test.\n");
350
351 /* set level low */
352 res = as608_set_gpio_level(&gs_handle, addr, AS608_GPIO_NUMBER_0, AS608_GPIO_LEVEL_LOW, &output_level, &status);
353 if (res != 0)
354 {
355 as608_interface_debug_print("as608: set gpio level failed.\n");
356 (void)as608_deinit(&gs_handle);
357
358 return 1;
359 }
360
361 /* output */
362 as608_interface_debug_print("as608: set gpio%d level %s.\n", 0, (output_level == AS608_GPIO_LEVEL_LOW) ? "low" : "high");
363
364 /* set level high */
365 res = as608_set_gpio_level(&gs_handle, addr, AS608_GPIO_NUMBER_0, AS608_GPIO_LEVEL_HIGH, &output_level, &status);
366 if (res != 0)
367 {
368 as608_interface_debug_print("as608: set gpio level failed.\n");
369 (void)as608_deinit(&gs_handle);
370
371 return 1;
372 }
373
374 /* output */
375 as608_interface_debug_print("as608: set gpio%d level %s.\n", 0, (output_level == AS608_GPIO_LEVEL_LOW) ? "low" : "high");
376
377 /* set level low */
378 res = as608_set_gpio_level(&gs_handle, addr, AS608_GPIO_NUMBER_1, AS608_GPIO_LEVEL_LOW, &output_level, &status);
379 if (res != 0)
380 {
381 as608_interface_debug_print("as608: set gpio level failed.\n");
382 (void)as608_deinit(&gs_handle);
383
384 return 1;
385 }
386
387 /* output */
388 as608_interface_debug_print("as608: set gpio%d level %s.\n", 1, (output_level == AS608_GPIO_LEVEL_LOW) ? "low" : "high");
389
390 /* set level high */
391 res = as608_set_gpio_level(&gs_handle, addr, AS608_GPIO_NUMBER_1, AS608_GPIO_LEVEL_HIGH, &output_level, &status);
392 if (res != 0)
393 {
394 as608_interface_debug_print("as608: set gpio level failed.\n");
395 (void)as608_deinit(&gs_handle);
396
397 return 1;
398 }
399
400 /* output */
401 as608_interface_debug_print("as608: set gpio%d level %s.\n", 1, (output_level == AS608_GPIO_LEVEL_LOW) ? "low" : "high");
402
403 /* finish register test */
404 as608_interface_debug_print("as608: finish register test.\n");
405 (void)as608_deinit(&gs_handle);
406
407 return 0;
408}
driver as608 register test header file
uint8_t as608_set_port(as608_handle_t *handle, uint32_t addr, as608_bool_t enable, as608_status_t *status)
enable or disable port
uint8_t as608_set_packet_size(as608_handle_t *handle, uint32_t addr, as608_packet_size_t size, as608_status_t *status)
set packet size
uint8_t as608_get_random(as608_handle_t *handle, uint32_t addr, uint32_t *randn, as608_status_t *status)
get random
struct as608_handle_s as608_handle_t
as608 handle structure definition
uint8_t as608_init(as608_handle_t *handle, uint32_t addr)
initialize the chip
as608_status_t
as608 status enumeration definition
uint8_t as608_info(as608_info_t *info)
get chip's information
uint8_t as608_set_password(as608_handle_t *handle, uint32_t addr, uint32_t password, as608_status_t *status)
set password
uint8_t as608_write_notepad(as608_handle_t *handle, uint32_t addr, uint8_t page_number, uint8_t data[32], as608_status_t *status)
write notepad
struct as608_params_s as608_params_t
as608 params structure definition
uint8_t as608_get_last_status(as608_handle_t *handle, as608_status_t *status)
get the last status
as608_gpio_level_t
as608 gpio level enumeration definition
uint8_t as608_print_status(as608_handle_t *handle, as608_status_t status)
print status
uint8_t as608_get_params(as608_handle_t *handle, uint32_t addr, as608_params_t *param, as608_status_t *status)
get params
uint8_t as608_set_level(as608_handle_t *handle, uint32_t addr, as608_level_t level, as608_status_t *status)
set level
uint8_t as608_set_baud_rate(as608_handle_t *handle, uint32_t addr, uint8_t n_9600, as608_status_t *status)
set baud rate
uint8_t as608_deinit(as608_handle_t *handle)
close the chip
struct as608_info_s as608_info_t
as608 information structure definition
uint8_t as608_set_chip_address(as608_handle_t *handle, uint32_t addr, uint32_t new_addr, as608_status_t *status)
set the chip address
uint8_t as608_read_notepad(as608_handle_t *handle, uint32_t addr, uint8_t page_number, uint8_t data[32], as608_status_t *status)
read notepad
uint8_t as608_set_gpio_level(as608_handle_t *handle, uint32_t addr, as608_gpio_number_t gpio, as608_gpio_level_t input_level, as608_gpio_level_t *output_level, as608_status_t *status)
set gpio level
uint8_t as608_verify_password(as608_handle_t *handle, uint32_t addr, uint32_t password, as608_status_t *status)
verify password
uint8_t as608_get_flash_information(as608_handle_t *handle, uint32_t addr, uint8_t *output_buffer, uint16_t *output_len, as608_status_t *status)
get flash information
@ AS608_STATUS_OK
@ AS608_BOOL_TRUE
@ AS608_GPIO_LEVEL_LOW
@ AS608_GPIO_LEVEL_HIGH
@ AS608_GPIO_NUMBER_0
@ AS608_GPIO_NUMBER_1
@ AS608_PACKET_SIZE_128_BYTES
@ AS608_LEVEL_3
uint8_t as608_interface_uart_init(void)
interface uart init
uint8_t as608_interface_uart_flush(void)
interface uart flush
uint8_t as608_interface_uart_deinit(void)
interface uart deinit
uint16_t as608_interface_uart_read(uint8_t *buf, uint16_t len)
interface uart read
void as608_interface_debug_print(const char *const fmt,...)
interface print format data
uint8_t as608_interface_uart_write(uint8_t *buf, uint16_t len)
interface uart write
void as608_interface_delay_ms(uint32_t ms)
interface delay ms
uint8_t as608_register_test(uint32_t addr)
register test
float temperature_max
float supply_voltage_max_v
uint32_t driver_version
float temperature_min
float max_current_ma
char manufacturer_name[32]
float supply_voltage_min_v
char interface[8]
char chip_name[32]
as608_level_t level
as608_sensor_type_t sensor_type
uint16_t fingerprint_size
as608_packet_size_t packet_size