652e9cd54
고영탁
Merge
|
1
|
#include "string.h"
|
14a73498f
김태훈
소스 코드 정리
|
2
|
#include "servicedata.h"
|
c50beef02
고영탁
에러 처리 루틴 및 에러 처리 ...
|
3
|
#include <QDebug>
|
6a965b9f1
고영탁
엔지니어 모드 2차 구현
|
4
5
6
7
8
9
10
|
#include <fcntl.h>
#include <unistd.h> // write(), close()
#define FRAM_SIZE 2048
#define FRAM_TEST_PROCESS 0
#define fRam_path "/sys/bus/spi/devices/spi0.0/fram"
|
1bb5ed9dc
고영탁
popupwindow 삭제
|
11
|
#define INIT_FRAM 0 //시작시 RRAM 초기화
|
6a965b9f1
고영탁
엔지니어 모드 2차 구현
|
12
|
|
652e9cd54
고영탁
Merge
|
13
|
|
14a73498f
김태훈
소스 코드 정리
|
14
|
ServiceData::ServiceData()
|
652e9cd54
고영탁
Merge
|
15
|
{
|
6a965b9f1
고영탁
엔지니어 모드 2차 구현
|
16
17
18
19
20
|
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
김태훈
소스 코드 정리
|
21
22
23
|
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차 구현
|
24
|
#if INIT_FRAM == 1
|
14a73498f
김태훈
소스 코드 정리
|
25
|
saveServiceData();
|
6a965b9f1
고영탁
엔지니어 모드 2차 구현
|
26
|
#else
|
14a73498f
김태훈
소스 코드 정리
|
27
|
loadServiceData();
|
6a965b9f1
고영탁
엔지니어 모드 2차 구현
|
28
|
#endif
|
652e9cd54
고영탁
Merge
|
29
|
}
|
6a965b9f1
고영탁
엔지니어 모드 2차 구현
|
30
|
|
14a73498f
김태훈
소스 코드 정리
|
31
|
bool ServiceData::loadServiceData(void){
|
6a965b9f1
고영탁
엔지니어 모드 2차 구현
|
32
33
34
35
36
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
|
uint8_t buffs[FRAM_SIZE];
int fd;
#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
|
67
|
return true;
|
6a965b9f1
고영탁
엔지니어 모드 2차 구현
|
68
69
70
71
72
73
74
75
76
77
78
79
80
|
#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){
close(fd);
|
14a73498f
김태훈
소스 코드 정리
|
81
|
return saveServiceData();
|
6a965b9f1
고영탁
엔지니어 모드 2차 구현
|
82
83
84
|
}
qDebug() << "FRAM Read, Write Size is " << sizeof(error_log)+sizeof(use_statics_log);
|
14a73498f
김태훈
소스 코드 정리
|
85
86
87
|
memcpy((void*)err_log.data,buffs,sizeof(error_log));
memcpy((void*)use_log.data, (void*)(&buffs[sizeof(error_log)]),sizeof(use_statics_log));
memcpy((void*)sensor_log.data,(void*)(&buffs[sizeof(error_log) + sizeof(use_statics_log)]),sizeof(sensor_statics_log));
|
6a965b9f1
고영탁
엔지니어 모드 2차 구현
|
88
89
90
91
92
|
close(fd);
}else{
qDebug()<<"FRAM FILE Open fail!!";
}
return true;
|
652e9cd54
고영탁
Merge
|
93
|
}
|
14a73498f
김태훈
소스 코드 정리
|
94
|
bool ServiceData::saveServiceData(void){
|
6a965b9f1
고영탁
엔지니어 모드 2차 구현
|
95
96
97
98
99
|
uint8_t buffs[FRAM_SIZE];
int fd;
fd = open(fRam_path, O_RDWR | O_SYNC);
if(fd>0){
memset(buffs,0x00,FRAM_SIZE);
|
14a73498f
김태훈
소스 코드 정리
|
100
101
102
|
memcpy(buffs,(void*)err_log.data,sizeof(error_log));
memcpy((void*)(&buffs[sizeof(error_log)]),(void*)use_log.data,sizeof(use_statics_log));
memcpy((void*)(&buffs[sizeof(error_log) + sizeof(use_statics_log)]),(void*)sensor_log.data,sizeof(sensor_statics_log));
|
6a965b9f1
고영탁
엔지니어 모드 2차 구현
|
103
104
105
106
107
108
109
110
|
buffs[sizeof(error_log) + sizeof(use_statics_log) + sizeof(sensor_statics_log)] = 0x9C;
write(fd,buffs,FRAM_SIZE);
close(fd);
}else{
qDebug()<<"FRAM FILE Open fail!!";
return false;
}
return true;
|
652e9cd54
고영탁
Merge
|
111
|
}
|
6a965b9f1
고영탁
엔지니어 모드 2차 구현
|
112
|
|