#include "string.h" #include "servicedata.h" #include #include #include // write(), close() #include #define FRAM_SIZE 2048 #define FRAM_TEST_PROCESS 0 #define fRam_path "/sys/bus/spi/devices/spi0.0/fram" #define INIT_FRAM 0 //시작시 RRAM 초기화 ServiceData::ServiceData() { qDebug()<< "Statics Data Size Report\r\n error_log size = " << sizeof(error_log) << " \r\nuse_static_log size = " << sizeof(use_statics_log) \ << "\r\nsensor_statics_log size = " << sizeof(sensor_statics_log); memset((void*)err_log.data,0x00,sizeof(error_log)); memset((void*)use_log.data,0x00,sizeof(use_statics_log)); memset((void*)sensor_log.data,0x00, sizeof(sensor_statics_log)); #if INIT_FRAM == 1 saveServiceData(); #else loadServiceData(); #endif } bool ServiceData::loadServiceData(void){ uint8_t buffs[FRAM_SIZE]; uint8_t* pBuff; int fd; pBuff = buffs; #if FRAM_TEST_PROCESS == 1 int i; memset(buffs,0x00,256); for(i=0;i<256;i++){ buffs[i] = i; } fd = open(fRam_path, O_RDWR); if(fd>0){ write(fd,buffs,256); close(fd); } else{ qDebug()<<"FRAM open fail!"; return false; } i=0; memset(buffs,0x00,256); fd = open(fRam_path, O_RDONLY ); if(fd>0){ read(fd,buffs,256); close(fd); }else{ qDebug()<<"FRAM open fail!"; return false; } for(i=0;i<256;i++){ if(i !=buffs[i]) { qDebug()<<"FRAM Test Fail"; return false; } } qDebug()<<"FRAM Test Success!"; return true; #endif fd = open(fRam_path, O_RDONLY ); if(fd>0){ memset(buffs,0x00,FRAM_SIZE); read(fd,buffs,FRAM_SIZE); if(buffs[sizeof(error_log) + sizeof(use_statics_log) + sizeof(sensor_statics_log)] != 0x9C){ qDebug() << "service data read incorrected!"; close(fd); return saveServiceData(); } qDebug() << "FRAM Read, Write Size is " << sizeof(error_log)+sizeof(use_statics_log) + sizeof(sensor_log); memcpy((void*)err_log.data,pBuff,sizeof(error_log)); pBuff += sizeof(error_log); memcpy((void*)use_log.data, pBuff,sizeof(use_statics_log));pBuff += sizeof(use_statics_log); memcpy((void*)sensor_log.data,pBuff,sizeof(sensor_statics_log)); pBuff+= sizeof(sensor_statics_log); close(fd); qDebug() <<"FRAM Load Success"; }else{ qDebug()<<"FRAM FILE Open fail!!"; } return true; } bool ServiceData::resetSensorlogData() { memset((void*)sensor_log.data,0x00, sizeof(sensor_statics_log)); return saveServiceData(); } bool ServiceData::setWashState(bool bval, bool save) { use_log.items.b_oven_state.b.wash_state = bval; if(save) return saveServiceData(); else return true; } bool ServiceData::setTotalCookingTime(uint32_t val, bool save) { use_log.items.total_cook_time = val; if(save) return saveServiceData(); else return true; } bool ServiceData::setTotalCookingCount(uint32_t val, bool save) { use_log.items.total_cook_count = val; if(save) return saveServiceData(); else return true; } bool ServiceData::addTotalCookingCount(uint32_t val, bool save) { use_log.items.total_cook_count +=val; if(save) return saveServiceData(); else return true; } bool ServiceData::addTotalCookingTime(uint32_t val, bool save) { use_log.items.total_cook_time += val; if(save) return saveServiceData(); else return true; } bool ServiceData::saveServiceData(void){ uint8_t buffs[FRAM_SIZE]; uint8_t* pBuff; int fd; pBuff = buffs; fd = open(fRam_path, O_RDWR | O_SYNC); if(fd>0){ memset(buffs,0x00,FRAM_SIZE); memcpy(pBuff,(void*)err_log.data,sizeof(error_log)); pBuff += sizeof(err_log); memcpy(pBuff,(void*)use_log.data,sizeof(use_statics_log)); pBuff += sizeof(use_statics_log); memcpy(pBuff,(void*)sensor_log.data,sizeof(sensor_statics_log)); pBuff += sizeof(sensor_statics_log); *pBuff = 0x9C; write(fd,buffs,FRAM_SIZE); close(fd); }else{ qDebug()<<"FRAM FILE Open fail!!"; return false; } return true; }