fix(factory): relax GNSS check for indoor testing
This commit is contained in:
@@ -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、失败码、开始时间、总耗时和全部节点状态:
|
||||
|
||||
@@ -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 未通过时会无限等待并持续呼吸;通过后才播放关机音并自动关机。
|
||||
|
||||
|
||||
Binary file not shown.
@@ -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__":
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user