msm8953平台 sensor笔记

typedef struct
 { 
   qmi_client_os_params        os_params;
   qmi_client_type             user_handle;
   qmi_client_type             notifier_handle;
   uint8_t                     svc_num;
 } smgr_mr_qmi_client_if_s;
 
 
 typedef struct  
 {
   /* QMI client interface */
   smgr_mr_qmi_client_if_s     qmi_cl_reg;
   
   sns_q_s                     msg_queue;
   OS_EVENT*                   msg_queue_mutex_ptr;
 
   sns_q_s                     req_queue;
   OS_EVENT*                   req_queue_mutex_ptr;
   
 } sns_smgr_mr_s;
 
sns_smgr_mr_msg_s* sns_smgr_mr_get_msg(void)
{
   uint8_t            os_err;
   sns_smgr_mr_msg_s* msg_ptr = NULL;
   /* ---------------------------------------------------------------------- */
       
   sns_os_mutex_pend(sns_smgr_mr.msg_queue_mutex_ptr, 0, &os_err );
   
   msg_ptr = (sns_smgr_mr_msg_s*) sns_q_get(&sns_smgr_mr.msg_queue);
   
   (void)sns_os_mutex_post(sns_smgr_mr.msg_queue_mutex_ptr );
       
   return msg_ptr;

sensor函数调用流程:
1.main() //sns_pd.c文件
2.coremain_main() /* Core Init for user PD */
3.qurt_elite_globalstate_init(); /* Init global state structure *///初始化的值都为0或者为NULL
4.sns_init(); //sensor init  ----->接下来就是进入一个死循环,函数的主要在 init 函数中;
5.sns_profiling_init(); /* 初始化模组 */ //m模组就是sensor芯片集成到一块PCB板上
6.sns_init_once(); /* const sns_init_fcn init_ptrs[] = SNS_INIT_FUNCTIONS; //函数名放到数组里面去 */
/* SNS_INIT_FUNCTIONS  = {} 一系列的sensor初始化函数,根据宏定义来的,文件在sns_init.h中 */
7.sns_heap_init(); /* sensor 堆的初始化,堆的空间大小为 512K */
8.sns_os_sigs_create(); /* 核心是调用malloc()函数来申请一个 os_FLAG_GNP 结构体类型的变量 */
9.for循环依次去执行 init_ptrs[i]();  /* 该函数名数组中,存放着一些初始化函数,如:sns_init_dsps, sns_em _init, sns_smgr_init 等函数*/
10.sns_smgr_init();--> sns_os_task_create_ext(sns_smgr_task, NULL,.....);//smgr: sensors manager 通过这个函数进入sensors驱动函数;
/*
#ifdef FEATURE_MSM8960
#  define SNS_INIT_FUNCTIONS   \
  {   sns_memmgr_init,         \  // 内存管理器
      sns_init_dsps,           \  // 各种dsps服务的初始化
      sns_em_init,             \  // 事件管理器
      sns_smr_init,            \  // Message Router用于传递消息(resp/ind)
      sns_dl_init,             \  // Dynamic Loading service
      sns_smgr_init,           \  // Sensor Manager(核心部分)
      sns_scm_init,            \  // 检验管理器
      sns_sam_init,            \  // 算法管理器
      sns_pm_test_task_init,   \  // 
      dog_init,                \
      NULL }
*/
11.调用sns_os_task_create_ext()函数中的sns_smgr_task的函数,该函数初始化SMGR 模块;
12.sns_init();/*  sensor 初始化 */
13.sns_init_once(); /* */
14.sns_smgr_init(); /* */
15.sns_smgr_task(); /* */
16.sns_smgr_hw_init(); /* 进行一些的ADSP初始化和sensors模块的硬件初始化;并调用sns_smgr_process_msg(void) */
17.sns_smgr_process_msg(void); /* 从消息队列中,去获取要处理的消息,并在这函数中把参数变量向下传递 ,函数遍历调用*/
 SMGR_STATIC void sns_smgr_process_msg(void)
 {                                                                                                                                                    
   sns_smgr_mr_msg_s* msg_ptr;
 
   sns_smgr_update_last_tick();
 
   while ( NULL != (msg_ptr = sns_smgr_mr_get_msg()) )
   {
     sns_smgr_mr_header_s* hdr_ptr = &msg_ptr->header;
     SNS_SMGR_PRINTF3(
       MED, "process_msg - svc=%d msg=0x%x now=%u",
       hdr_ptr->svc_num, hdr_ptr->msg_id, sns_smgr.last_tick);

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值