Jelajahi Sumber

add:mobile加入drx周期和idle邻区测量阈值上报

alienwalker 6 bulan lalu
induk
melakukan
a9cd331a0d

+ 40 - 1
components/mobile/luat_lib_mobile.c

@@ -1260,7 +1260,7 @@ static int l_mobile_event_handle(lua_State* L, void* ptr) {
     uint8_t index = 0;
     uint8_t status = 0;
     int ret = 0;
-
+    int16_t sIntraSearchP, sNonIntraSearchP, sIntraSearchQ, sNonIntraSearchQ;
 
     rtos_msg_t* msg = (rtos_msg_t*)lua_topointer(L, -1);
     event = msg->arg1;
@@ -1561,6 +1561,45 @@ end)
             break;
         }
         break;
+	case LUAT_MOBILE_EVENT_RRC:
+		LLOGD("LUAT_MOBILE_EVENT_RRC status %d",status);
+/*
+@sys_pub mobile
+通话状态变化,2025/9/15启用
+RRC_IND
+@usage
+sys.subscribe("RRC_IND", function(event, value, ...)
+	log.info("rrc status", event, value, ...)
+end)
+event目前有
+1、"DRX",DRX周期值,后续跟1个参数为具体的DRX周期值,单位ms,目前只有320,640,1280,2560
+2、"IDLE_MEAS_THRESHOLD",RRC IDLE下邻区测量阈值,后续跟4个参数为具体的测量阈值,单位dbm
+4个参数分别为sIntraSearchP, sNonIntraSearchP, sIntraSearchQ, sNonIntraSearchQ
+当rsrp <= sIntraSearchP,启动同频邻区测量,低功耗下功耗有所升高
+当rsrp <= sNonIntraSearchP,启动异频邻区测量,低功耗下功耗显著升高
+如果sIntraSearchQ不为0,当rsrq <= sIntraSearchQ,启动同频邻区测量,低功耗下功耗有所升高
+如果sNonIntraSearchQ不为0,当rsrq <= sNonIntraSearchQ,启动异频邻区测量,低功耗下功耗显著升高
+*/
+		switch(status)
+		{
+		case LUAT_MOBILE_RRC_DRX_CYCLE_UPDATED:
+            lua_pushstring(L, "RRC_IND");
+            lua_pushstring(L, "DRX");
+            lua_pushinteger(L, index * 320);
+            lua_call(L, 3, 0);
+			break;
+		case LUAT_MOBILE_RRC_IDLE_MEAS_THRESHOLD:
+            lua_pushstring(L, "RRC_IND");
+            lua_pushstring(L, "IDLE_MEAS_THRESHOLD");
+            luat_mobile_rrc_get_idle_meas_threshold(&sIntraSearchP, &sNonIntraSearchP, &sIntraSearchQ, &sNonIntraSearchQ);
+            lua_pushinteger(L, sIntraSearchP);
+            lua_pushinteger(L, sNonIntraSearchP);
+            lua_pushinteger(L, sIntraSearchQ);
+            lua_pushinteger(L, sNonIntraSearchQ);
+            lua_call(L, 6, 0);
+			break;
+		}
+		break;
 	default:
 		break;
 	}

+ 9 - 0
components/mobile/luat_mobile.h

@@ -532,6 +532,7 @@ typedef enum LUAT_MOBILE_EVENT
 	LUAT_MOBILE_EVENT_IMS_REGISTER_STATUS, /**< IMS注册状态,volte必须在注册成功情况下使用*/
 	LUAT_MOBILE_EVENT_CC,	/**< 通话相关消息*/
 	LUAT_MOBILE_EVENT_USB_ETH_ON,
+	LUAT_MOBILE_EVENT_RRC,
 	LUAT_MOBILE_EVENT_FATAL_ERROR = 0xff,/**< 网络遇到严重故障*/
 }LUAT_MOBILE_EVENT_E;
 
@@ -648,6 +649,12 @@ typedef enum LUAT_MOBILE_CC_PLAY_IND
 	LUAT_MOBILE_CC_PLAY_CALL_INCOMINGCALL_RINGING, /**< 播放来电铃声*/
 }LUAT_MOBILE_CC_PLAY_IND_E;
 
+typedef enum LUAT_MOBILE_RRC_IND
+{
+	LUAT_MOBILE_RRC_DRX_CYCLE_UPDATED,
+	LUAT_MOBILE_RRC_IDLE_MEAS_THRESHOLD,
+	LUAT_MOBILE_RRC_IDLE_MEAS_ACTION,
+}LUAT_MOBILE_RRC_IND_E;
 /**
  * @brief 获取当前SIM卡状态
  *
@@ -735,6 +742,8 @@ void luat_mobile_rrc_auto_release_pause(uint8_t onoff);
  */
 void luat_mobile_rrc_release_once(void);
 
+void luat_mobile_rrc_get_idle_meas_threshold(int16_t *sIntraSearchP, int16_t *sNonIntraSearchP, int16_t *sIntraSearchQ, int16_t *sNonIntraSearchQ);
+
 /**
  * @brief 获取当前与基站的RRC状态,等于AT+CSCON
  *

+ 13 - 0
luat/demo/mobile/main.lua

@@ -121,6 +121,19 @@ sys.subscribe("SIM_IND", function(status, value)
 	if status == "SIM_WC" then
         log.info("sim", "write counter", value)
     end
+end)
+
+sys.subscribe("RRC_IND", function(event, v1, v2, v3, v4)
+	log.info("rrc status", event)
+	if event == "DRX" then
+		log.info("drx周期", v1, "ms")
+	end
+	if event == "IDLE_MEAS_THRESHOLD" then
+		log.info("sIntraSearchP", v1)
+		log.info("sNonIntraSearchP", v2)
+		log.info("sIntraSearchQ", v3)
+		log.info("sNonIntraSearchQ", v4)
+	end
 end)
 
 -- 用户代码已结束---------------------------------------------