Blame view

app/gui/oven_control/servicedata.cpp 3.81 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));
211a15bde   고영탁   dirtylevel 관련 FRA...
25
26
      DirtyLevel::setCookingCount(0);
      DirtyLevel::setCookingTime(0);
6a965b9f1   고영탁   엔지니어 모드 2차 구현
27
  #if INIT_FRAM == 1
14a73498f   김태훈   소스 코드 정리
28
      saveServiceData();
6a965b9f1   고영탁   엔지니어 모드 2차 구현
29
  #else
14a73498f   김태훈   소스 코드 정리
30
      loadServiceData();
6a965b9f1   고영탁   엔지니어 모드 2차 구현
31
  #endif
652e9cd54   고영탁   Merge
32
  }
6a965b9f1   고영탁   엔지니어 모드 2차 구현
33
14a73498f   김태훈   소스 코드 정리
34
  bool ServiceData::loadServiceData(void){
6a965b9f1   고영탁   엔지니어 모드 2차 구현
35
      uint8_t buffs[FRAM_SIZE];
211a15bde   고영탁   dirtylevel 관련 FRA...
36
      uint8_t* pBuff;
6a965b9f1   고영탁   엔지니어 모드 2차 구현
37
      int fd;
211a15bde   고영탁   dirtylevel 관련 FRA...
38
39
40
      qint64 temp_cookingTime = 0;
      int temp_cookingCount = 0;
      pBuff = buffs;
6a965b9f1   고영탁   엔지니어 모드 2차 구현
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
70
71
72
73
  
  #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
74
      return true;
6a965b9f1   고영탁   엔지니어 모드 2차 구현
75
76
77
78
79
80
81
82
83
84
85
  #endif
  
  
  
  
  
  
      fd = open(fRam_path,  O_RDONLY );
      if(fd>0){
          memset(buffs,0x00,FRAM_SIZE);
          read(fd,buffs,FRAM_SIZE);
211a15bde   고영탁   dirtylevel 관련 FRA...
86
87
         if(buffs[sizeof(error_log) + sizeof(use_statics_log) + sizeof(sensor_statics_log) + sizeof(qint64) + sizeof(int)] != 0x9C){
              qDebug() <<  "service data read incorrected!";
6a965b9f1   고영탁   엔지니어 모드 2차 구현
88
              close(fd);
14a73498f   김태훈   소스 코드 정리
89
             return saveServiceData();
6a965b9f1   고영탁   엔지니어 모드 2차 구현
90
91
92
          }
  
          qDebug() << "FRAM Read, Write Size is " << sizeof(error_log)+sizeof(use_statics_log);
211a15bde   고영탁   dirtylevel 관련 FRA...
93
94
95
96
97
98
99
          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);
          memcpy(&temp_cookingTime,pBuff, sizeof(qint64)); pBuff += sizeof(qint64);
          memcpy(&temp_cookingCount,pBuff, sizeof(int));
          DirtyLevel::setCookingCount(temp_cookingCount);
          DirtyLevel::setCookingTime(temp_cookingTime);
6a965b9f1   고영탁   엔지니어 모드 2차 구현
100
101
102
103
104
          close(fd);
      }else{
          qDebug()<<"FRAM FILE Open fail!!";
      }
     return true;
652e9cd54   고영탁   Merge
105
  }
14a73498f   김태훈   소스 코드 정리
106
  bool ServiceData::saveServiceData(void){
6a965b9f1   고영탁   엔지니어 모드 2차 구현
107
      uint8_t buffs[FRAM_SIZE];
211a15bde   고영탁   dirtylevel 관련 FRA...
108
      uint8_t* pBuff;
6a965b9f1   고영탁   엔지니어 모드 2차 구현
109
      int fd;
211a15bde   고영탁   dirtylevel 관련 FRA...
110
111
112
      qint64 temp_cookingTime = DirtyLevel::cookingTime();
      int temp_cookingCount = DirtyLevel::cookingCount();
      pBuff = buffs;
6a965b9f1   고영탁   엔지니어 모드 2차 구현
113
114
115
      fd = open(fRam_path,  O_RDWR | O_SYNC);
      if(fd>0){
          memset(buffs,0x00,FRAM_SIZE);
211a15bde   고영탁   dirtylevel 관련 FRA...
116
117
118
119
120
121
          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);
          memcpy(pBuff, &temp_cookingTime, sizeof(qint64)); pBuff += sizeof(qint64);
          memcpy(pBuff, &temp_cookingCount, sizeof(int)); pBuff += sizeof(int);
          *pBuff = 0x9C;
6a965b9f1   고영탁   엔지니어 모드 2차 구현
122
123
124
125
126
127
128
          write(fd,buffs,FRAM_SIZE);
          close(fd);
      }else{
          qDebug()<<"FRAM FILE Open fail!!";
          return false;
      }
     return true;
652e9cd54   고영탁   Merge
129
  }