Blame view

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