LibDriver AS608  1.0.0
AS608 full-featured driver
driver_as608_register_test.c
Go to the documentation of this file.
1 
38 #include <stdlib.h>
39 
40 static as608_handle_t gs_handle;
41 static uint8_t gs_output_buffer[512];
51 uint8_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
uint8_t as608_init(as608_handle_t *handle, uint32_t addr)
initialize the chip
Definition: driver_as608.c:465
as608_status_t
as608 status enumeration definition
Definition: driver_as608.h:153
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
uint8_t as608_get_last_status(as608_handle_t *handle, as608_status_t *status)
get the last status
Definition: driver_as608.c:607
as608_gpio_level_t
as608 gpio level enumeration definition
Definition: driver_as608.h:144
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
Definition: driver_as608.c:575
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
Definition: driver_as608.h:154
@ AS608_BOOL_TRUE
Definition: driver_as608.h:65
@ AS608_GPIO_LEVEL_LOW
Definition: driver_as608.h:145
@ AS608_GPIO_LEVEL_HIGH
Definition: driver_as608.h:146
@ AS608_GPIO_NUMBER_0
Definition: driver_as608.h:136
@ AS608_GPIO_NUMBER_1
Definition: driver_as608.h:137
@ AS608_PACKET_SIZE_128_BYTES
Definition: driver_as608.h:87
@ AS608_LEVEL_3
Definition: driver_as608.h:75
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
as608 handle structure definition
Definition: driver_as608.h:213
as608 information structure definition
Definition: driver_as608.h:231
float temperature_max
Definition: driver_as608.h:239
float supply_voltage_max_v
Definition: driver_as608.h:236
uint32_t driver_version
Definition: driver_as608.h:240
float temperature_min
Definition: driver_as608.h:238
float max_current_ma
Definition: driver_as608.h:237
char manufacturer_name[32]
Definition: driver_as608.h:233
float supply_voltage_min_v
Definition: driver_as608.h:235
char interface[8]
Definition: driver_as608.h:234
char chip_name[32]
Definition: driver_as608.h:232
as608 params structure definition
Definition: driver_as608.h:199
uint16_t status
Definition: driver_as608.h:200
as608_level_t level
Definition: driver_as608.h:203
as608_sensor_type_t sensor_type
Definition: driver_as608.h:201
uint32_t address
Definition: driver_as608.h:204
uint16_t n_9600
Definition: driver_as608.h:206
uint16_t fingerprint_size
Definition: driver_as608.h:202
as608_packet_size_t packet_size
Definition: driver_as608.h:205