chore: HERV 통합 저장소 초기 커밋

- 펌웨어(program), C# 대시보드(TestProgram), 시뮬레이터(Simulator),
  프로토콜/문서(Protocol, doc) 전체를 단일 저장소로 통합
- program 폴더의 별도 git 저장소를 제거하고 통합 저장소에 흡수
- 빌드 산출물(program/build, bin/obj, *.o/.elf/.bin/.hex 등) .gitignore 처리
- 사내 Synology NAS Git 원격 연결 예정

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-15 21:44:23 +09:00
commit 5a96a696b1
265 changed files with 76458 additions and 0 deletions
+667
View File
@@ -0,0 +1,667 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>
#include <math.h>
#include "Nano100Series.h"
#include "adc.h"
#include "gpio.h"
#include "pwm.h"
#include "timer.h"
#include "uart.h"
#include "sys.h"
#include "clk.h"
#include "EEPROM_Emulate.h"
#include "My_define.h"
uint32_t Read_Data(uint8_t index, uint8_t *data);
uint32_t Write_Data(uint8_t index, uint8_t data);
uint8_t page_data[EEP_SIZE];
uint8_t Test_Fan1_Speed, Test_Fan2_Speed;
uint8_t Test_Fan1_Ven_1_dan, Test_Fan1_Ven_2_dan, Test_Fan1_Ven_3_dan, Test_Fan1_Ven_4_dan, \
Test_Fan1_Air_1_dan, Test_Fan1_Air_2_dan, Test_Fan1_Air_3_dan, Test_Fan1_Air_4_dan,\
Test_Fan1_Bypass_1_dan, Test_Fan1_Bypass_2_dan, Test_Fan1_Bypass_3_dan, Test_Fan1_Bypass_4_dan;
uint8_t Test_Fan2_Ven_1_dan, Test_Fan2_Ven_2_dan, Test_Fan2_Ven_3_dan, Test_Fan2_Ven_4_dan,\
Test_Fan2_Air_1_dan, Test_Fan2_Air_2_dan, Test_Fan2_Air_3_dan , Test_Fan2_Air_4_dan,\
Test_Fan2_Bypass_1_dan, Test_Fan2_Bypass_2_dan, Test_Fan2_Bypass_3_dan, Test_Fan2_Bypass_4_dan;
/* 히스테리시스 프리셋(임계+데드밴드) <-> page_data (EEPROM 영역 43~127) */
static void Hyst_To_Page(void)
{
uint8_t pp, k, o;
page_data[EEP_HYST_PRESET] = Hyst_Preset;
for(pp = 0; pp < 3; pp++)
{
page_data[EEP_HYST_DB_BASE + 0 + pp] = (uint8_t)Co2_Db[pp];
page_data[EEP_HYST_DB_BASE + 3 + pp] = (uint8_t)Pm25_Db[pp];
page_data[EEP_HYST_DB_BASE + 6 + pp] = (uint8_t)Pm10_Db[pp];
page_data[EEP_HYST_DB_BASE + 9 + pp] = (uint8_t)Voc_Db[pp];
for(k = 0; k < 4; k++)
{
o = (uint8_t)(pp * 8 + k * 2);
page_data[EEP_THR_CO2_BASE + o] = (uint8_t)(Co2_Thr[pp][k] >> 8);
page_data[EEP_THR_CO2_BASE + o + 1] = (uint8_t)(Co2_Thr[pp][k] & 0xFF);
page_data[EEP_THR_VOC_BASE + o] = (uint8_t)(Voc_Thr[pp][k] >> 8);
page_data[EEP_THR_VOC_BASE + o + 1] = (uint8_t)(Voc_Thr[pp][k] & 0xFF);
page_data[EEP_THR_PM25_BASE + pp * 4 + k] = (uint8_t)Pm25_Thr[pp][k];
page_data[EEP_THR_PM10_BASE + pp * 4 + k] = (uint8_t)Pm10_Thr[pp][k];
}
}
}
static void Hyst_From_Page(void)
{
uint8_t pp, k, o;
if(page_data[EEP_HYST_PRESET] > 2) return; /* 미초기화(0xFF) -> 컴파일 기본값 유지 */
Hyst_Preset = page_data[EEP_HYST_PRESET];
for(pp = 0; pp < 3; pp++)
{
Co2_Db[pp] = page_data[EEP_HYST_DB_BASE + 0 + pp];
Pm25_Db[pp] = page_data[EEP_HYST_DB_BASE + 3 + pp];
Pm10_Db[pp] = page_data[EEP_HYST_DB_BASE + 6 + pp];
Voc_Db[pp] = page_data[EEP_HYST_DB_BASE + 9 + pp];
for(k = 0; k < 4; k++)
{
o = (uint8_t)(pp * 8 + k * 2);
Co2_Thr[pp][k] = (uint16_t)(((uint16_t)page_data[EEP_THR_CO2_BASE + o] << 8) | page_data[EEP_THR_CO2_BASE + o + 1]);
Voc_Thr[pp][k] = (uint16_t)(((uint16_t)page_data[EEP_THR_VOC_BASE + o] << 8) | page_data[EEP_THR_VOC_BASE + o + 1]);
Pm25_Thr[pp][k] = page_data[EEP_THR_PM25_BASE + pp * 4 + k];
Pm10_Thr[pp][k] = page_data[EEP_THR_PM10_BASE + pp * 4 + k];
}
}
}
void init_process(void)
{
uint16_t i;
uint8_t eep_error = 0;
union {
uint32_t u32_val ;
uint8_t u8_val[4] ;
} tran ;
for(i=0; i<20; i++)Tx_roomcon232_buffer[i] = 0;
for(i=0; i<20; i++)Tx_display_buffer[i] = 0;
for(i=0; i<20; i++)Tx_homenet_buffer[i] = 0;
for(i=0; i<EEP_SIZE; i++)Read_Data(i, &page_data[i]);
tran.u8_val[0] = page_data[0];
tran.u8_val[1] = page_data[1];
tran.u8_val[2] = page_data[2];
tran.u8_val[3] = page_data[3];
if(tran.u32_val == 0x55AA55AA)
{
s_FAN1_VEN_1_DAN = page_data[EEP_FAN1_VEN_1_DAN];
s_FAN1_VEN_2_DAN = page_data[EEP_FAN1_VEN_2_DAN];
s_FAN1_VEN_3_DAN = page_data[EEP_FAN1_VEN_3_DAN];
s_FAN1_VEN_4_DAN = page_data[EEP_FAN1_VEN_4_DAN];
s_FAN1_AIR_1_DAN = page_data[EEP_FAN1_AIR_1_DAN];
s_FAN1_AIR_2_DAN = page_data[EEP_FAN1_AIR_2_DAN];
s_FAN1_AIR_3_DAN = page_data[EEP_FAN1_AIR_3_DAN];
s_FAN1_AIR_4_DAN = page_data[EEP_FAN1_AIR_4_DAN];
s_FAN1_BYPASS_1_DAN = page_data[EEP_FAN1_BYPASS_1_DAN];
s_FAN1_BYPASS_2_DAN = page_data[EEP_FAN1_BYPASS_2_DAN];
s_FAN1_BYPASS_3_DAN = page_data[EEP_FAN1_BYPASS_3_DAN];
s_FAN1_BYPASS_4_DAN = page_data[EEP_FAN1_BYPASS_4_DAN];
s_FAN2_VEN_1_DAN = page_data[EEP_FAN2_VEN_1_DAN];
s_FAN2_VEN_2_DAN = page_data[EEP_FAN2_VEN_2_DAN];
s_FAN2_VEN_3_DAN = page_data[EEP_FAN2_VEN_3_DAN];
s_FAN2_VEN_4_DAN = page_data[EEP_FAN2_VEN_4_DAN];
s_FAN2_AIR_1_DAN = page_data[EEP_FAN2_AIR_1_DAN];
s_FAN2_AIR_2_DAN = page_data[EEP_FAN2_AIR_2_DAN];
s_FAN2_AIR_3_DAN = page_data[EEP_FAN2_AIR_3_DAN];
s_FAN2_AIR_4_DAN = page_data[EEP_FAN2_AIR_4_DAN];
s_FAN2_BYPASS_1_DAN = page_data[EEP_FAN2_BYPASS_1_DAN];
s_FAN2_BYPASS_2_DAN = page_data[EEP_FAN2_BYPASS_2_DAN];
s_FAN2_BYPASS_3_DAN = page_data[EEP_FAN2_BYPASS_3_DAN];
s_FAN2_BYPASS_4_DAN = page_data[EEP_FAN2_BYPASS_4_DAN];
Filter_timer_clean = ((uint16_t)page_data[EEP_FILTER_CLEAN_HOUR_H]<<8) + (uint16_t)page_data[EEP_FILTER_CLEAN_HOUR_L];
Filter_timer_change = ((uint16_t)page_data[EEP_FILTER_CHANGE_HOUR_H]<<8) + (uint16_t)page_data[EEP_FILTER_CHANGE_HOUR_L];
Soja_timer_change = ((uint16_t)page_data[EEP_SOJA_CHANGE_HOUR_H]<<8) + (uint16_t)page_data[EEP_SOJA_CHANGE_HOUR_L];
BlackOut_Power_On = page_data[EEP_BLACKOUT_POWER_ON];
BlackOut_Run_Mode = page_data[EEP_BLACKOUT_RUN_MODE];
BlackOut_Fan_Mode = page_data[EEP_BLACKOUT_FAN_MODE];
Hyst_From_Page(); /* 히스테리시스 임계/데드밴드/프리셋 로드(미초기화면 기본값 유지) */
}
else
{
tran.u32_val = 0x55AA55AA;
page_data[0] = tran.u8_val[0];
page_data[1] = tran.u8_val[1];
page_data[2] = tran.u8_val[2];
page_data[3] = tran.u8_val[3];
////////////////////////////////////////////////
/* VSP 기본값 = 사양서 DL H-ERV VSP 실측표 (FAN1=SA 급기, FAN2=EA 배기) */
s_FAN1_VEN_1_DAN = 56;
s_FAN1_VEN_2_DAN = 63;
s_FAN1_VEN_3_DAN = 70;
s_FAN1_VEN_4_DAN = 86;
s_FAN1_AIR_1_DAN = 65;
s_FAN1_AIR_2_DAN = 72;
s_FAN1_AIR_3_DAN = 78;
s_FAN1_AIR_4_DAN = 80;
s_FAN1_BYPASS_1_DAN = 67;
s_FAN1_BYPASS_2_DAN = 67;
s_FAN1_BYPASS_3_DAN = 67;
s_FAN1_BYPASS_4_DAN = 67;
s_FAN2_VEN_1_DAN = 57;
s_FAN2_VEN_2_DAN = 63;
s_FAN2_VEN_3_DAN = 70;
s_FAN2_VEN_4_DAN = 85;
s_FAN2_AIR_1_DAN = 0; /* 공청 EA 미사용 */
s_FAN2_AIR_2_DAN = 0;
s_FAN2_AIR_3_DAN = 0;
s_FAN2_AIR_4_DAN = 0;
s_FAN2_BYPASS_1_DAN = 75;
s_FAN2_BYPASS_2_DAN = 75;
s_FAN2_BYPASS_3_DAN = 75;
s_FAN2_BYPASS_4_DAN = 75;
////////////////////////////////////////////////
Filter_timer_clean = 0;
Filter_timer_change = 0;
Soja_timer_change = 0;
page_data[EEP_FAN1_VEN_1_DAN] = s_FAN1_VEN_1_DAN;
page_data[EEP_FAN1_VEN_2_DAN] = s_FAN1_VEN_2_DAN;
page_data[EEP_FAN1_VEN_3_DAN] = s_FAN1_VEN_3_DAN;
page_data[EEP_FAN1_VEN_4_DAN] = s_FAN1_VEN_4_DAN;
page_data[EEP_FAN1_AIR_1_DAN] = s_FAN1_AIR_1_DAN;
page_data[EEP_FAN1_AIR_2_DAN] = s_FAN1_AIR_2_DAN;
page_data[EEP_FAN1_AIR_3_DAN] = s_FAN1_AIR_3_DAN;
page_data[EEP_FAN1_AIR_4_DAN] = s_FAN1_AIR_4_DAN;
page_data[EEP_FAN1_BYPASS_1_DAN] = s_FAN1_BYPASS_1_DAN;
page_data[EEP_FAN1_BYPASS_2_DAN] = s_FAN1_BYPASS_2_DAN;
page_data[EEP_FAN1_BYPASS_3_DAN] = s_FAN1_BYPASS_3_DAN;
page_data[EEP_FAN1_BYPASS_4_DAN] = s_FAN1_BYPASS_4_DAN;
page_data[EEP_FAN2_VEN_1_DAN] = s_FAN2_VEN_1_DAN;
page_data[EEP_FAN2_VEN_2_DAN] = s_FAN2_VEN_2_DAN;
page_data[EEP_FAN2_VEN_3_DAN] = s_FAN2_VEN_3_DAN;
page_data[EEP_FAN2_VEN_4_DAN] = s_FAN2_VEN_4_DAN;
page_data[EEP_FAN2_AIR_1_DAN] = s_FAN2_AIR_1_DAN;
page_data[EEP_FAN2_AIR_2_DAN] = s_FAN2_AIR_2_DAN;
page_data[EEP_FAN2_AIR_3_DAN] = s_FAN2_AIR_3_DAN;
page_data[EEP_FAN2_AIR_4_DAN] = s_FAN2_AIR_4_DAN;
page_data[EEP_FAN2_BYPASS_1_DAN] = s_FAN2_BYPASS_1_DAN;
page_data[EEP_FAN2_BYPASS_2_DAN] = s_FAN2_BYPASS_2_DAN;
page_data[EEP_FAN2_BYPASS_3_DAN] = s_FAN2_BYPASS_3_DAN;
page_data[EEP_FAN2_BYPASS_4_DAN] = s_FAN2_BYPASS_4_DAN;
page_data[EEP_FILTER_CLEAN_HOUR_H] = (uint8_t)((Filter_timer_clean&0xFF00)>>8);
page_data[EEP_FILTER_CLEAN_HOUR_L] = (uint8_t)(Filter_timer_clean&0x00FF);
page_data[EEP_FILTER_CHANGE_HOUR_H] = (uint8_t)((Filter_timer_change&0xFF00)>>8);
page_data[EEP_FILTER_CHANGE_HOUR_L] = (uint8_t)(Filter_timer_change&0x00FF);
page_data[EEP_SOJA_CHANGE_HOUR_H] = (uint8_t)((Soja_timer_change&0xFF00)>>8);
page_data[EEP_SOJA_CHANGE_HOUR_L] = (uint8_t)(Soja_timer_change&0x00FF);
page_data[EEP_BLACKOUT_POWER_ON] = Power_On;
page_data[EEP_BLACKOUT_RUN_MODE] = Run_Mode;
page_data[EEP_BLACKOUT_FAN_MODE] = Fan_Mode;
Hyst_To_Page(); /* 히스테리시스 임계/데드밴드/프리셋 기본값 저장 */
for(i=0; i<EEP_SIZE ; i++)Write_Data(i, page_data[i]);
}
Test_Fan1_Ven_1_dan = s_FAN1_VEN_1_DAN;
Test_Fan1_Ven_2_dan = s_FAN1_VEN_2_DAN;
Test_Fan1_Ven_3_dan = s_FAN1_VEN_3_DAN;
Test_Fan1_Ven_4_dan = s_FAN1_VEN_4_DAN;
Test_Fan1_Air_1_dan = s_FAN1_AIR_1_DAN;
Test_Fan1_Air_2_dan = s_FAN1_AIR_2_DAN;
Test_Fan1_Air_3_dan = s_FAN1_AIR_3_DAN;
Test_Fan1_Air_4_dan = s_FAN1_AIR_4_DAN;
Test_Fan1_Bypass_1_dan = s_FAN1_BYPASS_1_DAN;
Test_Fan1_Bypass_2_dan = s_FAN1_BYPASS_2_DAN;
Test_Fan1_Bypass_3_dan = s_FAN1_BYPASS_3_DAN;
Test_Fan1_Bypass_4_dan = s_FAN1_BYPASS_4_DAN;
Test_Fan2_Ven_1_dan = s_FAN2_VEN_1_DAN;
Test_Fan2_Ven_2_dan = s_FAN2_VEN_2_DAN;
Test_Fan2_Ven_3_dan = s_FAN2_VEN_3_DAN;
Test_Fan2_Ven_4_dan = s_FAN2_VEN_4_DAN;
Test_Fan2_Air_1_dan = s_FAN2_AIR_1_DAN;
Test_Fan2_Air_2_dan = s_FAN2_AIR_2_DAN;
Test_Fan2_Air_3_dan = s_FAN2_AIR_3_DAN;
Test_Fan2_Air_4_dan = s_FAN2_AIR_4_DAN;
Test_Fan2_Bypass_1_dan = s_FAN2_BYPASS_1_DAN;
Test_Fan2_Bypass_2_dan = s_FAN2_BYPASS_2_DAN;
Test_Fan2_Bypass_3_dan = s_FAN2_BYPASS_3_DAN;
Test_Fan2_Bypass_4_dan = s_FAN2_BYPASS_4_DAN;
//////////////////////// disp init ////////////////////////
Step_motor_init();
delay_ms(100);
for(i=0; i<10; i++)
{
ADC_Sensing();
delay_ms(20);
}
}
//*****************************************************
// Humidity Convertion
//*****************************************************
//5th Degree Polynomial Fit: y=a+bx+cx^2+dx^3...
//Coefficient Data:
#define Ha -4.87601734329E+001
#define Hb 8.96436964233E-002
#define Hc -6.50196401698E-005
#define Hd 3.36616112090E-008
#define He -7.78888646058E-012
#define Hf 6.68092914464E-016
float Humidity_Conversion(float V)
{
float Ret = 0;
V *= 1000;
Ret = Ha + (Hb * V) + (Hc * (V * V)) + (Hd * (V * V * V)) + (He * (V * V * V * V)) + (Hf * (V * V * V * V * V));
if(Ret <= 0)Ret = 0;
else if(Ret >= 99.9)Ret = 99.9;
return(Ret);
}
// LNTK103FF
#define T_a 3.08197700643E-002
#define T_b 8.77312053750E+002
#define T_c -3.17755936684E+003
#define T_d 5.62092429082E+003
#define T_e -5.86906412922E+003
#define T_f 3.82840309167E+003
#define T_g -1.57651548838E+003
#define T_h 3.97983185914E+002
#define T_i -5.61894921403E+001
#define T_j 3.39457675113E+000
#define PowerSupplyVoltage 3.300 //
float Temperature_Conversion(float V)
{
return( T_a + T_b*V + T_c*V*V + T_d*V*V*V + T_e*V*V*V*V + T_f*V*V*V*V*V + T_g*V*V*V*V*V*V +\
T_h*V*V*V*V*V*V*V + T_i*V*V*V*V*V*V*V*V + T_j*V*V*V*V*V*V*V*V*V );
}
//////////////////////////////////////////////////////////////
// ADC Power Input
float VoltageConversion(unsigned int in_data)
{
return((float)((float)in_data) * (PowerSupplyVoltage / 4095));
}
//==========================================================================
float Humidity_Read(uint16_t data)
{
float Retf, fTmp;
fTmp = VoltageConversion(data);
if(fTmp < 0.1)Retf = 0;
else Retf = Humidity_Conversion(fTmp)*10;
return(Retf);
}
float Temperature_Read(uint16_t data)
{
float Retf, fTmp;
fTmp = VoltageConversion(data);
Retf = Temperature_Conversion(fTmp) ; //
return(Retf);
}
float Float_Aeverage_calculator(float val, float * array_val)
{
uint8_t i;
float max = -10000;
float min = 10000;
float sum = 0;
float Rval = 0;
for(i=9; i>0; i--)
{
*(array_val+i) = *(array_val+i-1);
}
*array_val = val;
for(i=0; i<10; i++)
{
if(array_val[i] >= max)
{
max = array_val[i];
}
if(array_val[i] <= min)
{
min = array_val[i];
}
sum += array_val[i];
}
Rval = (float)((sum - max - min)/8);
return(Rval);
}
uint16_t Aeverage_calculator(uint16_t val, uint16_t * array_val)
{
uint8_t i;
uint16_t max = 0;
uint16_t min = 10000;
uint32_t sum = 0;
uint16_t Rval = 0;
for(i=9; i>0; i--)
{
*(array_val+i) = *(array_val+i-1);
}
*array_val = val;
for(i=0; i<10; i++)
{
if(array_val[i] >= max)
{
max = array_val[i];
}
if(array_val[i] <= min)
{
min = array_val[i];
}
sum += array_val[i];
}
Rval = (uint16_t)((sum - max - min)/8);
return(Rval);
}
uint16_t Current_Read(uint16_t adc_current)
{
return adc_current;
}
extern volatile uint8_t ADC_Complete;
volatile uint8_t Err_Code = 0;
uint16_t adc_result = 0;
uint16_t Main_Current;
signed int Out_Temperature = 0;
signed int In_Temperature = 0;
uint8_t Sen_Pos = 0;
int16_t Volum1_value = 0, Volum2_value = 0;
float Avr_Temperature_1[10]={0,0,0,0,0,0,0,0,0,0};
float Avr_Temperature_2[10]={0,0,0,0,0,0,0,0,0,0};
uint16_t Avr_Vol_1[10]={0,0,0,0,0,0,0,0,0,0};
uint16_t Avr_Vol_2[10]={0,0,0,0,0,0,0,0,0,0};
uint16_t Avr_Current[10]={0,0,0,0,0,0,0,0,0,0};
uint8_t Temp_sensor_error = 0;
void ADC_Sensing(void)
{
float fTmp = 0;
signed int sTmp = 0;
uint16_t uTmp = 0;
if(ADC_Complete == 1)
{
ADC_Complete = 0;
adc_result = ADC_GET_CONVERSION_DATA(ADC, 4); // in
uTmp = Aeverage_calculator(adc_result, Avr_Current);
Main_Current = Current_Read(uTmp);
//////////// in
/* adc_current = ADC_GET_CONVERSION_DATA(ADC, 0); // in
fTmp = Temperature_Read(adc_result);
if(fTmp < 0) fTmp *= 1.05;
sTmp = (signed int)fTmp;
if((sTmp > 85) || (sTmp < -40))
{
Temp_sensor_error |= 1;
In_Temperature = 100;
}
else
{
sTmp = Float_Aeverage_calculator(sTmp, Avr_Temperature_1);
Temp_sensor_error &= ~1;
if(sTmp >= 85)In_Temperature = 85;
else if(sTmp <= -20)In_Temperature = -20;
else In_Temperature = sTmp;
}
*/
//////////// out
adc_result = ADC_GET_CONVERSION_DATA(ADC, 1); // out
fTmp = Temperature_Read(adc_result);
if(fTmp < 0) fTmp *= 1.05;
sTmp = (signed int)fTmp;
if((sTmp > 85) || (sTmp < -40))
{
Temp_sensor_error |= 2;
Out_Temperature = 100;
}
else
{
sTmp = Float_Aeverage_calculator(sTmp, Avr_Temperature_2);
Temp_sensor_error &= ~2;
if(sTmp >= 85)Out_Temperature = 85;
else if(sTmp <= -20)Out_Temperature = -20;
else Out_Temperature = sTmp;
}
//if(Temp_sensor_error)Err_Code |= ERROR_TEMP_SENSOR;
//else Err_Code &= ~ERROR_TEMP_SENSOR;
////////////// vol 1
adc_result = ADC_GET_CONVERSION_DATA(ADC, 2);
//fTmp = Aeverage_calculator(adc_result, Avr_Vol_2);
Volum1_value = 125 - (signed int)((float)adc_result/4.095/4) + 50; // -100 ~ 100
//////////////// vol 2
adc_result = ADC_GET_CONVERSION_DATA(ADC, 3);
//fTmp = Aeverage_calculator(adc_result, Avr_Vol_1);
Volum2_value = 125 - (signed int)((float)adc_result/4.095/4) + 50; // -100 ~ 100
}
ADC_START_CONV(ADC);
}
void EEP_Save_process(void)
{
uint8_t i;
/* (구 PC메뉴용 Test_Fan -> s_FAN 복사 제거 : 대시보드 CTRL_VSP 로 설정한 s_FAN 값을 그대로 저장) */
page_data[EEP_FAN1_VEN_1_DAN] = s_FAN1_VEN_1_DAN;
page_data[EEP_FAN1_VEN_2_DAN] = s_FAN1_VEN_2_DAN;
page_data[EEP_FAN1_VEN_3_DAN] = s_FAN1_VEN_3_DAN;
page_data[EEP_FAN1_VEN_4_DAN] = s_FAN1_VEN_4_DAN;
page_data[EEP_FAN1_AIR_1_DAN] = s_FAN1_AIR_1_DAN;
page_data[EEP_FAN1_AIR_2_DAN] = s_FAN1_AIR_2_DAN;
page_data[EEP_FAN1_AIR_3_DAN] = s_FAN1_AIR_3_DAN;
page_data[EEP_FAN1_AIR_4_DAN] = s_FAN1_AIR_4_DAN;
page_data[EEP_FAN1_BYPASS_1_DAN] = s_FAN1_BYPASS_1_DAN;
page_data[EEP_FAN1_BYPASS_2_DAN] = s_FAN1_BYPASS_2_DAN;
page_data[EEP_FAN1_BYPASS_3_DAN] = s_FAN1_BYPASS_3_DAN;
page_data[EEP_FAN1_BYPASS_4_DAN] = s_FAN1_BYPASS_4_DAN;
page_data[EEP_FAN2_VEN_1_DAN] = s_FAN2_VEN_1_DAN;
page_data[EEP_FAN2_VEN_2_DAN] = s_FAN2_VEN_2_DAN;
page_data[EEP_FAN2_VEN_3_DAN] = s_FAN2_VEN_3_DAN;
page_data[EEP_FAN2_VEN_4_DAN] = s_FAN2_VEN_4_DAN;
page_data[EEP_FAN2_AIR_1_DAN] = s_FAN2_AIR_1_DAN;
page_data[EEP_FAN2_AIR_2_DAN] = s_FAN2_AIR_2_DAN;
page_data[EEP_FAN2_AIR_3_DAN] = s_FAN2_AIR_3_DAN;
page_data[EEP_FAN2_AIR_4_DAN] = s_FAN2_AIR_4_DAN;
page_data[EEP_FAN2_BYPASS_1_DAN] = s_FAN2_BYPASS_1_DAN;
page_data[EEP_FAN2_BYPASS_2_DAN] = s_FAN2_BYPASS_2_DAN;
page_data[EEP_FAN2_BYPASS_3_DAN] = s_FAN2_BYPASS_3_DAN;
page_data[EEP_FAN2_BYPASS_4_DAN] = s_FAN2_BYPASS_4_DAN;
page_data[EEP_FILTER_CLEAN_HOUR_H] = (uint8_t)((Filter_timer_clean&0xFF00)>>8);
page_data[EEP_FILTER_CLEAN_HOUR_L] = (uint8_t)(Filter_timer_clean&0x00FF);
page_data[EEP_FILTER_CHANGE_HOUR_H] = (uint8_t)((Filter_timer_change&0xFF00)>>8);
page_data[EEP_FILTER_CHANGE_HOUR_L] = (uint8_t)(Filter_timer_change&0x00FF);
page_data[EEP_SOJA_CHANGE_HOUR_H] = (uint8_t)((Soja_timer_change&0xFF00)>>8);
page_data[EEP_SOJA_CHANGE_HOUR_L] = (uint8_t)(Soja_timer_change&0x00FF);
page_data[EEP_BLACKOUT_POWER_ON] = Power_On;
page_data[EEP_BLACKOUT_RUN_MODE] = Run_Mode;
page_data[EEP_BLACKOUT_FAN_MODE] = Fan_Mode;
Hyst_To_Page(); /* 히스테리시스 임계/데드밴드/프리셋 저장 (대시보드 0x06/0x07/0x0D) */
for(i=0; i<EEP_SIZE ; i++)Write_Data(i, page_data[i]);
}
uint8_t Filter_Reset_Process(void)
{
Err_Code &= ~(ERROR_FILTER_CHANGE|ERROR_FILTER_CLEAN|ERROR_SOJA_CHANGE);
if((Filter_timer_clean == 0)&&(Filter_timer_change == 0)&&(Filter_timer_change == 0))return(0);
Filter_timer_clean = 0;
if(Filter_timer_change >= 4000)Filter_timer_change = 0;
if(Soja_timer_change >= 20000)Soja_timer_change = 0;
return(1);
}
void Reserve_Time_Update(uint8_t rtime)
{
if(Roomcon_connect_mode == 0)
{
Set_Reserve_timer_sec = (uint32_t)rtime * 3600;
Reserve_timer_sec = Set_Reserve_timer_sec;
Pre_Reserve_hour = rtime;
}
else
{
if(rtime != Pre_Reserve_hour)
{
Set_Reserve_timer_sec = (uint32_t)rtime * 3600;
Pre_Reserve_hour = rtime;
}
}
}
extern uint8_t Power_On;
extern volatile uint8_t Run_Mode, Fan_Mode;
void Power_off_process(uint8_t set)
{ uint8_t i = 0;
Reserve_hour = 0;
Pre_Reserve_hour = 0;
Reserve_timer_sec = 0;
Fan_Mode = 0;
Run_Mode = 0;
Power_On = 0;
for(i=1; i<7; i++)Diffuser_Power[i] = 0; //////diffuser off
if(set == 1)
{
Set_Reserve_timer_sec = 0;
Set_Run_Mode = 0;
Set_Fan_Mode = 0;
}
}
uint8_t BlackOut_Power_On = 0;
uint8_t BlackOut_Run_Mode = 0;
uint8_t BlackOut_Fan_Mode = 0;
void Pre_Mode_Control(void)
{
uint8_t i;
if((BlackOut_Power_On != Power_On)||(BlackOut_Run_Mode != Run_Mode)||(BlackOut_Fan_Mode != Fan_Mode))
{
page_data[EEP_BLACKOUT_POWER_ON] = Power_On;
page_data[EEP_BLACKOUT_RUN_MODE] = Run_Mode;
page_data[EEP_BLACKOUT_FAN_MODE] = Fan_Mode;
for(i=EEP_BLACKOUT_POWER_ON; i<EEP_SIZE ; i++)Write_Data(i, page_data[i]);
}
BlackOut_Power_On = Power_On;
BlackOut_Run_Mode = Run_Mode;
BlackOut_Fan_Mode = Fan_Mode;
}