goodix: Read the header using byte reader

This commit is contained in:
Marco Trevisan (Treviño)
2025-02-13 21:14:26 +01:00
committed by Marco Trevisan
parent 7b97bed91f
commit 63b5908f38
3 changed files with 32 additions and 19 deletions

View File

@@ -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,

View File

@@ -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;
} }

View File

@@ -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,