继续I2C读写
早上做了一个温度实验,把手机放到70度测试了一下GPADC读出来的电压值,为了确定这个电压值和温度的对应关系,好调整这个关系的数组。明天还得做其它温度的实验。上午写好了温度判断的代码,给电池的health节点,就是sysfs里的一个attribute,在power_supply.c里建立 的。根据温度给它返回一个Cold,Overheat,Good的值来确定它的健康状态。
然后下午和晚上,优化了一下代码,改了几个寄存器值的错误。把几个函数封装了一下。
最重要的是下午在打patch的时候发现了一个XXX_page_reg_write的函数,是一个i2c的读写函数,回来在内核代码里没有找到,估计是私有的代码。看了看实现,真是搞不懂,里面先写i2c写了几个寄存器,是在spec上找不到的寄存器,然后写那个要写的数据,然后又写了几个寄存器。这几个寄存器大概是FA,FB,FC之类的,一共有5个,前面3个,后面2个。而且用的是xxx_write_device(i2c, reg, 0, &zero)的方法,zero又是一个没有初始化的int型,这个函数再跟进去的话,buf[0]是一个reg,buf[1]当然啥也没有,i2c_master_send就送了一个字节,就是个寄存器地址。这个玩意有点费解,后来问了一下同事,他说这玩意也看不出来啥,得知道这几个寄存器是有啥特殊功能的。以前有这种类似的就是设一个寄存器的值,然后另外的寄存器功能就会不同。但是这个我实在是不知道。。。。有点杯具啊。。
晚上突然想起来了前几天看的一个printf的语句,int a = 3; printf(&a[“abcHello”]);打印出来个Hello。
我觉得这个不看汇编直接解释的话应该是跟数组那个a[1]和1[a]是类似的。这里[]也起了地址相加的功能.”abcHello”的地址加3正好是“Hello”的地址,[]还有解引用的作用,再取地址正好就是字符串”Hello”,不错的一个东西啊。哈哈。
洗洗睡吧。