Przeglądaj źródła

add:提供更详细的服务小区信息

alienwalker 1 rok temu
rodzic
commit
8253f9c593

+ 34 - 0
components/mobile/luat_lib_mobile.c

@@ -541,6 +541,26 @@ static int l_mobile_enbid(lua_State* L) {
     return 1;
 }
 
+/**
+获取当前服务小区更详细的信息
+@api mobile.scell()
+@return int 服务小区的MCC
+@return int 服务小区的MNC
+@return int 服务小区的下行earfcn
+@return int 服务小区的pci
+@usage
+-- 本API于 2024.9.12 新增
+ */
+static int l_mobile_scell_extern_info(lua_State* L) {
+	luat_mobile_scell_extern_info_t info;
+    luat_mobile_get_extern_service_cell_info(&info);
+    lua_pushinteger(L, info.mcc);
+    lua_pushinteger(L, info.mnc);
+    lua_pushinteger(L, info.earfcn);
+    lua_pushinteger(L, info.pci);
+    return 4;
+}
+
 /**
 进出飞行模式
 @api mobile.flymode(index, enable)
@@ -1022,6 +1042,7 @@ static const rotable_Reg_t reg_mobile[] = {
     {"snr",             ROREG_FUNC(l_mobile_snr)},
     {"eci",             ROREG_FUNC(l_mobile_eci)},
     {"tac",             ROREG_FUNC(l_mobile_tac)},
+	{"scell",			ROREG_FUNC(l_mobile_scell_extern_info)},
     {"enbid",           ROREG_FUNC(l_mobile_enbid)},
     {"flymode",         ROREG_FUNC(l_mobile_flymode)},
     {"simid",           ROREG_FUNC(l_mobile_simid)},
@@ -1199,6 +1220,19 @@ end)
             lua_pushstring(L, "CELL_INFO_UPDATE");
             lua_call(L, 1, 0);
 		    break;
+        case LUAT_MOBILE_SERVICE_CELL_UPDATE:
+/*
+@sys_pub mobile
+服务小区额外信息更新
+SCELL_INFO
+@usage
+-- 订阅式
+sys.subscribe("SCELL_INFO", function()
+    log.info("service cell", mobile.scell()))
+end)
+*/
+            lua_pushstring(L, "SCELL_INFO");
+            lua_call(L, 1, 0);
         default:
             break;
         }

+ 9 - 0
components/mobile/luat_mobile.h

@@ -572,6 +572,7 @@ typedef enum LUAT_MOBILE_CELL_INFO_STATUS
 	LUAT_MOBILE_CELL_INFO_UPDATE = 0,	/**< 小区基站信息变更,只有设置了周期性搜索小区基站时才会有*/
 	LUAT_MOBILE_SIGNAL_UPDATE,			/**< 网络信号状态变更,但是不一定是有变化*/
 	LUAT_MOBILE_PLMN_UPDATE,			/**< 搜索到新的plmn*/
+	LUAT_MOBILE_SERVICE_CELL_UPDATE,	/**< 服务小区信息变更*/
 }LUAT_MOBILE_CELL_INFO_STATUS_E;
 
 typedef enum LUAT_MOBILE_PDP_STATUS
@@ -942,5 +943,13 @@ enum
 	LUAT_MOBILE_LOCK_CELL_OP_UNLOCK_CELL,
 };
 int luat_mobile_lock_cell(uint32_t op, uint32_t earfcn, uint16_t pci);
+typedef struct
+{
+	uint32_t earfcn;
+	uint16_t pci;
+	uint16_t mcc;
+	uint16_t mnc;
+}luat_mobile_scell_extern_info_t;
+int luat_mobile_get_extern_service_cell_info(luat_mobile_scell_extern_info_t *info);
 /** @}*/
 #endif

+ 5 - 1
demo/mobile/main.lua

@@ -88,7 +88,11 @@ sys.taskInit(function()
         sys.wait(15000)
     end
 end)
-
+-- 订阅式, 模块本身会周期性查询基站信息,但通常不包含临近小区
+sys.subscribe("SCELL_INFO", function()
+	local mcc,mnc,earfcn,pci = mobile.scell()
+    log.info("scell", mcu.x32(mcc), mcu.x32(mnc), earfcn, pci)
+end)
 -- 基站数据的查询
 
 -- 订阅式, 模块本身会周期性查询基站信息,但通常不包含临近小区