Blame view

app/gui/oven_control/servicedata.cpp 3.98 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
          close(fd);
7fa4fdb0e   고영탁   인포 데이터 다운로드 기능 개발
101
          qDebug() <<"FRAM Load Success";
6a965b9f1   고영탁   엔지니어 모드 2차 구현
102
103
104
      }else{
          qDebug()<<"FRAM FILE Open fail!!";
      }
91480de3c   고영탁   센서 실시간 데이터 리셋 기능 추가
105
106
107
108
109
110
111
      return true;
  }
  
  bool ServiceData::resetSensorlogData()
  {
       memset((void*)sensor_log.data,0x00, sizeof(sensor_statics_log));
       saveServiceData();
652e9cd54   고영탁   Merge
112
  }
14a73498f   김태훈   소스 코드 정리
113
  bool ServiceData::saveServiceData(void){
6a965b9f1   고영탁   엔지니어 모드 2차 구현
114
      uint8_t buffs[FRAM_SIZE];
211a15bde   고영탁   dirtylevel 관련 FRA...
115
      uint8_t* pBuff;
6a965b9f1   고영탁   엔지니어 모드 2차 구현
116
      int fd;
211a15bde   고영탁   dirtylevel 관련 FRA...
117
118
119
      qint64 temp_cookingTime = DirtyLevel::cookingTime();
      int temp_cookingCount = DirtyLevel::cookingCount();
      pBuff = buffs;
6a965b9f1   고영탁   엔지니어 모드 2차 구현
120
121
122
      fd = open(fRam_path,  O_RDWR | O_SYNC);
      if(fd>0){
          memset(buffs,0x00,FRAM_SIZE);
211a15bde   고영탁   dirtylevel 관련 FRA...
123
124
125
126
127
128
          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차 구현
129
130
131
132
133
134
135
          write(fd,buffs,FRAM_SIZE);
          close(fd);
      }else{
          qDebug()<<"FRAM FILE Open fail!!";
          return false;
      }
     return true;
652e9cd54   고영탁   Merge
136
  }