Normal mode下,sensor校准数据,恢复出厂设置,不丢失

目前支持的ACC,GYRO,PS 三种sensor的校准数据,是保存在nvram中,并且也有加入到nvram binregion中,可以实现恢复出厂设置后,sensor校准数据的恢复。

但是nvram binregion中的sensor数据是要在产线上做校准并保存的,而且永远都是这个固定值。

但是客户实际上是在normal mode下,需要随时做校准,而且需要保存最近的校准值不丢失。

因nvram binregion和sensor daemon源码不开放,所以无法将sensor nvram保存在pro_info中。

现提供对sensor nvram的backup的功能,来实现sensor数据的保存。

1. 确认打开 MTK_PRODUCT_INFO_SUPPORT

修改alps/mediatek/config/$project/ProjectConfig.mk: MTK_PRODUCT_INFO_SUPPORT=yes

MTK_PRODUCT_INFO_SUPPORT 也必须存在于 AUTO_ADD_GLOBAL_DEFINE_BY_NAME  中。

2. 定义所需要保存的结构体

这里定义了 ACC,GYRO,PS 三种结构体到一个backup的数据中,可以根据需要做添加或删除,文件名字可以自定义,或者添加到已有的文件中。

\mediatek\custom\$project\cgen\cfgfileinc\CFG_XXXX_File.h

//the new record for the hwmon sensor backup data

#define CFG_HWMON_BACKUP_RESERVED_SIZE (1024-CFG_FILE_HWMON_ACC_REC_SIZE-CFG_FILE_HWMON_GYRO_REC_SIZE-CFG_FILE_HWMON_PS_REC_SIZE)

typedef struct{

NVRAM_HWMON_ACC_STRUCT hwmon_acc;

NVRAM_HWMON_GYRO_STRUCT hwmon_gyro;

NVRAM_HWMON_PS_STRUCT hwmon_ps;

unsigned char reserved[CFG_HWMON_BACKUP_RESERVED_SIZE];

}HWMON_BACKUP_STRUCT;

#define CFG_FILE_HWMON_BACKUP_SIZE  sizeof(HWMON_BACKUP_STRUCT)

#define CFG_FILE_HWMON_BACKUP_TOTAL  1

//此结构体数据的default值

\mediatek\custom\$project\cgen\cfgdefault\CFG_XXXX_Default.h

HWMON_BACKUP_STRUCT st_hwmon_backup_default =

{

//acc

{0},

//gyro

{0},

//ps

{0},

//reserved

{0}

};

3. 添加新的nvram数据的定义

\mediatek\custom\$project\cgen\inc\Custom_NvRam_LID.h

//添加LID定义

AP_CFG_RDCL_HWMON_BACKUP_LID, //new add

AP_CFG_CUSTOM_FILE_MAX_LID,

} CUSTOM_CFG_FILE_LID;

//添加LID版本信息

#define AP_CFG_RDCL_HWMON_BACKUP_LID_VERNO      "000"

//注意此table中添加的位置,需要和 CUSTOM_CFG_FILE_LID 中的位置对应。

\mediatek\custom\$project\cgen\inc\CFG_file_info_custom.h

const TCFG_FILE g_akCFG_File_Custom[]=

{

....

{ "/data/nvram/APCFG/APRDCL/HWMON_BACKUP",   VER(AP_CFG_RDCL_HWMON_BACKUP_LID), CFG_FILE_HWMON_BACKUP_SIZE,

CFG_FILE_HWMON_BACKUP_TOTAL, SIGNLE_DEFUALT_REC  ,    (char *)&st_hwmon_backup_default, DataReset , NULL

},

};

//Meta tool需要读取的信息

\mediatek\custom\$project\cgen\inc\Custom_NvRam_data_item.h

LID_BIT VER_LID(AP_CFG_RDCL_HWMON_BACKUP_LID)

HWMON_BACKUP_STRUCT *CFG_FILE_HWMON_BACKUP_TOTAL

{

};

4. 添加nvram到product_info

JB:\mediatek\custom\common\cgen\CFG_file_info.c

KK:\mediatek\external\nvram\libcustom_nvram\CFG_file_info.c

const TABLE_FOR_SPECIAL_LID g_new_nvram_lid[] =

{

{ AP_CFG_REEB_PRODUCT_INFO_LID, 0, 1024 * 1024 },

{ AP_CFG_RDCL_HWMON_BACKUP_LID, 1024 * 1024, 1024 * 1024 },

};

