Blame view

app/gui/oven_control/servicedata.cpp 4.17 KB
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
  }