Blame view

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