5. 实现备份还原的code

\mediatek\external\nvram\libnvram_daemon_callback\libnvram_daemon_callback.c

int my_callback(void)

{

ALOGD("nvram daemon callback will run!!!");

my_nvram_daemon(); //add

return 0;

}

int my_nvram_daemon(void)

{

int err = 0, ret = 0;

F_ID fd;

int rec_size, rec_num;

HWMON_BACKUP_STRUCT hwmon_backup;

NVRAM_LOG("ready to read hwmon backup\n");

/* read the hwmon backup data */

fd = NVM_GetFileDesc(AP_CFG_RDCL_HWMON_BACKUP_LID, &rec_size, &rec_num, ISREAD);

if(fd.iFileDesc < 0)

{

NVRAM_LOG("null hwmon backup file handle pointer: %d!\n", fd.iFileDesc);

err = -EFAULT;

return err;

}

ret = read(fd.iFileDesc, &hwmon_backup, (rec_size * rec_num));

if(ret < 0)

{

NVRAM_LOG("read hwmon backup file error: %d!\n", ret);

err = -EFAULT;

}

NVM_CloseFileDesc(fd);

NVRAM_LOG("hwmon backup data, hwmon_acc:%d-%d-%d\n", hwmon_backup.hwmon_acc.offset[0], hwmon_backup.hwmon_acc.offset[1], hwmon_backup.hwmon_acc.offset[2]);

/* set the hwmon acc data */

fd = NVM_GetFileDesc(AP_CFG_RDCL_HWMON_ACC_LID, &rec_size, &rec_num, ISWRITE);

ret = write(fd.iFileDesc, &hwmon_backup.hwmon_acc, (rec_size * rec_num));

NVM_CloseFileDesc(fd);

NVRAM_LOG("hwmon backup data, hwmon_gyro:%d-%d-%d\n", hwmon_backup.hwmon_gyro.offset[0], hwmon_backup.hwmon_gyro.offset[1], hwmon_backup.hwmon_gyro.offset[2]);

/* set the hwmon gyro data */

fd = NVM_GetFileDesc(AP_CFG_RDCL_HWMON_GYRO_LID, &rec_size, &rec_num, ISWRITE);

ret = write(fd.iFileDesc, &hwmon_backup.hwmon_gyro, (rec_size * rec_num));

NVM_CloseFileDesc(fd);

NVRAM_LOG("hwmon backup data, hwmon_ps:%d-%d-%d\n", hwmon_backup.hwmon_ps.ps_cali[0], hwmon_backup.hwmon_ps.ps_cali[1], hwmon_backup.hwmon_ps.ps_cali[2]);

/* set the hwmon ps data */

fd = NVM_GetFileDesc(AP_CFG_RDCL_HWMON_PS_LID, &rec_size, &rec_num, ISWRITE);

ret = write(fd.iFileDesc, &hwmon_backup.hwmon_ps, (rec_size * rec_num));

NVM_CloseFileDesc(fd);

return err;

}

7. sensor校准客制化

这里实现了对sensor 校准数据的backup,但是在具体sensor的校准数据保存的地方,需要将数据同时保存到 AP_CFG_RDCL_HWMON_BACKUP_LID 上,否则无效。

时间: 2024-10-23 12:36:26

Normal mode下,sensor校准数据,恢复出厂设置,不丢失的相关文章

恢复出厂设置后能找回手机数据吗?手机恢复出厂设置后还原数据的方法介绍

走在大街上,使用智能手机的用户随处可见,伴随着智能手机的普及,随之而来的"恢复出厂设置"问题也不容忽视.简单来说,恢复出厂设置就是将手机回到最原始的状态,比如说,你的手机软件太多了,并且因为这些软件老是出现一些问题,还占据了手机的很多存储,或者手机出现了小问题,这个时候就可以用它了. 在恢复出厂设置后,手机中原来的数据还能否还原?相信这是所有手机用户都关心的一个问题,如果我们在进行出厂设置的时候没有妥善的备份我们的数据,该如何是好呢?如何找回出厂设置后丢失的数据呢?不用担心,只需借助一

OpenWRT 恢复出厂设置命令

