天天看點

移值 cjson

準備檔案 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 ;
}

           

繼續閱讀