b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

Msm8994热插拔SIM卡导致调制解调器重新启动

电脑杂谈  发布时间:2020-03-31 20:16:57  来源:网络整理

手机modem重启_手机的modem_手机modem重启

作者: lover713814发表: 2015-5-28 15:23

重新激活调制解调器侧的协议栈后,将调用mcfg_utils_reset_modem

mcfg_utils_reset_modem->

result = efs_sync(“ /”);

sys_m_request_peripheral_restart_ssreq(&mcfg_utils_sys_m_ssreq_reset_cb);

ssreq_process_request(SSREQ_PERIPHERAL_RESTART手机modem重启,ind_cb_fn);

案例SSREQ_PERIPHERAL_RESTART:

ssreq_restart_peripheral();

ssreq_p_restart_req.ss_client_id = SSREQ_QMI_CLIENT_INSTANCE_MPSS_V01;

qmi_client_send_msg_sync(ssreq_client_handle,SSREQ_PERIPHERAL_RESTART,(void *)&ssreq_p_restart_req,sizeof(ssreq_p_restart_req),

(void *)&ssreq_p_restart_resp,sizeof(ssreq_p_restart_resp),0); // QMI_SSREQ_PERIPHERAL_RESTART_REQ_V01 0x0022 // 1向AP发送重置请求

--------------------------------------------------- -------------------------------------------------- -----------------

在AP端接收QMI_SSREQ_PERIPHERAL_RESTART_REQ_V01的过程

在/ msm8994_c3012.2 /供应商/ qcom /专有/设备管理器/ pm-server / PeripheralManagerServer.cpp

qmi_csi_cb_errorqmiServerProcessRequest(无效* __ qmiClient,qmi_req_handle reqHandle,无符号intmsgId,无效* reqStruct,无符号int reqStructLen,无效* __ pmService)

案例QMI_SSREQ_PERIPHERAL_RESTART_REQ_V01:

qmiServerPeripheralRestart(qmiClient,reqHandle,msgId,reqStruct,pmService);

pmService-> restartPeripheral(标识符,qmiClient);

peripheral = findBySubSystem(标识符);

started =设备-> setRestartRequested((void *)qmiClient);

手机modem重启_手机modem重启_手机的modem

notifyClients(EVENT_PERIPH_GOING_OFFLINE);

client-> eventSend(事件);

mClientCb-> notifyCallback((int32_t)事件);

// pm_proxy_event_notifierssctl_shutdown_cbapp_event_notifierqmi_ril_pm_event_notifier

//所有前四个回调函数将调用以下函数

pm_client_event_acknowledge(client_cookie,事件);

client-> ops->确认(client-> id,(int64_t)事件);

// itshouldcallPeripheralManagerServer ::确认,但是我不知道怎么做!

peripheral-> notifyClientAck(客户端,(枚举pm_event)事件);

response.resp.result = QMI_RESULT_SUCCESS_V01;

response.resp.error = QMI_ERR_NONE_V01;

qmi_csi_send_resp(reqHandle,msgId和响应,sizeof(响应)); // 2个resp来回复调制解调器端的重置请求

peripheral-> notifyClientAck(客户端,(枚举pm_event)事件);

案例EVENT_PERIPH_GOING_OFFLINE:

sendRestartIndication();

client =(qmi_client_handle)mRestartRequestor;

msgId = QMI_SSREQ_PERIPHERAL_RESTART_IND_V01;

ind.status = SSREQ_QMI_REQUEST_SERVICED_V01;

ret = qmi_csi_send_ind(client,msgId,&ind,sizeof(ind)); // 3将QMI_SSREQ_PERIPHERAL_RESTART_IND_V01发送到调制解调器