如果通过无线或者有线口无法连接到router,可以用恢复某些设置重新设置路由器. 1. 开机,等着一个工作灯亮的时候立即按下rest键2秒,然后就开始拼命闪烁,很好现在进入failsafe模式了. 2.设置电脑的ip为静态ip 192.168.1.x,并设置子网掩码(一般为点一下自动填充). 3.用网线连接路由器的有线口. 4.telnet到路由器,默认ip为192.168.1.1 5.若只是修改某些设置可以:(uci这个命令是很有用的) 进入后mount可以看到root是不给写的,所以还要解锁

预置资源,恢复出厂设置保留

说明:由于厂商要求预置自定义资源,须在Gallery显示及恢复出厂设置后仍然保留,前期想法为直接预置到data分区下,这样Gallery就可以直接读取,但是恢复出厂设置之后整个分区都会被格式化,所以这个办法行不通,要想解决这个问题,资源就必须放到一个system分区里备份,为了开放资源让应用程序能够共享,最终还得把资源复制到data(storage/emulated/0/...)分区里,所以这里就分两步走,第一是把资源预置到系统分区,然后第一个开机后再把资源复制到指定目录. 1.预置资源 可以把

苹果电脑(Mac mini或Macbook或iMac)恢复出厂设置

苹果电脑(Mac mini或Macbook或iMac)恢复出厂设置,首先要做好如下的准备: 第一:数据的备份:第二:保证正常的wifi连接:第三:有线的鼠标键盘连接: 具体恢复操作步骤: 步骤一:电脑启动时,按下键盘组合键(option + command + R,或alt + command + R):然后显示器屏幕上会显示小地球,且出现倒计时: 步骤二:倒计时结束后,出现macOS实用工具,选择第四个选择"磁盘工具",如下图所示: 步骤三:选择内置主硬盘,接着选择"抹掉&

Android恢复出厂设置

恢复出厂设置核心代码: sendBroadcast(new Intent("android.intent.action.MASTER_CLEAR")); 即发送一个广播,需要在AndroidManifest.xml配置 <receiver android:name="com.android.server.MasterClearReceiver"           android:permission="android.permission.MAST

enable密码重置及恢复出厂设置

捡回来一台 Cisco Catalyst 3560G-24TS Switch 三层交换,开始把玩 想恢复出厂设置,但有enable密码,接下来首先enable密码重置 1.断电 2.连接串口线 3.按着MODE键通电,等10秒左右松手 4.此时CLI进入Xmode # 载入flash flash_init # 重命名配置文件 rename flash:config.text flash:config.old # 启动 boot 启动后跳过向导,enable密码就没了. 其实此时就类似于恢复了出厂

android 不打开Shared sdcard功能,内置SD卡中预制资源,删除资源,恢复出厂设置恢复

当有内置SD卡,且不打开shared sdcard功能的情况下,需要在SD卡中预置一些客户资源. 这些资源end user可见,也可删除.在资源被user删除之后,执行恢复出厂设置功能,需要恢复这些预置资源. 1. 预置同样的资源到user不可见的分区,如/system下. 在alps\vendor\mediatek\project_name\artifacts\out\target\product\your_project_name\system\ 下创建目录, 将预制资源放于此目录下,重新b

手机恢复出厂设置后如新机般好用吗?答案可能要让你们哭了!

长时间使用手机,手机渐渐地会出现卡顿,内存不够的现象.这个时候很多人为了让手机变得更加流畅便选择了恢复手机出厂设置的方法.但是这样手机就真的能如同新手机一样好用吗?当然肯定不是的,我们恢复出厂设置后手机确实流畅了很多,犹如新机般好用.但是这种好用的感觉持续不了多久,为什么呢?因为手机除了系统,它的硬件老化你是控制不了的.这就是为什么电池不如新的一般耐用了.还有越来越多的手机软件的升级更新,也会占据手机更多的内存空间.所以硬件的耗损和软件的更新这两大硬伤在这,想通过恢复手机出厂设置让手机如同新机一

HILLSTONE sg6000 g5150 怎么恢复出厂设置

hillstone恢复出厂设置的方法(忘记密码的情况) 口令丢失情况下的处理 如果口令丢失,用户无法登录安全路由器进行配置,请在安全路由器刚启动时按住 CLR 按键大约 5 秒,使设备恢复到出厂配置.此时用户可以使用默认管理员“hillstone”登录 重新配置.操作步骤如下:1.闭安全路由器电源. 2.用针状物按住 CLR 按键的同时打开安全路由器电源. 3.保持按住状态直到指示灯 STA 和 ALM 均变为红色常亮,释放 CLR 按键.此时系统开始恢复出厂配置. 4.出厂配置恢复完毕,系统将