CTP固件升级接口技术规范3.0

CTP固件升级接口技术规范

一.        固件升级需求指引

调研用户,售后,工厂测试得到ctp的固件升级的基本需求如下:

1.    应用或shell命令可以强制下载ctp固件,包括降级的固件(降级固件不能重新开机,因为开机后会自动升级为软件集成的最新固件)。

2.    应用或shell命令可以要求ctp驱动升级自带的固件(如果自带的固件有多个版本,则升级到最新版)。

3.    应用或shell命令能够读取固件信息,包括版本号,名称等。

二.        整体结构框图

如上图,用户空间可以通过访问sysfs文件系统的方式与内核空间中fw_man模块进行通信,Fw_man模块与ctp模块以标准化的固件升级接口对接。用户空间传入给fw_man某种需求后,fw_man 将其分解成一条条ctp模块可执行的基本功能,然后按照一定的逻辑关系组合这些被分解后的基本功能。

 

三.        CTP驱动接口技术规范

1.Fw_man模块与CTP驱动的接口定义如下:

struct firmware_object{

//强制写固件函数指针,其中firmware是存放固件内容的指针,num为固件长度,要求固件升级动作ctp单独启动一个线程完成,相关函数应立即返回,不应有所堵塞。

      int(*write_firmware_from_sdcard)(u8 * firmware,unsigned long num);

      //固件自升级,要求升级自带的固件数组内容,要求升级最新版本的固件数组,要求固件升级动作ctp单独启动一个线程完成,相关函数应立即返回,不应有所堵塞。

int (*write_firmware_self)(void);

//读取固件ic供应商,名称,版本,固件id号等

      int(*read_firmware_profile) (char * ic, char * panel, char * fw_ver, char *cfg_id);

     //读取固件ctp升级状态

int (*read_firmware_update_state)(void);

  //ctp的名称,由ctp驱动分配

      char*firmware_name;.

      };

总之,Ctp应提供给fw_man模块以下几种接口功能:

( 1 )固件强制升级

( 2 )Ctp自升级

( 3 )升级时的状态

  0:The device updatessuccessfully.

  1:The device is updating.

-1:The device failed to update.

2:The device has not been found.

( 4 )固件的信息反馈

2.ctp的接口通过注册和注销的方式被fw_man添加和删除。

注册函数为:firmware_attach (struct firmware_object *obj);

注销函数为:firmware_dettach (struct firmware_object *obj).

这里须在ctp驱动中建立一个全局变量(struct firmware_object *fw_obj)用于向fw_man模块中添加和删除ctp对象。

这两个函数添加位置参考代码,以Gt9158为例:

( 1 )staticint tpd_local_init(void)

{

    attach_fw_man_init();

return 0;

}

( 2 )staticvoid __exit tpd_driver_exit(void)

{

… 

firmware_dettach(fw_obj->dev);

}

3.其他ctp相关接口参考(基于gt9158):

( 1 )static int ctp_write_firmware(u8 *firmware,unsigned long num){

      inti =0;

      intret;

      GTP_INFO("ctp_write_firmware\n");

      read_firmware_update_state= 1;

   ret =gup_init_update_proc_test(i2c_client_point, firmware, num);

   if (ret < 0)

   {

     GTP_ERROR("Create update thread error.");

     read_firmware_update_state = 2;

   }

      return0;

}

( 2 )int ctp_read_firmware(char * ic, char* panel, char * fw_ver, char * cfg_id){

ctp_get_pid(ic);

      ctp_get_vendor(panel);

      sprintf(fw_ver,"0x%x", ctp_get_vid());

      sprintf(cfg_id,"0x%x", ctp_get_cfg_id());

return 0;

}

( 3 )intctp_read_firmware_update_state(void){

             GTP_INFO("ctp_read_firmware_update_states\n");

      returnread_firmware_update_state;

}

( 4 )int ctp_write_firmware_self(void){

/*

  ......

      */

 return 0;

}

( 5 )intattach_fw_man_init(void)

{

      GTP_INFO("attach_fw_man_init\n");

      interr = 0;

      fw_obj= kzalloc(sizeof(struct firmware_object), GFP_KERNEL);//全局变量

      memset(fw_obj,0, sizeof(struct firmware_object));

      fw_obj->write_firmware_self= ctp_write_firmware_self;

      fw_obj->write_firmware= ctp_write_firmware;

      fw_obj->read_firmware= ctp_read_firmware;

              fw_obj->read_firmware_update_state= ctp_read_firmware_update_state;

      fw_obj->dev= 0;//可有可无,在fw_man中分配dev编号

      fw_obj->firmware_name= kzalloc(sizeof(char*), GFP_KERNEL);

      strcpy(fw_obj->firmware_name,"ctp9158");

      if(err= firmware_attach(fw_obj))

  {

         GTP_INFO("attach fail = %d\n",err);

  }

      returnerr;

}

( 6 )int dettach_fw_man_init(void)

{

int err = 0;

err =firmware_dettach(fw_obj);

return err;

}

四.        上层接口调用规范

由二的原理可知,上次接口通过访问sys文件系统操作与fw_man通信,sys文件系统路径为:/sys/class/fw_man/current/…

Sys文件系统为上层调用提供以下接口:

1.    强制升级命令接口:

接口名称: force(命令),data(数据)

路径为:/sys/class/fw_man/current/ force

使用方法:

(1)echo 1 > force       //开始写ctp固件标志

(2)cat 固件文件名 >data //传入ctp固件数据

(3)echo 0 > force      //写固件,结束

自升级命令接口;

接口名称:self

路径为:/sys/class/fw_man/current/self

使用方法:echo xx(任何) > self

例子:echo  1  >  self

2.    读取固件版本号

接口名称:version

路径为:/sys/class/fw_man/current/ version

使用方法:cat  version, 可以获取ctp的版本号和名称。

3.    读取ctp状态

接口名称:state

使用方法:cat  state, 可以获取ctp当前的状态。定义以下四种状态:

0:Thedevice updates successfully.

  1:The device is updating.

 -1:The device failed to update.

2:The device has not been found.

4.上层在固件升级时,要持有系统suspend lock,防止系统休眠,导致固件升级失败。应对用户有提示,固件升级时不能灭屏和断电,低电量的固件升级可能会失败等。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

五.fw_man基本功能程序流程图

1.Ctp注册到fw_man模块

 

 

 

 

2.强制固件升级流程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值