Files
Frame-rate-optimization/app_cail/app_calibration.h

232 lines
8.9 KiB
C
Raw Normal View History

2026-04-09 10:14:20 +08:00
#ifndef __APP_CALIBRATION_H
#define __APP_CALIBRATION_H
#include <stdint.h>
#include "mx_log.h"
#include "resi_math_lib.h"
#include "mozen_protocol.h"
#include "cali_process.h"
#include "main.h"
//#include "bsp_config.h"
/****************************<2A><>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD> <20><>********************************/
//<2F><><EFBFBD><EFBFBD>Ŀ<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д
#define MT_AX_NUM (AX_NUM)
#define MT_AY_NUM (AY_NUM)
#ifdef CALI_POINT_NUM
#undef CALI_POINT_NUM
#endif
#define CALI_POINT_NUM (3) //<2F><EFBFBD><EAB6A8>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
#ifdef MAX_PRESSURE_POINTS
#undef MAX_PRESSURE_POINTS
#endif
#define MAX_PRESSURE_POINTS CALI_POINT_NUM
//δ<><CEB4><EFBFBD>б궨ǰ<EAB6A8><C7B0><EFBFBD><EFBFBD><E3B7A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD>ϲ<EFBFBD><CFB2><EFBFBD>
#define DEFAULT_MIN_TRIGGER_RES_VALUE (1000)
#define DEFAULT_MAX_TRIGGER_RES_VALUE (10000)
#define DEFAULT_DIV_TRIGGER_RES_VALUE (1300) // <20><><EFBFBD>ݾ<EFBFBD><DDBE><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>д
#define DEFAULT_MAX_DISPLAY_VALUE (255) // (255U)
/****************************<2A><>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD> <20><> ********************************/
#define MAX_DISPLAY_ADC_VALUE (4096) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾֵ
#ifndef APP_CALI_USE_PROJECT_RUNTIME_FLAGS
#define APP_CALI_USE_PROJECT_RUNTIME_FLAGS 1U //<2F>Ƿ<EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>־ (0:<3A><>ʹ<EFBFBD><CAB9> 1:ʹ<><CAB9>)
#endif
#ifndef APP_CALI_ENABLE_LEGACY_API
#define APP_CALI_ENABLE_LEGACY_API 0U //<2F>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>þɰ<C3BE>API (0:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1:<3A><><EFBFBD><EFBFBD>)
#endif
#define APP_MATH_PARAM_FRAME_SIZE 8U //<2F><EFBFBD><E3B7A8>ѧ<EFBFBD><D1A7><EFBFBD><EFBFBD>֡<EFBFBD><D6A1>С
#define APP_MAP_MATRIX_WORDS ((uint32_t)MT_AX_NUM * (uint32_t)MT_AY_NUM * (uint32_t)CALI_POINT_NUM) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define APP_MAP_MATRIX_BYTES (APP_MAP_MATRIX_WORDS * sizeof(uint16_t)) //<2F><><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> * 2)
#define APP_SENSOR_FRAME_PAYLOAD_MAX_BYTES (1U + ((uint32_t)MT_AX_NUM * (uint32_t)MT_AY_NUM * sizeof(uint16_t))) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD><D6A1><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>
#define APP_CALI_STATUS_UNCALIBRATED 0x0000U // δ<>궨״̬
#define APP_CALI_STATUS_CALIBRATED 0xA55AU // <20>ѱ궨״̬
// <20><EFBFBD><E8B1B8>ϢSN
#define DEFAULT_PN "JJ009"
#define DEFAULT_SN "FA0060G1A7100001"
#define DEFAULT_SW_VER "V1.0.1"
#define DEFAULT_HW_VER "V1.0_20250627"
#define APP_DEVICE_PROTOCOL_VER "V1.0" // Protocol Version
//У׼<D0A3><D7BC><EFBFBD>ݽṹ
typedef struct _app_math_cali_t
{
uint16_t check_cail; // У<><D0A3>ֵ
uint16_t sensor_data_type; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint16_t min_trigger_res_value; // <20><>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
uint16_t max_trigger_res_value; // <20><><EFBFBD>󴥷<EFBFBD><F3B4A5B7><EFBFBD><EFBFBD><EFBFBD>ֵ
uint16_t div_trigger_res_value; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
uint16_t max_display_value; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾֵ
uint16_t num_points; // <20><EFBFBD><EAB6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint16_t pressure_points[MAX_PRESSURE_POINTS]; // <20><EFBFBD><EAB6A8>ѹ<EFBFBD><D1B9>ֵ
} app_math_cali_t;
typedef struct _app_creep_params
{
uint8_t creep_strength;
uint8_t creep_level;
}app_creep_params;
typedef struct _app_device_info
{
uint8_t pn[33]; // <20>ͺŴ洢
char sn[17]; // <20><><EFBFBD>кŴ洢
uint8_t sw_ver[sizeof(DEFAULT_SW_VER)+1]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t hw_ver[sizeof(DEFAULT_HW_VER)+1]; // Ӳ<><D3B2><EFBFBD><EFBFBD>
uint8_t sensor_size[10]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߴ<EFBFBD>
uint8_t protocol_ver[10]; // Э<><D0AD><EFBFBD><EFBFBD>
} app_dev_info;
typedef struct {
uint16_t max_cal;
uint16_t min_cal;
uint16_t ref_value;
uint16_t adc_max;
uint16_t max_display;
} app_legacy_math_t;
typedef struct {
uint8_t creep_strength;
uint8_t creep_level;
} app_legacy_creep_t;
// <20>豸״̬ old
typedef struct
{
uint8_t led_sw;
uint8_t sensor_tx_sw;
uint8_t tx_stopping;
uint8_t output_pick;
} app_device_status_t;
/* Compatibility typedefs after merge */
typedef app_math_cali_t app_math_params_t;
typedef app_math_cali_t pressure_params_t;
extern volatile bool g_check_cali ;
extern volatile bool g_reset_takeEffect ;
extern volatile bool g_is_active_reporting;
extern pressure_params_t* pressure_params;
extern volatile bool g_is_creep_enable ;
/* Algorithm (math) parameter interfaces */
uint8_t app_math_init(uint16_t *min_trigger_res_value,
uint16_t *max_trigger_res_value,
uint16_t *div_trigger_res_value,
uint16_t *max_display_value,uint16_t *sensor_data_type);
uint8_t app_math_get_temp_params(app_math_cali_t *out_params);
uint8_t app_math_set_temp_params(const app_math_cali_t *params);
uint8_t app_math_write_temp_params(const uint8_t *data, uint16_t len);
uint8_t app_math_save_params(const uint8_t *data, uint16_t len);
uint8_t app_math_clear_params(void);
uint8_t app_math_read_temp_params(uint8_t *response_buf, uint16_t *response_len);
uint8_t app_math_read_solidified_params(uint8_t *response_buf, uint16_t *response_len);
/* Pressure parameter interfaces */
pressure_params_t *app_pressure_init(void);
uint8_t app_pressure_write_temp_params(const uint8_t *data, uint16_t len);
uint8_t app_pressure_read_temp_params(uint8_t *response_buf, uint16_t *response_len);
uint8_t app_pressure_save_params(const uint8_t *data, uint16_t len);
uint8_t app_pressure_read_solidified_params(uint8_t *response_buf, uint16_t *response_len);
uint8_t app_pressure_clear_params(void);
/* N-point map interfaces */
uint8_t app_map_init(void);
uint8_t app_map_write_temp_params(const uint8_t *data, uint16_t len);
uint8_t app_map_save_params(const uint8_t *data, uint16_t len);
uint8_t app_map_clear_params(void);
uint8_t app_map_read_temp_params(uint8_t *response_buf, uint16_t *response_len);
uint8_t *app_map_data_ptr(void);
uint32_t app_map_data_size(void);
/* Creep parameter interfaces */
uint8_t app_creep_write_temp_params(app_creep_params *creep_params);
uint8_t app_creep_save_params(app_creep_params *creep_params);
uint8_t app_creep_read_params(app_creep_params *creep_params);
uint8_t app_creep_clear_params(void);
/* Device information interfaces */
uint8_t app_device_get_info(app_dev_info *dev_info);
uint8_t app_device_set_info(const app_dev_info *dev_info);
/* Legacy device status interfaces */
app_device_status_t* app_device_status_get(void);
void app_device_status_set(const app_device_status_t *status);
void app_device_status_init(void);
/* Runtime state hooks for protocol layer */
void app_calibration_invalidate_runtime(void);
void app_calibration_request_reset_effect(void);
uint8_t app_calibration_check(void);
uint8_t app_calibration_get_cail_status(void);
uint8_t app_calibration_set(uint8_t calibrated);
/* Forward declaration for flash operations */
struct flash_port_ops_t;
/**
* @brief Initialize the calibration module and underlying flash port.
* @param flash_ops Pointer to flash operations mapping.
*/
void app_calibration_init(const struct flash_port_ops_t *flash_ops);
void app_calibration_reset_init(void);
/**
* @brief Process raw 16-bit sensor data against calibration map
* @param in_raw_data Input raw sensor data matrix (MT_AX_NUM x MT_AY_NUM)
* @param out_cali_data Output buffer to store processed data
* @return 1 on success, 0 on invalid parameters
*/
void process_calibration_frame(const uint16_t in_raw_data[MT_AX_NUM][MT_AY_NUM],
uint16_t out_cali_data[MT_AX_NUM][MT_AY_NUM]);
uint8_t send_sensor_frame_8bit(const uint8_t (*sensor_data)[MT_AY_NUM]);
uint8_t send_sensor_frame_16bit(const uint16_t (*sensor_data)[MT_AY_NUM]);
uint8_t app_calibration_build_sensor8bit_payload(const uint8_t (*sensor_data)[MT_AY_NUM],
uint8_t *payload,
uint16_t payload_size,
uint16_t *payload_len);
uint8_t app_calibration_build_sensor16bit_payload(const uint16_t (*sensor_data)[MT_AY_NUM],
uint8_t *payload,
uint16_t payload_size,
uint16_t *payload_len);
/* Legacy compatibility interfaces */
#if APP_CALI_ENABLE_LEGACY_API
uint8_t array_resi_params_write(const uint8_t *data, uint16_t len);
uint8_t array_resi_params_save(const uint8_t *data, uint16_t len);
uint8_t clear_array_init_info(void);
uint8_t return_array_resi_init_info(uint8_t *response_buf, uint16_t *response_len);
uint8_t return_flash_array_resi_init_info(uint8_t *response_buf, uint16_t *response_len);
pressure_params_t *init_pressure_params(void);
uint8_t write_temp_pressure_params(const uint8_t *data, uint16_t len);
uint8_t read_temp_pressure_params(uint8_t *response_buf, uint16_t *response_len);
uint8_t write_solidified_pressure_params(const uint8_t *data, uint16_t len);
uint8_t read_solidified_pressure_params(uint8_t *response_buf, uint16_t *response_len);
uint8_t clear_pressure_params_from_flash(void);
void write_cali_params_to_ram(const uint8_t *data, uint16_t len);
uint8_t save_cali_params_to_flash(const uint8_t *data, uint16_t len);
uint8_t clear_cali_params_from_flash(void);
uint8_t read_cali_params_from_ram(uint8_t *response_buf, uint16_t *response_len);
#endif
#endif /* __APP_CALIBRATION_H */