diff --git a/docs/factory_test.md b/docs/factory_test.md index 5fc4ea8..5f2be18 100644 --- a/docs/factory_test.md +++ b/docs/factory_test.md @@ -53,7 +53,7 @@ | 3 | `ESIM` | 查询 SIM 状态并读取 ICCID | `READY`,且能读到 18-22 位 ICCID | 30 秒 | | 4 | `DATA_CALL` | 等待注册、激活 CID 1 IPv4 PDP | 返回非 `0.0.0.0` 的 IPv4 | 注册等待 120 秒 | | 5 | `NFC` | 检查 DP1312EA 版本并轮询 NTAG213 | 版本 `0x82`,成功读取 UID | 60 秒 | -| 6 | `GNSS` | 开机后后台搜索,到节点后循环读取累计值 | `open_ret=0`、`nmea_count>=1`,且 `sat_count>=1` 或 `fix_status>0` | 无限等待直到通过;打开失败时每 2 秒重试 | +| 6 | `GNSS` | 开机后后台搜索,到节点后循环读取累计值 | `open_ret=0` 且 `nmea_count>=5`;卫星数和定位状态只记录 | 无限等待直到通过;打开失败时每 2 秒重试 | 说明:`AUDIO_LOOPBACK` 使用 GPIO84 按键,软件通过仅代表录放数据链路完成。 最终声学判断由工人完成。 @@ -109,7 +109,7 @@ Windows 打包方法见 [factory_test_windows_fs.md](factory_test_windows_fs.md) ### 5.2 会话开始 ```text -FT1 {"v":2,"type":"session_start","seq":1,"session":"20260923-163010","uptime_ms":2050,"imei":"860123456789012","iccid":"","nfc_uid":"","fw":"FACTORY_TEST_1.1.0","start_time":"2026-09-23T16:30:10"} +FT1 {"v":2,"type":"session_start","seq":1,"session":"20260923-163010","uptime_ms":2050,"imei":"860123456789012","iccid":"","nfc_uid":"","fw":"FACTORY_TEST_1.1.1","start_time":"2026-09-23T16:30:10"} ``` RTC 无效时 `start_time` 为 `null`。RTC 无效不会导致产测失败;测试耗时始终以 @@ -137,7 +137,7 @@ FT1 {"v":2,"type":"node_result","seq":14,"session":"20260923-163010","uptime_ms" ```text FT1 {"v":2,"type":"node_result","seq":18,"session":"20260923-163010","uptime_ms":34000,"imei":"860123456789012","iccid":"89860xxxxxxxxxxxxxxx","nfc_uid":"04A1B2C3D4E5F6","node":5,"name":"NFC","result":"PASS","code":0,"elapsed_ms":1900,"data":{"chip_version":"0x82","uid":"04A1B2C3D4E5F6"}} -FT1 {"v":2,"type":"node_result","seq":20,"session":"20260923-163010","uptime_ms":35200,"imei":"860123456789012","iccid":"89860xxxxxxxxxxxxxxx","nfc_uid":"04A1B2C3D4E5F6","node":6,"name":"GNSS","result":"PASS","code":0,"elapsed_ms":950,"data":{"open_ret":0,"nmea_count":65,"sat_count":1,"fix_status":0,"search_ms":35100,"required_nmea_count":1,"required_sat_count":1}} +FT1 {"v":2,"type":"node_result","seq":20,"session":"20260923-163010","uptime_ms":35200,"imei":"860123456789012","iccid":"89860xxxxxxxxxxxxxxx","nfc_uid":"04A1B2C3D4E5F6","node":6,"name":"GNSS","result":"PASS","code":0,"elapsed_ms":950,"data":{"open_ret":0,"nmea_count":65,"sat_count":0,"fix_status":0,"search_ms":35100,"required_nmea_count":5,"required_sat_count":0}} ``` 最终报告包含 IMEI、ICCID、NFC UID、失败码、开始时间、总耗时和全部节点状态: diff --git a/factory_host/docs/USAGE.md b/factory_host/docs/USAGE.md index e7da6c8..81d6373 100644 --- a/factory_host/docs/USAGE.md +++ b/factory_host/docs/USAGE.md @@ -94,7 +94,7 @@ factory_host/dist/ 产测固件开机后立即在后台启动 GNSS 搜索,同时依次执行:开机音频、电源 ADC、音频 Loopback、eSIM、数据连接和 NFC。最后的 GNSS 节点只播放一次提示音,然后循环读取此前累计的 NMEA、卫星数和定位状态,直到达到基础硬件判定门槛。 -GNSS 的基础硬件判定门槛为:GNSS 成功打开、累计收到至少 1 条 NMEA,并且至少发现 1 颗卫星或已取得有效定位。经纬度、定位精度、TTFF 和 1PPS 不参与判定。 +GNSS 的基础硬件判定门槛为:GNSS 成功打开并累计收到至少 5 条 NMEA。卫星数、定位状态、经纬度、定位精度、TTFF 和 1PPS 只用于日志观察,不参与产线判定,因此可以在室内完成基础数据链路测试;天线和实际搜星能力需要另行室外抽检。 指示灯状态:普通流程长亮,Loopback 慢闪,NFC 快闪,GNSS 为呼吸灯。如果设备运行时无法启用 PWM,GNSS 会自动改为“双短闪 + 长灭”。GNSS 未通过时会无限等待并持续呼吸;通过后才播放关机音并自动关机。 diff --git a/factory_host/firmware/test/EG800AKCN_11LG-FT1-factory-test.zip b/factory_host/firmware/test/EG800AKCN_11LG-FT1-factory-test.zip index fb8023b..f620cd3 100644 --- a/factory_host/firmware/test/EG800AKCN_11LG-FT1-factory-test.zip +++ b/factory_host/firmware/test/EG800AKCN_11LG-FT1-factory-test.zip @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d124f130a3a45cf8b95d931970ec2ec70aed2b85c9472ce42291b1c2bc2198e8 -size 6224194 +oid sha256:1edeb19c7ce6d592542c7d4663170c5d5c3358b55fded9556f1f853b6ed808c6 +size 6224202 diff --git a/factory_host/tests/test_factory_host.py b/factory_host/tests/test_factory_host.py index b5b415c..c1e62fc 100644 --- a/factory_host/tests/test_factory_host.py +++ b/factory_host/tests/test_factory_host.py @@ -87,7 +87,7 @@ class FactoryHostTests(unittest.TestCase): start = parse_ft1_line( 'FT1 {"v":2,"type":"session_start","seq":1,"session":"BOOT-1",' '"uptime_ms":2050,"imei":"860123456789012","iccid":"","nfc_uid":"",' - '"fw":"FACTORY_TEST_1.1.0","start_time":null}' + '"fw":"FACTORY_TEST_1.1.1","start_time":null}' ) session.apply(start) result = parse_ft1_line( @@ -114,14 +114,14 @@ class FactoryHostTests(unittest.TestCase): def test_ft1_control_messages(self): ready = parse_ft1_line( 'FT1 {"v":2,"type":"device_ready","seq":1,"session":"BOOT-1",' - '"uptime_ms":100,"fw":"FACTORY_TEST_1.1.0"}' + '"uptime_ms":100,"fw":"FACTORY_TEST_1.1.1"}' ) ack = parse_ft1_line( 'FT1 {"v":2,"type":"command_ack","seq":2,"session":"BOOT-1",' '"uptime_ms":120,"command":"START","accepted":true}' ) session = FT1Session() - self.assertEqual(session.apply(ready), "设备已识别 FACTORY_TEST_1.1.0") + self.assertEqual(session.apply(ready), "设备已识别 FACTORY_TEST_1.1.1") self.assertEqual(session.apply(ack), "START 已确认") self.assertTrue(session.device_ready_seen) self.assertTrue(session.start_ack_seen) @@ -150,14 +150,14 @@ class FactoryHostTests(unittest.TestCase): 'FT1 {"v":2,"type":"node_result","seq":9,"session":"BOOT-1",' '"uptime_ms":30600,"imei":"860123456789012","iccid":"8986000000000000000",' '"nfc_uid":"04A1B2C3D4E5F6","node":6,"name":"GNSS","result":"PASS",' - '"code":0,"elapsed_ms":800,"data":{"open_ret":0,"nmea_count":1,' - '"sat_count":1,"fix_status":0,"search_ms":28500,' - '"required_nmea_count":1,"required_sat_count":1}}' + '"code":0,"elapsed_ms":800,"data":{"open_ret":0,"nmea_count":5,' + '"sat_count":0,"fix_status":0,"search_ms":28500,' + '"required_nmea_count":5,"required_sat_count":0}}' ) session = FT1Session() session.apply(message) self.assertEqual(session.nodes["GNSS"], "PASS") - self.assertEqual(session.node_details["GNSS"]["data"]["sat_count"], 1) + self.assertEqual(session.node_details["GNSS"]["data"]["sat_count"], 0) if __name__ == "__main__": diff --git a/ql-application/threadx/interface/factory_test/factory_test.c b/ql-application/threadx/interface/factory_test/factory_test.c index 9a5dfe7..73c8244 100644 --- a/ql-application/threadx/interface/factory_test/factory_test.c +++ b/ql-application/threadx/interface/factory_test/factory_test.c @@ -326,15 +326,16 @@ static ft_error_t run_gnss(char *data, unsigned int data_size) while (1) { factory_gnss_snapshot(&result); - if (result.open_ret == 0 && result.nmea_count >= 1 && - (result.sat_count >= 1 || result.fix_status > 0)) { + if (result.open_ret == 0 && + result.nmea_count >= FT_GNSS_MIN_NMEA_COUNT) { snprintf(data, data_size, "{\"open_ret\":%d,\"nmea_count\":%lu,\"sat_count\":%d," "\"fix_status\":%d,\"search_ms\":%lu," - "\"required_nmea_count\":1,\"required_sat_count\":1}", + "\"required_nmea_count\":%d,\"required_sat_count\":0}", result.open_ret, (unsigned long)result.nmea_count, result.sat_count, result.fix_status, - (unsigned long)result.search_ms); + (unsigned long)result.search_ms, + FT_GNSS_MIN_NMEA_COUNT); factory_gnss_stop(); factory_led_mode(FT_LED_ON); return FT_OK; diff --git a/ql-application/threadx/interface/factory_test/factory_test.h b/ql-application/threadx/interface/factory_test/factory_test.h index 0cf5b88..0a30d6d 100644 --- a/ql-application/threadx/interface/factory_test/factory_test.h +++ b/ql-application/threadx/interface/factory_test/factory_test.h @@ -5,7 +5,7 @@ #include "ql_gpio.h" #define FT_PROTOCOL_VERSION 2 -#define FT_FIRMWARE_VERSION "FACTORY_TEST_1.1.0" +#define FT_FIRMWARE_VERSION "FACTORY_TEST_1.1.1" #define FT_ADC_MIN_MV 3500 #define FT_ADC_MAX_MV 4200 @@ -19,6 +19,7 @@ #define FT_DIALOG_KEY_TIMEOUT_MS 60000 #define FT_SIM_TIMEOUT_MS 30000 #define FT_NFC_TIMEOUT_MS 60000 +#define FT_GNSS_MIN_NMEA_COUNT 5 #define FT_LOOPBACK_KEY_PIN GPIO_PIN_NO_84 #define FT_STATUS_LED_PIN GPIO_PIN_NO_70