diff --git a/libfprint/drivers/fpcmoc/fpc.c b/libfprint/drivers/fpcmoc/fpc.c index 65fa5825..314f857b 100644 --- a/libfprint/drivers/fpcmoc/fpc.c +++ b/libfprint/drivers/fpcmoc/fpc.c @@ -106,6 +106,34 @@ fpc_suspend_resume_cb (FpiUsbTransfer *transfer, } } +static void +fpc_evt_data_from_le (fpc_cmd_response_t *evt) +{ + evt->evt_hdr.cmdid = GUINT32_FROM_LE (evt->evt_hdr.cmdid); + evt->evt_hdr.length = GUINT32_FROM_LE (evt->evt_hdr.length); + evt->evt_hdr.status = GUINT32_FROM_LE (evt->evt_hdr.status); + + if (evt->evt_hdr.cmdid == FPC_EVT_INIT_RESULT) + { + evt->evt_inited.sensor = GUINT16_FROM_LE (evt->evt_inited.sensor); + evt->evt_inited.hw_id = GUINT16_FROM_LE (evt->evt_inited.hw_id); + evt->evt_inited.img_w = GUINT16_FROM_LE (evt->evt_inited.img_w); + evt->evt_inited.img_h = GUINT16_FROM_LE (evt->evt_inited.img_h); + evt->evt_inited.fw_capabilities = GUINT16_FROM_LE (evt->evt_inited.fw_capabilities); + } + else if (evt->evt_hdr.cmdid == FPC_EVT_FID_DATA) + { + evt->evt_enum_fids.status = GINT32_FROM_LE (evt->evt_enum_fids.status); + evt->evt_enum_fids.num_ids = GUINT32_FROM_LE (evt->evt_enum_fids.num_ids); + + for (guint32 i = 0; i < evt->evt_enum_fids.num_ids && i < FPC_TEMPLATES_MAX; i++) + { + evt->evt_enum_fids.fid_data[i].identity_type = GUINT32_FROM_LE (evt->evt_enum_fids.fid_data[i].identity_type); + evt->evt_enum_fids.fid_data[i].identity_size = GUINT32_FROM_LE (evt->evt_enum_fids.fid_data[i].identity_size); + } + } +} + static void fpc_cmd_receive_cb (FpiUsbTransfer *transfer, FpDevice *device, @@ -173,6 +201,7 @@ fpc_cmd_receive_cb (FpiUsbTransfer *transfer, } memcpy (&evt_data, transfer->buffer, transfer->actual_length); + fpc_evt_data_from_le (&evt_data); if (data->callback) data->callback (self, (guint8 *) &evt_data, NULL); @@ -697,6 +726,7 @@ fpc_enroll_create_cb (FpiDeviceFpcMoc *self, } presp = (FPC_BEGIN_ENROL *) data; + presp->status = GINT32_FROM_LE (presp->status); if (presp->status != 0) { error = fpi_device_error_new_msg (FP_DEVICE_ERROR_GENERAL, @@ -732,6 +762,8 @@ fpc_enroll_update_cb (FpiDeviceFpcMoc *self, } presp = (FPC_ENROL *) data; + presp->status = GINT32_FROM_LE (presp->status); + presp->remaining = GUINT32_FROM_LE (presp->remaining); fp_dbg ("Enrol Update status: %d, remaining: %d", presp->status, presp->remaining); switch (presp->status) { @@ -834,6 +866,8 @@ fpc_enroll_complete_cb (FpiDeviceFpcMoc *self, if (check_data (data, &error)) { presp = (FPC_END_ENROL *) data; + presp->status = GINT32_FROM_LE (presp->status); + presp->fid = GUINT32_FROM_LE (presp->fid); if (presp->status != 0) { error = fpi_device_error_new_msg (FP_DEVICE_ERROR_GENERAL, @@ -869,6 +903,10 @@ fpc_enroll_check_duplicate_cb (FpiDeviceFpcMoc *self, if (check_data (data, &error)) { presp = (FPC_IDENTIFY *) data; + presp->status = GINT32_FROM_LE (presp->status); + presp->identity_type = GUINT32_FROM_LE (presp->identity_type); + presp->identity_size = GUINT32_FROM_LE (presp->identity_size); + presp->subfactor = GUINT32_FROM_LE (presp->subfactor); if ((presp->status == 0) && (presp->subfactor == FPC_SUBTYPE_RESERVED) && (presp->identity_type == FPC_IDENTITY_TYPE_RESERVED) && (presp->identity_size <= SECURITY_MAX_SID_SIZE)) @@ -916,6 +954,7 @@ fpc_enroll_commit_cb (FpiDeviceFpcMoc *self, if (check_data (data, &error)) { result = (gint32 *) data; + *result = GINT32_FROM_LE (*result); if (*result != 0) { error = fpi_device_error_new_msg (FP_DEVICE_ERROR_DATA_FULL, @@ -950,7 +989,7 @@ fpc_enroll_sm_run_state (FpiSsm *ssm, FpDevice *device) { FPC_FID_DATA pquery_data = {0}; gsize query_data_len = 0; - guint32 wildcard_value = FPC_IDENTITY_WILDCARD; + guint32 wildcard_value = GUINT32_TO_LE (FPC_IDENTITY_WILDCARD); query_data_len = sizeof (FPC_FID_DATA); pquery_data.identity_type = FPC_IDENTITY_TYPE_WILDCARD; pquery_data.reserved = 16; @@ -959,6 +998,11 @@ fpc_enroll_sm_run_state (FpiSsm *ssm, FpDevice *device) memcpy (&pquery_data.data[0], &wildcard_value, pquery_data.identity_size); + pquery_data.identity_type = GUINT32_TO_LE (pquery_data.identity_type); + pquery_data.reserved = GUINT32_TO_LE (pquery_data.reserved); + pquery_data.identity_size = GUINT32_TO_LE (pquery_data.identity_size); + pquery_data.subfactor = GUINT32_TO_LE (pquery_data.subfactor); + cmd_data.cmdtype = FPC_CMDTYPE_TO_DEVICE_EVTDATA; cmd_data.request = FPC_CMD_ENUM; cmd_data.value = 0x0; @@ -988,7 +1032,7 @@ fpc_enroll_sm_run_state (FpiSsm *ssm, FpDevice *device) case FPC_ENROLL_CAPTURE: { - guint32 capture_id = FPC_CAPTUREID_RESERVED; + guint32 capture_id = GUINT32_TO_LE (FPC_CAPTUREID_RESERVED); fpi_device_report_finger_status_changes (device, FP_FINGER_STATUS_NEEDED, FP_FINGER_STATUS_NONE); @@ -1105,6 +1149,11 @@ fpc_enroll_sm_run_state (FpiSsm *ssm, FpDevice *device) memcpy (&data.data[0], user_id, user_id_len); + data.identity_type = GUINT32_TO_LE (data.identity_type); + data.reserved = GUINT32_TO_LE (data.reserved); + data.identity_size = GUINT32_TO_LE (data.identity_size); + data.subfactor = GUINT32_TO_LE (data.subfactor); + cmd_data.cmdtype = FPC_CMDTYPE_TO_DEVICE; cmd_data.request = FPC_CMD_BIND_IDENTITY; cmd_data.value = 0x0; @@ -1213,6 +1262,10 @@ fpc_verify_cb (FpiDeviceFpcMoc *self, } presp = (FPC_IDENTIFY *) data; + presp->status = GINT32_FROM_LE (presp->status); + presp->identity_type = GUINT32_FROM_LE (presp->identity_type); + presp->identity_size = GUINT32_FROM_LE (presp->identity_size); + presp->subfactor = GUINT32_FROM_LE (presp->subfactor); current_action = fpi_device_get_current_action (device); g_assert (current_action == FPI_DEVICE_ACTION_VERIFY || @@ -1292,7 +1345,7 @@ fpc_verify_sm_run_state (FpiSsm *ssm, FpDevice *device) { case FPC_VERIFY_CAPTURE: { - guint32 capture_id = FPC_CAPTUREID_RESERVED; + guint32 capture_id = GUINT32_TO_LE (FPC_CAPTUREID_RESERVED); fpi_device_report_finger_status_changes (device, FP_FINGER_STATUS_NEEDED, FP_FINGER_STATUS_NONE); @@ -1500,6 +1553,8 @@ fpc_init_load_db_cb (FpiDeviceFpcMoc *self, return; } presp = (FPC_LOAD_DB *) data; + presp->status = GINT32_FROM_LE (presp->status); + presp->database_id_size = GUINT32_FROM_LE (presp->database_id_size); if (presp->status) { fp_err ("%s Load DB failed: %d - Expect to create a new one", G_STRFUNC, presp->status); @@ -1534,7 +1589,7 @@ static void fpc_init_sm_run_state (FpiSsm *ssm, FpDevice *device) { FpiDeviceFpcMoc *self = FPI_DEVICE_FPCMOC (device); - guint32 session_id = FPC_SESSIONID_RESERVED; + guint32 session_id = GUINT32_TO_LE (FPC_SESSIONID_RESERVED); CommandData cmd_data = {0}; switch (fpi_ssm_get_cur_state (ssm)) @@ -1740,7 +1795,7 @@ fpc_dev_template_list (FpDevice *device) CommandData cmd_data = {0}; FPC_FID_DATA pquery_data = {0}; gsize query_data_len = 0; - guint32 wildcard_value = FPC_IDENTITY_WILDCARD; + guint32 wildcard_value = GUINT32_TO_LE (FPC_IDENTITY_WILDCARD); fp_dbg ("%s enter -->", G_STRFUNC); @@ -1752,6 +1807,11 @@ fpc_dev_template_list (FpDevice *device) memcpy (&pquery_data.data[0], &wildcard_value, pquery_data.identity_size); + pquery_data.identity_type = GUINT32_TO_LE (pquery_data.identity_type); + pquery_data.reserved = GUINT32_TO_LE (pquery_data.reserved); + pquery_data.identity_size = GUINT32_TO_LE (pquery_data.identity_size); + pquery_data.subfactor = GUINT32_TO_LE (pquery_data.subfactor); + cmd_data.cmdtype = FPC_CMDTYPE_TO_DEVICE_EVTDATA; cmd_data.request = FPC_CMD_ENUM; cmd_data.value = 0x0; @@ -1850,6 +1910,12 @@ fpc_dev_template_delete (FpDevice *device) data.identity_size = user_id_len; data.subfactor = (guint32) finger; memcpy (&data.data[0], user_id, user_id_len); + + data.identity_type = GUINT32_TO_LE (data.identity_type); + data.reserved = GUINT32_TO_LE (data.reserved); + data.identity_size = GUINT32_TO_LE (data.identity_size); + data.subfactor = GUINT32_TO_LE (data.subfactor); + cmd_data.cmdtype = FPC_CMDTYPE_TO_DEVICE; cmd_data.request = FPC_CMD_DELETE_TEMPLATE; cmd_data.value = 0x0; diff --git a/meson.build b/meson.build index adf1f56d..abebaadb 100644 --- a/meson.build +++ b/meson.build @@ -138,7 +138,7 @@ drivers_info = { 'upekts': {}, 'goodixmoc': { 'endian_dependent': true }, 'nb1010': {}, - 'fpcmoc': { 'endian_dependent': true }, + 'fpcmoc': {}, 'realtek': {}, 'focaltech_moc': {}, 'mafpmoc': { 'endian_dependent': true },