Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| b4e6aef2c8 |
@ -173,4 +173,7 @@ fpc_bep_result_t bep_sensor_wait_for_finger(fpc_com_chain_t *chain, uint16_t tim
|
||||
*/
|
||||
fpc_bep_result_t bep_sensor_wait_finger_not_present(fpc_com_chain_t *chain, uint16_t timeout);
|
||||
|
||||
fpc_bep_result_t bep_template_get(fpc_com_chain_t *chain, uint16_t template_id, uint8_t *data, uint32_t size, uint16_t *tmplsize);
|
||||
fpc_bep_result_t bep_template_put(fpc_com_chain_t *chain, uint16_t template_id, uint8_t *data, uint16_t size);
|
||||
|
||||
#endif /* BEP_HOST_IF_H */
|
||||
|
||||
@ -130,9 +130,9 @@ static fpc_bep_result_t send_command(fpc_com_chain_t *chain, fpc_hcp_cmd_t comma
|
||||
* @param arg_data2_length second argument
|
||||
* @return ::fpc_bep_result_t
|
||||
*/
|
||||
static fpc_bep_result_t receive_result_args2(fpc_com_chain_t *chain,
|
||||
fpc_hcp_arg_t arg_key1, void *arg_data1, uint16_t arg_data1_length,
|
||||
fpc_hcp_arg_t arg_key2, void *arg_data2, uint16_t arg_data2_length)
|
||||
static fpc_bep_result_t receive_result_args2_sizes(fpc_com_chain_t *chain,
|
||||
fpc_hcp_arg_t arg_key1, void *arg_data1, uint16_t arg_data1_length, uint16_t *arg1_size,
|
||||
fpc_hcp_arg_t arg_key2, void *arg_data2, uint16_t arg_data2_length, uint16_t *arg2_size)
|
||||
{
|
||||
fpc_hcp_packet_t response;
|
||||
fpc_hcp_arg_data_t args_rx[10] = {{ 0 }};
|
||||
@ -168,6 +168,7 @@ static fpc_bep_result_t receive_result_args2(fpc_com_chain_t *chain,
|
||||
if (arg_key1 != ARG_NONE) {
|
||||
arg_data = fpc_hcp_arg_get(&response, arg_key1);
|
||||
if (arg_data && arg_data->size <= arg_data1_length) {
|
||||
*arg1_size = arg_data->size;
|
||||
memcpy(arg_data1, arg_data->data, arg_data->size);
|
||||
} else {
|
||||
log_error("%s %d argument missing\n", __func__, arg_key1);
|
||||
@ -180,6 +181,7 @@ static fpc_bep_result_t receive_result_args2(fpc_com_chain_t *chain,
|
||||
if (arg_key2 != ARG_NONE) {
|
||||
arg_data = fpc_hcp_arg_get(&response, arg_key2);
|
||||
if (arg_data && arg_data->size <= arg_data2_length) {
|
||||
*arg2_size = arg_data->size;
|
||||
memcpy(arg_data2, arg_data->data, arg_data->size);
|
||||
} else {
|
||||
/* Not an error since the second argument is optional */
|
||||
@ -193,6 +195,16 @@ exit:
|
||||
return bep_result;
|
||||
}
|
||||
|
||||
static fpc_bep_result_t receive_result_args2(fpc_com_chain_t *chain,
|
||||
fpc_hcp_arg_t arg_key1, void *arg_data1, uint16_t arg_data1_length,
|
||||
fpc_hcp_arg_t arg_key2, void *arg_data2, uint16_t arg_data2_length)
|
||||
{
|
||||
uint16_t arg_size1;
|
||||
uint16_t arg_size2;
|
||||
return receive_result_args2_sizes(chain, arg_key1, arg_data1, arg_data1_length, &arg_size1,
|
||||
arg_key2, arg_data2, arg_data2_length, &arg_size2);
|
||||
}
|
||||
|
||||
static fpc_bep_result_t receive_result_no_args(fpc_com_chain_t *chain)
|
||||
{
|
||||
return receive_result_args2(chain, ARG_NONE, NULL, 0, ARG_NONE, NULL, 0);
|
||||
@ -531,3 +543,50 @@ fpc_bep_result_t bep_sensor_wait_finger_not_present(fpc_com_chain_t *chain, uint
|
||||
/* Wait for finger to be lifted from sensor */
|
||||
return receive_result_no_args(chain);
|
||||
}
|
||||
|
||||
fpc_bep_result_t bep_template_get(fpc_com_chain_t *chain, uint16_t template_id, uint8_t *data, uint32_t size, uint16_t *tmplsize)
|
||||
{
|
||||
fpc_bep_result_t bep_result;
|
||||
uint16_t tmpl_id = template_id;
|
||||
|
||||
|
||||
bep_result = send_command_args2(chain, CMD_STORAGE_TEMPLATE, ARG_UPLOAD, 0, 0, ARG_ID, &tmpl_id,
|
||||
sizeof(tmpl_id));
|
||||
if (bep_result != FPC_BEP_RESULT_OK) {
|
||||
log_error("%s:%u, ERROR\n", __func__, __LINE__);
|
||||
return bep_result;
|
||||
}
|
||||
|
||||
bep_result = receive_result_no_args(chain);
|
||||
if(bep_result != FPC_BEP_RESULT_OK) {
|
||||
log_error("%s:%u, ERROR\n", __func__, __LINE__);
|
||||
return bep_result;
|
||||
}
|
||||
|
||||
bep_result = send_command(chain, CMD_TEMPLATE, ARG_UPLOAD, NULL, 0);
|
||||
if (bep_result != FPC_BEP_RESULT_OK) {
|
||||
log_error("Template download failed\n");
|
||||
return bep_result;
|
||||
}
|
||||
|
||||
return receive_result_args2_sizes(chain, ARG_DATA, data, size, tmplsize, ARG_NONE, 0, 0, 0);
|
||||
}
|
||||
|
||||
fpc_bep_result_t bep_template_put(fpc_com_chain_t *chain, uint16_t template_id, uint8_t *data, uint16_t size)
|
||||
{
|
||||
fpc_bep_result_t bep_result;
|
||||
|
||||
bep_result = send_command_args2(chain, CMD_TEMPLATE, ARG_DOWNLOAD, 0, 0, ARG_DATA, data, size);
|
||||
if (bep_result != FPC_BEP_RESULT_OK) {
|
||||
log_error("%s:%u, ERROR\n", __func__, __LINE__);
|
||||
return bep_result;
|
||||
}
|
||||
bep_result = receive_result_no_args(chain);
|
||||
if(bep_result != FPC_BEP_RESULT_OK) {
|
||||
log_error("%s:%u, ERROR\n", __func__, __LINE__);
|
||||
return bep_result;
|
||||
}
|
||||
|
||||
return bep_save_template(chain, template_id);
|
||||
}
|
||||
|
||||
@ -139,6 +139,8 @@ int main (int argc, char **argv)
|
||||
printf("c: Remove all templates\n");
|
||||
printf("d: Save template\n");
|
||||
printf("e: Remove template\n");
|
||||
printf("t: Get template\n");
|
||||
printf("T: Put template\n");
|
||||
printf("f: Capture image\n");
|
||||
printf("g: Image upload\n");
|
||||
printf("h: Get version\n");
|
||||
@ -168,6 +170,44 @@ int main (int argc, char **argv)
|
||||
template_id = atoi(cmd);
|
||||
res = bep_save_template(&hcp_chain, template_id);
|
||||
break;
|
||||
case 't': {
|
||||
printf("Template id: ");
|
||||
fgets(cmd, sizeof(cmd), stdin);
|
||||
template_id = atoi(cmd);
|
||||
uint8_t *buf = malloc(10240);
|
||||
memset(buf,0,10240);
|
||||
uint16_t tmpl_size = 0;
|
||||
res = bep_template_get(&hcp_chain, template_id, buf, 10240, &tmpl_size);
|
||||
printf("Template size: %d\n", tmpl_size);
|
||||
if (res == FPC_BEP_RESULT_OK) {
|
||||
FILE *f = fopen("tmpl.raw", "wb");
|
||||
if (f) {
|
||||
fwrite(buf, tmpl_size, 1, f);
|
||||
fclose(f);
|
||||
printf("Template saved as tmpl.raw\n");
|
||||
}
|
||||
}
|
||||
free(buf);
|
||||
break;
|
||||
}
|
||||
case 'T': {
|
||||
printf("Template id: ");
|
||||
fgets(cmd, sizeof(cmd), stdin);
|
||||
template_id = atoi(cmd);
|
||||
uint8_t *buf = malloc(10240);
|
||||
memset(buf,0,10240);
|
||||
uint16_t tmpl_size = 0;
|
||||
FILE *f = fopen("tmpl.raw", "rb");
|
||||
if (f) {
|
||||
printf("Read template from tmpl.raw\n");
|
||||
tmpl_size = fread(buf, 1, 10240, f);
|
||||
printf("Template size: %d\n", tmpl_size);
|
||||
fclose(f);
|
||||
}
|
||||
res = bep_template_put(&hcp_chain, template_id, buf, tmpl_size);
|
||||
free(buf);
|
||||
break;
|
||||
}
|
||||
case 'e':
|
||||
printf("Template id: ");
|
||||
fgets(cmd, sizeof(cmd), stdin);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user