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_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 */
|
#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
|
* @param arg_data2_length second argument
|
||||||
* @return ::fpc_bep_result_t
|
* @return ::fpc_bep_result_t
|
||||||
*/
|
*/
|
||||||
static fpc_bep_result_t receive_result_args2(fpc_com_chain_t *chain,
|
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,
|
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)
|
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_packet_t response;
|
||||||
fpc_hcp_arg_data_t args_rx[10] = {{ 0 }};
|
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) {
|
if (arg_key1 != ARG_NONE) {
|
||||||
arg_data = fpc_hcp_arg_get(&response, arg_key1);
|
arg_data = fpc_hcp_arg_get(&response, arg_key1);
|
||||||
if (arg_data && arg_data->size <= arg_data1_length) {
|
if (arg_data && arg_data->size <= arg_data1_length) {
|
||||||
|
*arg1_size = arg_data->size;
|
||||||
memcpy(arg_data1, arg_data->data, arg_data->size);
|
memcpy(arg_data1, arg_data->data, arg_data->size);
|
||||||
} else {
|
} else {
|
||||||
log_error("%s %d argument missing\n", __func__, arg_key1);
|
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) {
|
if (arg_key2 != ARG_NONE) {
|
||||||
arg_data = fpc_hcp_arg_get(&response, arg_key2);
|
arg_data = fpc_hcp_arg_get(&response, arg_key2);
|
||||||
if (arg_data && arg_data->size <= arg_data2_length) {
|
if (arg_data && arg_data->size <= arg_data2_length) {
|
||||||
|
*arg2_size = arg_data->size;
|
||||||
memcpy(arg_data2, arg_data->data, arg_data->size);
|
memcpy(arg_data2, arg_data->data, arg_data->size);
|
||||||
} else {
|
} else {
|
||||||
/* Not an error since the second argument is optional */
|
/* Not an error since the second argument is optional */
|
||||||
@ -193,6 +195,16 @@ exit:
|
|||||||
return bep_result;
|
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)
|
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);
|
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 */
|
/* Wait for finger to be lifted from sensor */
|
||||||
return receive_result_no_args(chain);
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
@ -43,7 +43,7 @@ static void help(void)
|
|||||||
|
|
||||||
int main (int argc, char **argv)
|
int main (int argc, char **argv)
|
||||||
{
|
{
|
||||||
char *port = NULL;
|
char *port = NULL;
|
||||||
int baudrate = 921600;
|
int baudrate = 921600;
|
||||||
int timeout = 5;
|
int timeout = 5;
|
||||||
int index;
|
int index;
|
||||||
@ -139,6 +139,8 @@ int main (int argc, char **argv)
|
|||||||
printf("c: Remove all templates\n");
|
printf("c: Remove all templates\n");
|
||||||
printf("d: Save template\n");
|
printf("d: Save template\n");
|
||||||
printf("e: Remove template\n");
|
printf("e: Remove template\n");
|
||||||
|
printf("t: Get template\n");
|
||||||
|
printf("T: Put template\n");
|
||||||
printf("f: Capture image\n");
|
printf("f: Capture image\n");
|
||||||
printf("g: Image upload\n");
|
printf("g: Image upload\n");
|
||||||
printf("h: Get version\n");
|
printf("h: Get version\n");
|
||||||
@ -168,6 +170,44 @@ int main (int argc, char **argv)
|
|||||||
template_id = atoi(cmd);
|
template_id = atoi(cmd);
|
||||||
res = bep_save_template(&hcp_chain, template_id);
|
res = bep_save_template(&hcp_chain, template_id);
|
||||||
break;
|
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':
|
case 'e':
|
||||||
printf("Template id: ");
|
printf("Template id: ");
|
||||||
fgets(cmd, sizeof(cmd), stdin);
|
fgets(cmd, sizeof(cmd), stdin);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user