652e9cd54
고영탁
Merge
|
1
|
#include "string.h"
|
14a73498f
김태훈
소스 코드 정리
|
2
|
#include "servicedata.h"
|
c50beef02
고영탁
에러 처리 루틴 및 에러 처리 ...
|
3
|
#include <QDebug>
|
6a965b9f1
고영탁
엔지니어 모드 2차 구현
|
4
5
|
#include <fcntl.h>
#include <unistd.h> // write(), close()
|
211a15bde
고영탁
dirtylevel 관련 FRA...
|
6
|
#include <dirtylevel.h>
|
6a965b9f1
고영탁
엔지니어 모드 2차 구현
|
7
8
9
10
11
|
#define FRAM_SIZE 2048
#define FRAM_TEST_PROCESS 0
#define fRam_path "/sys/bus/spi/devices/spi0.0/fram"
|
1bb5ed9dc
고영탁
popupwindow 삭제
|
12
|
#define INIT_FRAM 0 //시작시 RRAM 초기화
|
6a965b9f1
고영탁
엔지니어 모드 2차 구현
|
13
|
|
652e9cd54
고영탁
Merge
|
14
|
|
14a73498f
김태훈
소스 코드 정리
|
15
|
ServiceData::ServiceData()
|
652e9cd54
고영탁
Merge
|
16
|
{
|
6a965b9f1
고영탁
엔지니어 모드 2차 구현
|
17
18
19
20
21
|
qDebug()<< "Statics Data Size Report\r
error_log size = " << sizeof(error_log) << " \r
use_static_log size = " << sizeof(use_statics_log) \
<< "\r
sensor_statics_log size = " << sizeof(sensor_statics_log);
|
14a73498f
김태훈
소스 코드 정리
|
22
23
24
|
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));
|
211a15bde
고영탁
dirtylevel 관련 FRA...
|
25
26
|
DirtyLevel::setCookingCount(0);
DirtyLevel::setCookingTime(0);
|
6a965b9f1
고영탁
엔지니어 모드 2차 구현
|
27
|
#if INIT_FRAM == 1
|
14a73498f
김태훈
소스 코드 정리
|
28
|
saveServiceData();
|
6a965b9f1
고영탁
엔지니어 모드 2차 구현
|
29
|
#else
|
14a73498f
김태훈
소스 코드 정리
|
30
|
loadServiceData();
|
6a965b9f1
고영탁
엔지니어 모드 2차 구현
|
31
|
#endif
|
652e9cd54
고영탁
Merge
|
32
|
}
|
6a965b9f1
고영탁
엔지니어 모드 2차 구현
|
33
|
|
14a73498f
김태훈
소스 코드 정리
|
34
|
bool ServiceData::loadServiceData(void){
|
6a965b9f1
고영탁
엔지니어 모드 2차 구현
|
35
|
uint8_t buffs[FRAM_SIZE];
|
211a15bde
고영탁
dirtylevel 관련 FRA...
|
36
|
uint8_t* pBuff;
|
6a965b9f1
고영탁
엔지니어 모드 2차 구현
|
37
|
int fd;
|
211a15bde
고영탁
dirtylevel 관련 FRA...
|
38
39
40
|
qint64 temp_cookingTime = 0;
int temp_cookingCount = 0;
pBuff = buffs;
|
6a965b9f1
고영탁
엔지니어 모드 2차 구현
|
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
#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!";
|
652e9cd54
고영탁
Merge
|
74
|
return true;
|
6a965b9f1
고영탁
엔지니어 모드 2차 구현
|
75
76
77
78
79
80
81
82
83
84
85
|
#endif
fd = open(fRam_path, O_RDONLY );
if(fd>0){
memset(buffs,0x00,FRAM_SIZE);
read(fd,buffs,FRAM_SIZE);
|
211a15bde
고영탁
dirtylevel 관련 FRA...
|
86
87
|
if(buffs[sizeof(error_log) + sizeof(use_statics_log) + sizeof(sensor_statics_log) + sizeof(qint64) + sizeof(int)] != 0x9C){
qDebug() << "service data read incorrected!";
|
6a965b9f1
고영탁
엔지니어 모드 2차 구현
|
88
|
close(fd);
|
14a73498f
김태훈
소스 코드 정리
|
89
|
return saveServiceData();
|
6a965b9f1
고영탁
엔지니어 모드 2차 구현
|
90
91
92
|
}
qDebug() << "FRAM Read, Write Size is " << sizeof(error_log)+sizeof(use_statics_log);
|
211a15bde
고영탁
dirtylevel 관련 FRA...
|
93
94
95
96
97
98
99
|
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);
memcpy(&temp_cookingTime,pBuff, sizeof(qint64)); pBuff += sizeof(qint64);
memcpy(&temp_cookingCount,pBuff, sizeof(int));
DirtyLevel::setCookingCount(temp_cookingCount);
DirtyLevel::setCookingTime(temp_cookingTime);
|
6a965b9f1
고영탁
엔지니어 모드 2차 구현
|
100
101
102
103
104
|
close(fd);
}else{
qDebug()<<"FRAM FILE Open fail!!";
}
return true;
|
652e9cd54
고영탁
Merge
|
105
|
}
|
14a73498f
김태훈
소스 코드 정리
|
106
|
bool ServiceData::saveServiceData(void){
|
6a965b9f1
고영탁
엔지니어 모드 2차 구현
|
107
|
uint8_t buffs[FRAM_SIZE];
|
211a15bde
고영탁
dirtylevel 관련 FRA...
|
108
|
uint8_t* pBuff;
|
6a965b9f1
고영탁
엔지니어 모드 2차 구현
|
109
|
int fd;
|
211a15bde
고영탁
dirtylevel 관련 FRA...
|
110
111
112
|
qint64 temp_cookingTime = DirtyLevel::cookingTime();
int temp_cookingCount = DirtyLevel::cookingCount();
pBuff = buffs;
|
6a965b9f1
고영탁
엔지니어 모드 2차 구현
|
113
114
115
|
fd = open(fRam_path, O_RDWR | O_SYNC);
if(fd>0){
memset(buffs,0x00,FRAM_SIZE);
|
211a15bde
고영탁
dirtylevel 관련 FRA...
|
116
117
118
119
120
121
|
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);
memcpy(pBuff, &temp_cookingTime, sizeof(qint64)); pBuff += sizeof(qint64);
memcpy(pBuff, &temp_cookingCount, sizeof(int)); pBuff += sizeof(int);
*pBuff = 0x9C;
|
6a965b9f1
고영탁
엔지니어 모드 2차 구현
|
122
123
124
125
126
127
128
|
write(fd,buffs,FRAM_SIZE);
close(fd);
}else{
qDebug()<<"FRAM FILE Open fail!!";
return false;
}
return true;
|
652e9cd54
고영탁
Merge
|
129
|
}
|