dsps部分跟AP端是采用共享内存的方式来交换信息的,对于打印来说,如果把所有的字符串都传到AP端,那么就非常占用共享的内存,所有采用了传递整型数标签的方式。首先在dsps和AP端都约定好,比如:dsps传递0,在AP端就代表"MAG8975: Initializing"这么一个字符串。
在dsps代码部分,在sns_debug_str.h文件中,定义了不同等级,不同参数个数的打印函数:
......
#define SNS_PRINTF_STRING_ID_HIGH_0(mod_id,str_id)
#define SNS_PRINTF_STRING_ID_HIGH_1(mod_id,str_id,parameter1)
......
我们在使用的时候,根据情况调用不同的函数进行打印,这里的几个参数,从字面意思上可以看到,他们分别是模块对于的ID号,模块里面对应的字符串的ID号,后面就是参数。这里说的ID,就是上面讲到的传递的整型数标签,下面就讲讲模块ID和字符串ID。
这个模块ID,在dsps部分的代码和AP端的代码都有定义,而且他们肯定是一样的,这样才是一种约定,在sns_debug_api.h有如下定义(AP端代码也有):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33typedef enum { SNS_DBG_MOD_APPS_SMR, SNS_DBG_MOD_APPS_DIAG, SNS_DBG_MOD_APPS_ACM, SNS_DBG_MOD_APPS_INIT, SNS_DBG_MOD_DSPS_SMGR, SNS_DBG_MOD_DSPS_SAM, SNS_DBG_MOD_DSPS_SMR, SNS_DBG_MOD_DSPS_DD_ACCEL, SNS_DBG_MOD_DSPS_DD_GYRO, SNS_DBG_MOD_DSPS_DD_ALSPRX, SNS_DBG_MOD_DSPS_DD_MAG8975, SNS_DBG_MOD_APPS_MAIN, SNS_DBG_MOD_EM, SNS_DBG_MOD_APPS_PWR, SNS_DBG_MOD_APPS_SAM, SNS_DBG_MOD_DSPS_SCM, SNS_DBG_MOD_APPS_SCM, SNS_DBG_MOD_MDM_SMR, SNS_DBG_MOD_MDM_DIAG, SNS_DBG_MOD_MDM_ACM, SNS_DBG_MOD_MDM_INIT, SNS_DBG_MOD_MDM_MAIN, SNS_DBG_MOD_MDM_PWR, SNS_DBG_MOD_DSPS_DAL, SNS_DBG_MOD_DSPS_DDF, SNS_DBG_MOD_APPS_REG, SNS_DBG_MOD_APPS_TIME, SNS_DBG_MOD_DSPS_DIAG, SNS_DBG_MOD_DSPS_PWR, /* Last module ID */ SNS_DBG_NUM_MOD_IDS } sns_debug_module_id_e;
那么对于字符串ID呢,在dsps会定义很多ID,然后在AP端的代码里面,会对不同的ID,定义不同的字符串,在dsps的sns_debug_api.h中截取一段光感模块的字符串ID定义:
1
2
3
4
5
6
7
8
9
10
11
12
13#define DBG_DD_ALSPRX_WR_CMD2_REG_ERR 0 #define DBG_DD_ALSPRX_WR_CMD1_REG_ERR 1 #define DBG_DD_ALSPRX_DEV_STATE_PEND 2 #define DBG_DD_ALSPRX_PRX_STATE_PEND 3 #define DBG_DD_ALSPRX_ALS_RES_INVALID 4 #define DBG_DD_ALSPRX_ALS_RNG_INVALID 5 ...
在AP端的sns_string_db.h文件里面有定义,对不同的ID定义不同的字符串,下面是截取的一部分:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20#define DD_ALPRX_STR_DB { {DBG_DD_ALSPRX_WR_CMD2_REG_ERR, "ALSPRX: Write to command2 register failed" }, /*Id 0*/ {DBG_DD_ALSPRX_WR_CMD1_REG_ERR, "ALSPRX: Write to command1 register failed" }, /*Id 1*/ {DBG_DD_ALSPRX_DEV_STATE_PEND, "ALSPRX: PRX/ALS read already pending" }, /*Id 2*/ {DBG_DD_ALSPRX_PRX_STATE_PEND, "ALSPRX: PRX read already pending" }, /*Id 3*/ {DBG_DD_ALSPRX_ALS_RES_INVALID, "ALSPRX: Invalid resolution: %d" }, /*Id 4*/ {DBG_DD_ALSPRX_ALS_RNG_INVALID, "ALSPRX: Invalid range: %d" }, /*Id 5*/ ...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36/* Pointer to debug string databases of sensor modules */ static const db_list_s sensor_dbg_db_ptrs[] = { // DIAG module {SNS_DBG_MOD_APPS_DIAG, diag_debug_str_db, (sizeof(diag_debug_str_db)/sizeof(diag_debug_str_db[0]))}, //SAM DSPS Module {SNS_DBG_MOD_DSPS_SAM, sam_debug_str_db, (sizeof(sam_debug_str_db)/sizeof(sam_debug_str_db[0]))}, //SAM Apps Module {SNS_DBG_MOD_APPS_SAM, sam_debug_str_db, (sizeof(sam_debug_str_db)/sizeof(sam_debug_str_db[0]))}, //SMGR Module {SNS_DBG_MOD_DSPS_SMGR, smgr_debug_str_db, (sizeof(smgr_debug_str_db)/sizeof(smgr_debug_str_db[0]))}, //SMR Apps Module {SNS_DBG_MOD_APPS_SMR, smr_debug_str_db, (sizeof(smr_debug_str_db)/sizeof(smr_debug_str_db[0]))}, //SMR DSPS Module {SNS_DBG_MOD_DSPS_SMR, smr_debug_str_db, (sizeof(smr_debug_str_db)/sizeof(smr_debug_str_db[0]))}, //ALS Proximity Device Driver Module {SNS_DBG_MOD_DSPS_DD_ALSPRX, dd_alsprx_debug_str_db, (sizeof(dd_alsprx_debug_str_db)/sizeof(dd_alsprx_debug_str_db[0]))}, //AKM8975 Magnetometer Device Driver Module {SNS_DBG_MOD_DSPS_DD_MAG8975, dd_mag8975_debug_str_db, (sizeof(dd_mag8975_debug_str_db)/sizeof(dd_mag8975_debug_str_db[0]))}, //Accel Device Driver Module {SNS_DBG_MOD_DSPS_DD_ACCEL, dd_accel_debug_str_db, (sizeof(dd_accel_debug_str_db)/sizeof(dd_accel_debug_str_db[0]))}, //Gyro Device Driver Module {SNS_DBG_MOD_DSPS_DD_GYRO, dd_gyro_debug_str_db, (sizeof(dd_gyro_debug_str_db)/sizeof(dd_gyro_debug_str_db[0]))}, //SCM Module {SNS_DBG_MOD_DSPS_SCM, scm_debug_str_db, (sizeof(scm_debug_str_db)/sizeof(scm_debug_str_db[0]))} };
dsps内容比较多,未完待续。。。
最后
以上就是眯眯眼大米最近收集整理的关于高通dsps部分的打印的全部内容,更多相关高通dsps部分内容请搜索靠谱客的其他文章。
发表评论 取消回复