feat: automate FT1 factory test status reporting

This commit is contained in:
chenjintao
2026-09-24 11:21:40 +08:00
parent 8b499948dd
commit 06b0eaaf70
11 changed files with 461 additions and 38 deletions
@@ -31,6 +31,35 @@ void handle_nfc_bind(const char *uid) { (void)uid; }
void handle_nfc_trigger(const char *uid) { (void)uid; }
static char g_ip_address[64];
static volatile int g_led_mode;
static ql_task_t g_led_task;
static void factory_led_task(void *arg)
{
int phase = 0;
(void)arg;
ql_gpio_init(FT_STATUS_LED_PIN, PIN_DIRECTION_OUT, PIN_PULL_DISABLE,
PIN_LEVEL_HIGH);
while (1) {
if (g_led_mode == 0) {
ql_gpio_set_level(FT_STATUS_LED_PIN, PIN_LEVEL_LOW);
ql_rtos_task_sleep_ms(100);
} else if (g_led_mode == 1) {
ql_gpio_set_level(FT_STATUS_LED_PIN, PIN_LEVEL_HIGH);
ql_rtos_task_sleep_ms(100);
} else {
phase = !phase;
ql_gpio_set_level(FT_STATUS_LED_PIN,
phase ? PIN_LEVEL_HIGH : PIN_LEVEL_LOW);
ql_rtos_task_sleep_ms(g_led_mode == 2 ? 250 : 100);
}
}
}
static void factory_led_mode(int mode)
{
g_led_mode = mode;
}
static int iccid_valid(const char *iccid)
{
@@ -87,7 +116,16 @@ static ft_error_t run_power_adc(char *data, unsigned int data_size)
static ft_error_t run_audio_loopback(char *data, unsigned int data_size)
{
u32 recorded_ms = 0;
int ret = factory_audio_wait_and_loopback(FT_DIALOG_KEY_TIMEOUT_MS, &recorded_ms);
int ret = factory_audio_play_prompt(FT_AUDIO_LOOPBACK_PATH);
if (ret == -2) {
return FT_ERR_AUDIO_FILE_MISSING;
}
if (ret != 0) {
return FT_ERR_AUDIO_PLAY;
}
factory_led_mode(2);
ret = factory_audio_wait_and_loopback(FT_DIALOG_KEY_TIMEOUT_MS, &recorded_ms);
factory_led_mode(1);
snprintf(data, data_size,
"{\"recorded_ms\":%lu,\"max_ms\":%d,\"volume_percent\":100}",
(unsigned long)recorded_ms, FT_AUDIO_MAX_MS);
@@ -163,12 +201,22 @@ static ft_error_t run_nfc(char *data, unsigned int data_size)
u8 ntag_data[180] = {0};
u16 ntag_len = 0;
u8 version;
int audio_ret;
u32 start = ft_now_ms();
audio_ret = factory_audio_play_prompt(FT_AUDIO_NFC_PATH);
if (audio_ret == -2) {
return FT_ERR_AUDIO_FILE_MISSING;
}
if (audio_ret != 0) {
return FT_ERR_AUDIO_PLAY;
}
factory_led_mode(3);
DP1312EA_Reset();
version = DP1312EA_ReadRawRC(VersionReg);
if (version != FT_NFC_VERSION_EXPECTED) {
snprintf(data, data_size, "{\"chip_version\":\"0x%02X\"}", version);
factory_led_mode(1);
return FT_ERR_NFC_CHIP;
}
@@ -179,11 +227,13 @@ static ft_error_t run_nfc(char *data, unsigned int data_size)
snprintf(data, data_size,
"{\"chip_version\":\"0x%02X\",\"uid\":\"%s\"}",
version, (char *)output_uuid);
factory_led_mode(1);
return FT_OK;
}
ql_rtos_task_sleep_ms(200);
} while (ft_now_ms() - start < FT_NFC_TIMEOUT_MS);
factory_led_mode(1);
return FT_ERR_NFC_TIMEOUT;
}
@@ -213,10 +263,13 @@ static void factory_test_task(void *arg)
ql_rtos_task_sleep_s(2);
ft_protocol_init();
ql_rtos_task_create(&g_led_task, 2048, 15, "ft_led", factory_led_task, NULL);
factory_led_mode(1);
if (ql_dev_get_imei(imei, sizeof(imei)) == 0) {
ft_protocol_set_imei(imei);
}
ft_protocol_session_start();
ft_protocol_start_status_broadcast();
for (node = FT_NODE_BOOT_AUDIO; node < FT_NODE_COUNT; ++node) {
ft_protocol_node_start(node);
@@ -230,11 +283,7 @@ static void factory_test_task(void *arg)
}
}
audio_ret = factory_audio_play_prompt(FT_AUDIO_PASS_PATH);
if (audio_ret == 0) {
ql_rtos_task_sleep_ms(300);
audio_ret = factory_audio_play_prompt(FT_AUDIO_SHUTDOWN_PATH);
}
audio_ret = factory_audio_play_prompt(FT_AUDIO_SHUTDOWN_PATH);
if (audio_ret != 0) {
ft_protocol_session_result(0, FT_ERR_FINAL_AUDIO);
while (1) ql_rtos_task_sleep_s(60);