652e9cd54
고영탁
Merge
|
1
2
|
#include "string.h"
#include "servicedatas.h"
|
c50beef02
고영탁
에러 처리 루틴 및 에러 처리 ...
|
3
|
#include <QDebug>
|
6a965b9f1
고영탁
엔지니어 모드 2차 구현
|
4
5
6
7
8
9
10
11
|
#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"
#define INIT_FRAM 1
|
652e9cd54
고영탁
Merge
|
12
13
14
|
servicedatas::servicedatas()
{
|
6a965b9f1
고영탁
엔지니어 모드 2차 구현
|
15
16
17
18
19
|
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);
|
652e9cd54
고영탁
Merge
|
20
|
memset((void*)err_log.datas,0x00,sizeof(error_log));
|
c50beef02
고영탁
에러 처리 루틴 및 에러 처리 ...
|
21
|
memset((void*)use_log.datas,0x00,sizeof(use_statics_log));
|
6a965b9f1
고영탁
엔지니어 모드 2차 구현
|
22
23
24
25
26
27
|
memset((void*)sensor_log.datas,0x00, sizeof(sensor_statics_log));
#if INIT_FRAM == 1
saveServiceDatas();
#else
loadServiceDatas();
#endif
|
652e9cd54
고영탁
Merge
|
28
|
}
|
6a965b9f1
고영탁
엔지니어 모드 2차 구현
|
29
|
|
652e9cd54
고영탁
Merge
|
30
|
bool servicedatas::loadServiceDatas(void){
|
6a965b9f1
고영탁
엔지니어 모드 2차 구현
|
31
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
|
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
|
66
|
return true;
|
6a965b9f1
고영탁
엔지니어 모드 2차 구현
|
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
|
#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);
return saveServiceDatas();
}
qDebug() << "FRAM Read, Write Size is " << sizeof(error_log)+sizeof(use_statics_log);
memcpy((void*)err_log.datas,buffs,sizeof(error_log));
memcpy((void*)use_log.datas, (void*)(&buffs[sizeof(error_log)]),sizeof(use_statics_log));
memcpy((void*)sensor_log.datas,(void*)(&buffs[sizeof(error_log) + sizeof(use_statics_log)]),sizeof(sensor_statics_log));
close(fd);
}else{
qDebug()<<"FRAM FILE Open fail!!";
}
return true;
|
652e9cd54
고영탁
Merge
|
92
93
94
|
}
bool servicedatas::saveServiceDatas(void){
|
6a965b9f1
고영탁
엔지니어 모드 2차 구현
|
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
|
uint8_t buffs[FRAM_SIZE];
int fd;
fd = open(fRam_path, O_RDWR | O_SYNC);
if(fd>0){
memset(buffs,0x00,FRAM_SIZE);
memcpy(buffs,(void*)err_log.datas,sizeof(error_log));
memcpy((void*)(&buffs[sizeof(error_log)]),(void*)use_log.datas,sizeof(use_statics_log));
memcpy((void*)(&buffs[sizeof(error_log) + sizeof(use_statics_log)]),(void*)sensor_log.datas,sizeof(sensor_statics_log));
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
|
|