準備檔案 cjson.c cjson.h
修改 android.bp 檔案
target/vendor/qcom/proprietary/sensors-see/sensors-hal-2.0
.h 檔案就直接放入 framework 目錄下面.
target/vendor/qcom/proprietary/sensors-see/sensors-hal-2.0/framework
srcs: [
.....
"sensors/cjson.c"
],
local_include_dirs: ["framework"],
把這個改一下,不然會編譯不過。
//#ifndef LLONG_MAX_NUM
#define LLONG_MAX_NUM 65535LL
//#endif
//#ifndef LLONG_MIN_NUM
#define LLONG_MIN_NUM (-LLONG_MAX_NUM - 1LL)
//#endif
#define CAL_BIAS_GROUP_NAME "/mnt/vendor/persist/sensors/registry/registry/xxx.fac_cal.bias"
// json 檔案内容
{"xxx.pressure.fac_cal.bias":{"owner":"tmp","x":{"type":"flt","ver":"0","data":"0.00000000"}}}
// 讀取 cjosn 中的值
void get_pressure_bias_data(void)
{
int fd = open(CAL_BIAS_GROUP_NAME,O_RDWR);
if(fd < 0)
{
sns_loge("open fail ");
return -1;
}
char buf[256]={0};
int ret = read(fd, buf, sizeof(buf));
if(ret == -1)
{
sns_loge("read error");
return -1;
}
close(fd);
cJSON *root=cJSON_Parse(buf);
if(root == NULL)
{
sns_loge("parse error\n");
return -1;
}
cJSON *platform_value = cJSON_GetObjectItem(root,"xxx.fac_cal.bias.fac_cal.bias");
if(platform_value == NULL)
{
sns_loge("GetObjec error\n");
return -1;
}
// 得到 "x" 的值
cJSON *x_value = cJSON_GetObjectItem(platform_value,"x");
if(x_value == NULL)
{
sns_loge("GetObjec error\n");
return -1;
}
// 得到 ver 的值
cJSON *ver = cJSON_GetObjectItem(x_value,"ver");
if (ver ==NULL)
{
sns_loge("ver getobjec error \n");
return -1;
}
// 得到 data 的值
cJSON *data_value = cJSON_GetObjectItem(x_value,"data");
if (data_value == NULL)
{
sns_loge("data GetObjec error\n");
return -1;
}
// 值存放在 valuestring
float bias_data = atof(data_value->valuestring);
cJSON_Delete(root);
return ;
}