1.1 问题背景
开机初始化时,程序会基于i2c接口从Eeprom/OTP模块读取数据,保存在buffer缓冲区中。
在进行50M remosaic拍照时需要将buffer中xtc数据传给remosaic_gainmap_gen()。
为了确保数据正确,传入参数前需要将buffer数据dump至一个文件中,方便查看内容。
1.2 思路
读取数据:使用i2c接口读取Eeprom数据保存在buffer中;
筛选数据:从buffer中筛选出xtc数据;
打开文件:fopen创建一个新文件/data/vendor/cameraserver/s5kjn1_xtc.bin;
写入数据:fwrite将xtc数据写入上述文件中;
关闭文件:fclose关闭上述文件
1.3 实现代码
#define OTP_SIZE 0x30F0+1
#define XTALK_START 0x0cd5
#define XTALK_END 0x2f94
static cmr_u8 param_ptr_otp[OTP_SIZE] = {0x00};
static cmr_int s5kjn1_dump_xtc(void);
static char xtc_data_buf_otp[XTALK_TOTAL];
static char *bin_path = "/data/vendor/cameraserver/";
/**从Eeprom中读取数据、筛选xtc数据保存至xtc_data_buf_otp**/
//清空buffer数据
memset(param_ptr_otp, 0, sizeof(param_ptr_otp));
//i2c读取eeprom数据并保存至param_ptr_otp
rtn = hw_sensor_read_i2c(sns_drv_cxt_parameter->hw_handle, S5KJN1_EEPROM_I2C_ADDR >> 1, param_ptr_otp,
(OTP_SIZE) << 16 | SENSOR_I2C_REG_16BIT);
SENSOR_LOGD("ret:%d", rtn);
//筛选出xtc数据保存至xtc_data_buf_otp
for(i = XTALK_START; i<=XTALK_END; i++){
xtc_data_buf_otp[i-XTALK_START] = param_ptr_otp[i];
}
/**********************End***********************/
/**将xtc数据写入/data/vendor/cameraserver/s5kjn1_xtc.bin **/
static cmr_int s5kjn1_dump_xtc(void){
int i = 0;
cmr_int ret = 0;
size_t bytesWritten;
char *name = "s5kjn1";
char xtc_dta_dump_path[256];
//wb+表示以读写方式打开或新建一个二进制文件,允许读写。写入前会清空覆盖原来内容
snprintf(xtc_dta_dump_path, sizeof(xtc_dta_dump_path), "%s%s_xtc.bin", bin_path,name);
FILE *file = fopen(xtc_dta_dump_path, "wb+" );
if (file != NULL){
bytesWritten = fwrite(xtc_data_buf_otp, sizeof(char), sizeof(xtc_data_buf_otp), file);
if (bytesWritten < sizeof(xtc_data_buf_otp)) {
SENSOR_LOGE("Error writting file\n");
}
fclose(file);
}else{
SENSOR_LOGE("can't open file\n");
ret = -1;
}
SENSOR_LOGD("dump xtc file success\n");
return ret;
}
/**********************End***********************/
/****设置dump开关***/
property_get("debug.vendor.cam.otp.dump", value, "0");
if (atoi(value)) {
DumpOtp = 1;
}
if (DumpOtp) {
s5kjn1_dump_xtc();
}
/**********************End***********************/
1.4 验证
adb root
adb shell setprop debug.vendor.cam.otp.dump 1
adb shell ls -l data/vendor/cameraserver/s5kjn1_xtc.bin
adb pull data/vendor/cameraserver/s5kjn1_xtc.bin .
1.5 数据确认
NotePad++ 查看二进制文件:
文件以ff 00开头:数据正常
待续。。。