mirror of
https://gitlab.freedesktop.org/libfprint/libfprint.git
synced 2025-11-15 07:38:12 +00:00
goodix: Read the header using byte reader
This commit is contained in:
committed by
Marco Trevisan
parent
7b97bed91f
commit
63b5908f38
@@ -130,7 +130,7 @@ fp_cmd_receive_cb (FpiUsbTransfer *transfer,
|
|||||||
FpiDeviceGoodixMoc *self = FPI_DEVICE_GOODIXMOC (device);
|
FpiDeviceGoodixMoc *self = FPI_DEVICE_GOODIXMOC (device);
|
||||||
FpiByteReader reader = {0};
|
FpiByteReader reader = {0};
|
||||||
CommandData *data = user_data;
|
CommandData *data = user_data;
|
||||||
int ret = -1, ssm_state = 0;
|
int ssm_state = 0;
|
||||||
gxfp_cmd_response_t cmd_reponse = {0, };
|
gxfp_cmd_response_t cmd_reponse = {0, };
|
||||||
pack_header header;
|
pack_header header;
|
||||||
guint32 crc32_calc = 0;
|
guint32 crc32_calc = 0;
|
||||||
@@ -156,8 +156,10 @@ fp_cmd_receive_cb (FpiUsbTransfer *transfer,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = gx_proto_parse_header (transfer->buffer, transfer->actual_length, &header);
|
reader.data = transfer->buffer;
|
||||||
if (ret != 0)
|
reader.size = transfer->actual_length;
|
||||||
|
|
||||||
|
if (gx_proto_parse_header (&reader, &header) != 0)
|
||||||
{
|
{
|
||||||
fpi_ssm_mark_failed (transfer->ssm,
|
fpi_ssm_mark_failed (transfer->ssm,
|
||||||
fpi_device_error_new_msg (FP_DEVICE_ERROR_PROTO,
|
fpi_device_error_new_msg (FP_DEVICE_ERROR_PROTO,
|
||||||
@@ -165,8 +167,6 @@ fp_cmd_receive_cb (FpiUsbTransfer *transfer,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
reader.data = transfer->buffer;
|
|
||||||
reader.size = transfer->actual_length;
|
|
||||||
if (!fpi_byte_reader_set_pos (&reader, PACKAGE_HEADER_SIZE + header.len))
|
if (!fpi_byte_reader_set_pos (&reader, PACKAGE_HEADER_SIZE + header.len))
|
||||||
{
|
{
|
||||||
fpi_ssm_mark_failed (transfer->ssm,
|
fpi_ssm_mark_failed (transfer->ssm,
|
||||||
|
|||||||
@@ -226,21 +226,35 @@ gx_proto_build_package (uint8_t *ppackage,
|
|||||||
|
|
||||||
|
|
||||||
int
|
int
|
||||||
gx_proto_parse_header (
|
gx_proto_parse_header (FpiByteReader *reader,
|
||||||
uint8_t *buffer,
|
|
||||||
uint32_t buffer_len,
|
|
||||||
pack_header *pheader)
|
pack_header *pheader)
|
||||||
{
|
{
|
||||||
if (!buffer || !pheader)
|
if (!pheader)
|
||||||
return -1;
|
|
||||||
if (buffer_len < PACKAGE_HEADER_SIZE + PACKAGE_CRC_SIZE)
|
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
memcpy (pheader, buffer, sizeof (pack_header));
|
if (!fpi_byte_reader_get_uint8 (reader, &pheader->cmd0))
|
||||||
pheader->len = GUINT16_FROM_LE (pheader->len);
|
g_return_val_if_reached (-1);
|
||||||
if (buffer_len < pheader->len + PACKAGE_HEADER_SIZE)
|
|
||||||
return -1;
|
if (!fpi_byte_reader_get_uint8 (reader, &pheader->cmd1))
|
||||||
|
g_return_val_if_reached (-1);
|
||||||
|
|
||||||
|
if (!fpi_byte_reader_get_uint8 (reader, &pheader->packagenum))
|
||||||
|
g_return_val_if_reached (-1);
|
||||||
|
|
||||||
|
if (!fpi_byte_reader_get_uint8 (reader, &pheader->reserved))
|
||||||
|
g_return_val_if_reached (-1);
|
||||||
|
|
||||||
|
if (!fpi_byte_reader_get_uint16_le (reader, &pheader->len))
|
||||||
|
g_return_val_if_reached (-1);
|
||||||
|
|
||||||
|
if (!fpi_byte_reader_get_uint8 (reader, &pheader->crc8))
|
||||||
|
g_return_val_if_reached (-1);
|
||||||
|
|
||||||
|
if (!fpi_byte_reader_get_uint8 (reader, &pheader->rev_crc8))
|
||||||
|
g_return_val_if_reached (-1);
|
||||||
|
|
||||||
pheader->len -= PACKAGE_CRC_SIZE;
|
pheader->len -= PACKAGE_CRC_SIZE;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -234,8 +234,7 @@ int gx_proto_build_package (uint8_t *ppackage,
|
|||||||
const uint8_t *payload,
|
const uint8_t *payload,
|
||||||
uint32_t payload_size);
|
uint32_t payload_size);
|
||||||
|
|
||||||
int gx_proto_parse_header (uint8_t *buffer,
|
int gx_proto_parse_header (FpiByteReader *reader,
|
||||||
uint32_t buffer_len,
|
|
||||||
pack_header *pheader);
|
pack_header *pheader);
|
||||||
|
|
||||||
int gx_proto_parse_body (uint16_t cmd,
|
int gx_proto_parse_body (uint16_t cmd,
|
||||||
|
|||||||
Reference in New Issue
Block a user