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));
|
6a965b9f1
고영탁
엔지니어 모드 2차 구현
|
25
|
#if INIT_FRAM == 1
|
14a73498f
김태훈
소스 코드 정리
|
26
|
saveServiceData();
|
6a965b9f1
고영탁
엔지니어 모드 2차 구현
|
27
|
#else
|
14a73498f
김태훈
소스 코드 정리
|
28
|
loadServiceData();
|
6a965b9f1
고영탁
엔지니어 모드 2차 구현
|
29
|
#endif
|
652e9cd54
고영탁
Merge
|
30
|
}
|
6a965b9f1
고영탁
엔지니어 모드 2차 구현
|
31
|
|
14a73498f
김태훈
소스 코드 정리
|
32
|
bool ServiceData::loadServiceData(void){
|
6a965b9f1
고영탁
엔지니어 모드 2차 구현
|
33
|
uint8_t buffs[FRAM_SIZE];
|
211a15bde
고영탁
dirtylevel 관련 FRA...
|
34
|
uint8_t* pBuff;
|
6a965b9f1
고영탁
엔지니어 모드 2차 구현
|
35
|
int fd;
|
211a15bde
고영탁
dirtylevel 관련 FRA...
|
36
|
pBuff = buffs;
|
6a965b9f1
고영탁
엔지니어 모드 2차 구현
|
37
38
39
40
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
|
#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
|
70
|
return true;
|
6a965b9f1
고영탁
엔지니어 모드 2차 구현
|
71
72
73
74
75
76
77
78
79
80
81
|
#endif
fd = open(fRam_path, O_RDONLY );
if(fd>0){
memset(buffs,0x00,FRAM_SIZE);
read(fd,buffs,FRAM_SIZE);
|
da07b3f33
고영탁
GUI V0.3.14
|
82
|
if(buffs[sizeof(error_log) + sizeof(use_statics_log) + sizeof(sensor_statics_log)] != 0x9C){
|
211a15bde
고영탁
dirtylevel 관련 FRA...
|
83
|
qDebug() << "service data read incorrected!";
|
6a965b9f1
고영탁
엔지니어 모드 2차 구현
|
84
|
close(fd);
|
14a73498f
김태훈
소스 코드 정리
|
85
|
return saveServiceData();
|
6a965b9f1
고영탁
엔지니어 모드 2차 구현
|
86
|
}
|
a46dd4409
고영탁
오븐 상태 저장 기능 추가
|
87
|
qDebug() << "FRAM Read, Write Size is " << sizeof(error_log)+sizeof(use_statics_log) + sizeof(sensor_log);
|
211a15bde
고영탁
dirtylevel 관련 FRA...
|
88
89
90
|
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);
|
6a965b9f1
고영탁
엔지니어 모드 2차 구현
|
91
|
close(fd);
|
7fa4fdb0e
고영탁
인포 데이터 다운로드 기능 개발
|
92
|
qDebug() <<"FRAM Load Success";
|
6a965b9f1
고영탁
엔지니어 모드 2차 구현
|
93
94
95
|
}else{
qDebug()<<"FRAM FILE Open fail!!";
}
|
91480de3c
고영탁
센서 실시간 데이터 리셋 기능 추가
|
96
97
98
99
100
101
|
return true;
}
bool ServiceData::resetSensorlogData()
{
memset((void*)sensor_log.data,0x00, sizeof(sensor_statics_log));
|
0faa32511
김태훈
컴파일 경고 제거 및 리팩토링
|
102
|
return saveServiceData();
|
652e9cd54
고영탁
Merge
|
103
|
}
|
a46dd4409
고영탁
오븐 상태 저장 기능 추가
|
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
|
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;
}
|
14a73498f
김태훈
소스 코드 정리
|
138
|
bool ServiceData::saveServiceData(void){
|
6a965b9f1
고영탁
엔지니어 모드 2차 구현
|
139
|
uint8_t buffs[FRAM_SIZE];
|
211a15bde
고영탁
dirtylevel 관련 FRA...
|
140
|
uint8_t* pBuff;
|
6a965b9f1
고영탁
엔지니어 모드 2차 구현
|
141
|
int fd;
|
211a15bde
고영탁
dirtylevel 관련 FRA...
|
142
|
pBuff = buffs;
|
6a965b9f1
고영탁
엔지니어 모드 2차 구현
|
143
144
145
|
fd = open(fRam_path, O_RDWR | O_SYNC);
if(fd>0){
memset(buffs,0x00,FRAM_SIZE);
|
211a15bde
고영탁
dirtylevel 관련 FRA...
|
146
147
148
|
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);
|
211a15bde
고영탁
dirtylevel 관련 FRA...
|
149
|
*pBuff = 0x9C;
|
6a965b9f1
고영탁
엔지니어 모드 2차 구현
|
150
151
152
153
154
155
156
|
write(fd,buffs,FRAM_SIZE);
close(fd);
}else{
qDebug()<<"FRAM FILE Open fail!!";
return false;
}
return true;
|
652e9cd54
고영탁
Merge
|
157
|
}
|