如果(mFileDesc> 0){

手机modem重启_手机的modem_手机modem重启

如果(!mSimulationMode)

ret =关闭(mFileDesc); //将调用subsys_device_close询问调制解调器是否要重置// 5调制解调器关闭的过程

mFileDesc = -1;

mPowerOffCount ++;

notifyClients(EVENT_PERIPH_IS_OFFLINE); // 6将状态更改为离线

caseEVENT_PERIPH_IS_OFFLINE

如果(isRestartRequested())

setRestartRequested(NULL);

notifyClients(EVENT_PERIPH_GOING_ONLINE); // 7将状态更改为

案例EVENT_PERIPH_GOING_ONLINE:

如果(mFileDesc <0)

如果(!mSimulationMode)

mFileDesc =打开(mDeviceFile,O_RDONLY); // 8将调用subsys_device_open重新加载并打开调制解调器

mFileDesc = 1;

如果(mFileDesc> 0)

mPowerOnCount ++;

如果(mFileDesc> 0){

notifyClients(EVENT_PERIPH_IS_ONLINE);

subsys_device_close

subsystem_put(subsys_dev);

手机modem重启_手机modem重启_手机的modem

subsys_stop(subsys);

subsys-> desc-> sysmon_shutdown_ret = sysmon_send_shutdown(subsys-> desc); //5.1将QMI_SSCTL_SHUTDOWN_REQ_V02发送到调制解调器,并让调制解调器进行自己的内部关闭准备并等待响应

notify_each_subsys_device(&subsys,1,SUBSYS_BEFORE_SHUTDOWN,NULL); //通知其他子系统

subsys-> desc->关闭(subsys-> desc,false); // 5.2调用调制解调器关闭功能以关闭调制解调器

subsys_set_state(subsys,SUBSYS_OFFLINE);

disable_all_irqs(subsys);

notify_each_subsys_device(&subsys,1手机modem重启,SUBSYS_AFTER_SHUTDOWN,NULL);

sysmon_send_shutdown

req_desc.msg_id = QMI_SSCTL_SHUTDOWN_REQ_V02 //同时发送到调制解调器并等待响应,以表明调制解调器已完成正常关机

--------------------------------------------------- -------------------------------------------------- ------------------

4收到AP发送的QMI_SSREQ_PERIPHERAL_RESTART_IND_V01后的调制解调器处理

mcfg_utils_sys_m_ssreq_reset_cb

mcfg_utils_cmd_send(MCFG_UTILS_CMD_RESET);

utils_cmd_data =(mcfg_utils_cmd_data_s_type *)cmd->数据;

utils_cmd_data-> cmd_id = utils_cmd;

mcfg_task_cmd_send(cmd)

caseMCFG_UTILS_CMD_RESET

timer_set(&mcfg_utils_reset_timer,MCFG_UTILS_RESET_TIMER_TIMEOUT,0,T_SEC);

超时后将调用计时器

mcfg_utils_cmd_reset_timer_cb将再次被调用

手机modem重启_手机modem重启_手机的modem

mcfg_utils_reset_modem(

#ifdefMCFG_MODEM_INITITIATED_GRACEFUL_RESET_SUPPORT_W_REASON

SSREQ_QMI_RES_MODEM_CONF_CHANGE

#endif

);

--------------------------------------------------- -------------------------------------------------- ------------------

从AP收到QMI_SSCTL_SHUTDOWN_REQ_V02后的6调制解调器处理

ssctl_v02_ser_process_req

caseQMI_SSCTL_SHUTDOWN_REQ_V02:

qmi_csi_send_resp(req_handle,msg_id,响应,sizeof(qmi_ssctl_shutdown_resp_msg_v02)); // 7实际上,调制解调器尚未完成响应并发送响应

sys_m_shutdown(SYS_M_QMI);

sys_m_shutdown_internal(); //调制解调器在内部执行重启过程,但不会以错误的方式通知AP

rcecb_signal_name(SYS_M_SHUTDOWN); //发送SYS_M_SHUTDOWN,这将触发注册此消息的回调函数.

req_count = rcevt_getcontexts_name(SYS_M_SHUTDOWN); //获取在SYS_M_SHUTDOWN中注册的任务数

orig_ack_count = rcevt_getcount_name(SYS_M_SHUTDOWN_ACK); //获取在SYS_M_SHUTDOWN_ACK中注册的任务数

rcevt_signal_name(SYS_M_SHUTDOWN); //发送SYS_M_SHUTDOWN,它将触发注册了该信号的任务运行

rcevt_wait_count_name(SYS_M_SHUTDOWN_ACK,req_count + orig_ack_count); //等待响应.

err = qmi_csi_send_ind((qmi_sys_m_client.qmi_client_handle),QMI_SSCTL_SHUTDOWN_READY_IND_V02,&ind,sizeof(qmi_ssctl_shutdown_ind_msg_v02));

HAL_dogDisable();

qurt_exception_raise_fatal(); //我看不到代码,我也不知道它是干什么的,但是造成任何致命的后果没有任何意义.

while(1){} //无穷循环,等待重置

«Linux CPU核心电源管理(2)_cpu拓扑| Linux内核同步机制(五): 读/写自旋锁»


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/sanxing/article-159246-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...