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
+495
View File
@@ -0,0 +1,495 @@
void delay_ms(uint32_t ms);
void delay_us(uint32_t us);
void PowerDownFunction(void);
void GPIO_Init(void);
void PWM_Init(void);
void Timer0_Init(void);
void Timer1_Init(void);
void SYS_Init(void);
void UART0_Init(void);
void UART1_Init(void);
void SC0_Init();
void SC1_Init();
void ADC_Init(void);
void com_home_network_process(void);
void com_display_process(void);
void com_roomcon_process(void);
void roomcon_parsing(void);
void display_parsing(void);
void tx_home_network_data(void);
void RJ_Com_Err_Check(void);
uint16_t CRC16(uint8_t *puchMsg, uint16_t usDataLen); /* My_bunbaeggi.c 정의 (My_Homenet.c 공용) */
void com_bunbaegi_process(void);
void bunbaegi_parsing(void);
void InCom_process(void);
void BLDC1_Duty_Change(uint32_t BLDC1_duty); // 0 ~ 10000
void BLDC2_Duty_Change(uint32_t BLDC2_duty); // 0 ~ 10000
void init_process(void);
void ADC_Sensing(void);
void EEP_Save_process(void);
void Heater_process(void);
void Reservation_process(void);
void Filter_process(void);
uint8_t Filter_Reset_Process(void);
void Exception_mode_process(void);
uint16_t Aeverage_calculator(uint16_t val, uint16_t * array_val);
void Reserve_Time_Update(uint8_t rtime);
void Power_off_process(uint8_t set);
void Step_process(void);
uint8_t Step_motor_init(void);
void Fan_Error_Check(void);
void Fan_Speed_process(void); // 100ms
void Bldc_check(void);
void PWM_out_process(void);
void Step_M1_Stop();
void Step_M2_Stop();
void Step_M3_Stop();
void Step_M4_Stop();
void Step_M5_Stop();
void Step_M6_Stop();
void Fan_Speed_Setting(uint8_t r_mode, uint8_t f_speed);
void Pre_Mode_Control(void);
void UV_process(void);
uint8_t Air_Quality_process(void);
void Filter_RPM_Check(void);
void Filter_Rpm_Auto_Cal_Process(void);
extern volatile uint8_t Rx_display_complete, Rx_homenet_complete, Rx_roomcon_complete, Rx_debug_complete;
extern volatile uint8_t Tx_display_flag, Tx_homenet_flag, Tx_roomcon_flag, Tx_debug_flag;
extern uint8_t Tx_homenet_buffer[60],Tx_display_buffer[25],Tx_roomcon232_buffer[25],Tx_debug_buffer[60];
extern uint8_t Rx_homenet_buffer[60],Rx_display_buffer[25],Rx_roomcon232_buffer[25],Rx_debug_buffer[20];
extern uint8_t Uart_Rx0,Uart_Rx1,Uart_Rx2, Uart_Rx3 ;
extern uint8_t Rx_homenet_TimeOut, Rx_roomcon_TimeOut, Rx_debug_TimeOut;
extern uint8_t Test_Fan1_Speed, Test_Fan2_Speed;
extern 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;
extern 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;
extern volatile uint16_t Filter_timer_clean;
extern volatile uint16_t Filter_timer_change;
extern volatile uint16_t Soja_timer_change;
extern volatile uint8_t Run_Mode, Auto_Mode, Fan_Mode;
extern uint8_t Power_On;
extern uint16_t SEN66_pm1p0[7], SEN66_pm2p5[7], SEN66_pm4p0[7], SEN66_pm10p0[7];
extern int16_t SEN66_humidity_value[7];
extern int16_t SEN66_temperature_value[7];
extern int16_t SEN66_VOC_value[7];
extern int16_t SEN66_NOx_value[7];
extern uint16_t SEN66_CO2_value[7];
extern uint8_t Diffuser_VSP_Mode;
extern uint8_t Diffuser_Power[7];
extern uint8_t Diffuser_Run_Mode[7];
extern uint8_t Diffuser_Fan_Speed[7];
extern uint8_t Diffuser_Dmp_Ang_SA[7],Memory_Diffuser_Dmp_Ang_SA[7]; //Damper Angle
extern uint8_t Diffuser_Dmp_Ang_RA[7],Memory_Diffuser_Dmp_Ang_RA[7]; //Damper Angle
extern uint8_t Diffuser_Air_quality[7],Memory_Diffuser_Air_quality[7];
extern uint8_t Diffuser_Damper_Manual[7]; /* 대시보드 수동 댐퍼 오버라이드(각실 1~4) */
extern uint8_t Diffuser_Led_Manual[7]; /* 대시보드 수동 LED 오버라이드(각실 1~4) */
extern uint16_t Reserve_Remain_Sec; /* (꺼짐)예약 잔여초 (0=예약없음) */
extern volatile uint8_t Vsp_Mode[5];
extern volatile uint8_t Pre_Vsp_Mode;
extern uint16_t Test_RPM_Vent_Reference[5];
extern uint16_t Test_RPM_Vent_Delta[5];
extern uint16_t Test_RPM_Air_Reference[5];
extern uint16_t Test_RPM_Air_Delta[5];
extern uint16_t RPM_Vent_Reference[5];
extern uint16_t RPM_Vent_Delta[5];
extern uint16_t RPM_Air_Reference[5];
extern uint16_t RPM_Air_Delta[5];
#define ST_LED PA10
#define TEMP1_ADC PA0
#define TEMP2_ADC PA1
#define VOLUM1_ADC PA2
#define VOLUM2_ADC PA3
#define CURRENT_VOL PA4
#define P_SW PA11
#define BLDC_PW PB7
#define UV_PW PA5
#define P_UV PF2
#define HOOD_485_TX PB1
#define HOOD_485_RX PB0
#define HOOD_485_DIR PB2
#define HOMENET_485_TX PB5
#define HOMENET_485_RX PB4
#define HOMENET_485_DIR PB6
#define ROOMCON_TX PA8
#define ROOMCON_RX PA9
#define BUNBAGI_485_TX2 PC0
#define BUNBAGI_485_RX2 PC1
#define BUNBAGI_485_DIR PC7
#define BLDC_SA_PWM PB11
#define BLDC_SA_FG_IN PE5
#define BLDC_EA_PWM PA12
#define BLDC_EA_FG_IN PA13
#define REG_STEP_M1_A PB12
#define REG_STEP_M1_B PB13
#define REG_STEP_M1_NA PB14
#define REG_STEP_M1_NB PB8
#define REG_STEP_M2_A PB15
#define REG_STEP_M2_B PC14
#define REG_STEP_M2_NA PC15
#define REG_STEP_M2_NB PC6
#define REG_STEP_M3_A PA6
#define REG_STEP_M3_B PA14
#define REG_STEP_M3_NA PA15
#define REG_STEP_M3_NB PC8
#define REG_STEP_M4_A PC9
#define REG_STEP_M4_B PC10
#define REG_STEP_M4_NA PC11
#define REG_STEP_M4_NB PB9
#define REG_STEP_M5_A PB10
#define REG_STEP_M5_B PC2
#define REG_STEP_M5_NA PC3
#define REG_STEP_M5_NB PD15
#define REG_STEP_M6_A PD14
#define REG_STEP_M6_B PD7
#define REG_STEP_M6_NA PD6
#define REG_STEP_M6_NB PB3
#define DAMPER_EA 1
#define DAMPER_OA 2
#define DAMPER_BYPASS 3
#define DAMPER_SA 4
#define DAMPER_RA 5 // 3???í¼
#define DAMPER_AIR 6
//---------------------------------------------------------------
#define ERROR_FILTER_CLEAN 0x01
#define ERROR_FILTER_CHANGE 0x02
#define ERROR_SOJA_CHANGE 0x04
#define ERROR_TEMP_SENSOR 0x08
#define ERROR_SA_FAN 0x80
#define ERROR_EA_FAN 0x20
#define ERROR_PROTECT 0x10 //2020.9.2
#define ERROR_SOMETIME 0x40 //2020.9.10
#define RX_DATA_MODE_NORMAL 0
#define RX_DATA_MODE_EVENT 0x01
#define RX_DATA_MODE_RESTART1 0x02
#define RX_DATA_MODE_RESTART2 0x12
#define RX_DATA_MODE_VSP 0x03
#define RX_DATA_MODE_EXIT 0x04
#define RX_DATA_FILTER_INFO 0x05 //(룸콘 -> 환기장치)
#define RX_DATA_SENSOR_INFO 0x06 //(환기장치 -> 룸콘)
#define RX_DATA_CONTROLL 0x07 //(환기장치 -> 룸콘)
#define RX_DATA_HOOD_INFO 0x0A //(main -> room) // // add 2022.1.25
#define RX_DATA_CONTROLL_INFO 0x80 //(룸콘 -> 환기장치)
#define RX_DATA_RPM_INFO 0x81 //(환기장치 -> 룸콘) // 2021.5.31
#define RX_DATA_ERROR_CLEAR 0x22 //2021.5.31
//-----------------------------------------------------------------
#define SPEC_VERSION1_INFO 0x01
#define SPEC_VERSION2_INFO 0x00
#define SPEC_DEVICE_TYPE_INFO 0x04//0x10 // C1 = 0x01, C2 = 0x02, E = 0x03, EBSN = 0x04, EBN = 0x05, EF = 0x06, A = 0x07, EF2=0x08, EGI=0x09, C4=0x10
#define SPEC_CMH_INFO 0x03 // 50=1, 70=2, 100=3, 120=4, 150=5, 200=6, 250=7
// 1 : 일반 히터O - 환기/자동
// 2 : 바이패스 히터O - 환기/자동/바이패스
// 3 : 공청 히터O - 환기/자동/공청/바이패스
// 4 : 일반 히터X - 환기/자동
// 5 : 바이패스 히터X - 환기/자동/바이패스
// 6 : 공청 히터X - 환기/자동/공청/바이패스
// 0x10 | 대림사양
// 0x20 | UV 사용
#define SPEC_MODE_INFO 0x16
// 연동없음 = 0, 삼성SDS=1, 씨브이넷=2, 아이콘트롤=3, 코맥스=4, 코콤=5, 현대통신=6, | 세익=0x10, 신동테크=0x20, 한국하니웰=0x30, 한성시스코=0x40
#define SPEC_HOMENET_INFO 0x00 //
#define SPEC_HOOD_INFO 0x01 //
//////////////////////////////////////////////////////////////
#if(((SPEC_MODE_INFO&0x0F) ==0x03)||((SPEC_MODE_INFO&0x0F) ==0x06))
// airclean mode O
#define MODE_VENTILATION 0
#define MODE_AUTO 1
#define MODE_AIRCLEAN 2
#define MODE_BYPASS 3
#define MODE_FAN_TEST 4
#else
// airclean mode X
#define MODE_VENTILATION 0
#define MODE_AUTO 1
#define MODE_BYPASS 2
#define MODE_AIRCLEAN 3 // not used
#define MODE_FAN_TEST 4
#endif
//---------------------------------------------------------------
#define MAIN_FW_VERSION 0x01
//---------------------------------------------------------------------
#define EEP_ADDR_START 0x01
#define EEP_ADDR_MODBUS_ID 0x05
#define EEP_FAN1_VEN_1_DAN 10
#define EEP_FAN1_VEN_2_DAN 11
#define EEP_FAN1_VEN_3_DAN 12
#define EEP_FAN1_VEN_4_DAN 13
#define EEP_FAN1_AIR_1_DAN 14
#define EEP_FAN1_AIR_2_DAN 15
#define EEP_FAN1_AIR_3_DAN 16
#define EEP_FAN1_AIR_4_DAN 17
#define EEP_FAN1_BYPASS_1_DAN 18
#define EEP_FAN1_BYPASS_2_DAN 19
#define EEP_FAN1_BYPASS_3_DAN 20
#define EEP_FAN1_BYPASS_4_DAN 21
#define EEP_FAN2_VEN_1_DAN 22
#define EEP_FAN2_VEN_2_DAN 23
#define EEP_FAN2_VEN_3_DAN 24
#define EEP_FAN2_VEN_4_DAN 25
#define EEP_FAN2_AIR_1_DAN 26
#define EEP_FAN2_AIR_2_DAN 27
#define EEP_FAN2_AIR_3_DAN 28
#define EEP_FAN2_AIR_4_DAN 29
#define EEP_FAN2_BYPASS_1_DAN 30
#define EEP_FAN2_BYPASS_2_DAN 31
#define EEP_FAN2_BYPASS_3_DAN 32
#define EEP_FAN2_BYPASS_4_DAN 33
#define EEP_FILTER_CLEAN_HOUR_H 34
#define EEP_FILTER_CLEAN_HOUR_L 35
#define EEP_FILTER_CHANGE_HOUR_H 36
#define EEP_FILTER_CHANGE_HOUR_L 37
#define EEP_SOJA_CHANGE_HOUR_H 38
#define EEP_SOJA_CHANGE_HOUR_L 39
#define EEP_BLACKOUT_POWER_ON 40
#define EEP_BLACKOUT_RUN_MODE 41
#define EEP_BLACKOUT_FAN_MODE 42
/* 260520 히스테리시스 프리셋(임계+데드밴드) 영속화 영역 43~127
- 구 m_*_Level (45~68) 영역 폐기·재사용. 1프레임=4B, 페이지 127엔트리 한계 내(약 123) */
#define EEP_HYST_PRESET 43 /* 1B : Hyst_Preset 0~2 (유효성 마커 겸용) */
#define EEP_HYST_DB_BASE 44 /* 12B u8 : Co2_Db[3],Pm25_Db[3],Pm10_Db[3],Voc_Db[3] */
#define EEP_THR_CO2_BASE 56 /* 24B u16: Co2_Thr[3][4] */
#define EEP_THR_VOC_BASE 80 /* 24B u16: Voc_Thr[3][4] */
#define EEP_THR_PM25_BASE 104 /* 12B u8 : Pm25_Thr[3][4] */
#define EEP_THR_PM10_BASE 116 /* 12B u8 : Pm10_Thr[3][4] (116~127) */
#define EEP_SIZE 128
//---------------------------------------------------
#define COMMAND_REQUEST_FILTER_INFO 0x05
#define COMMAND_REQUEST_SENSOR_INFO 0x06
#define COMMAND_CONTROLL 0x07 // mode / speed / reservaion
#define TYPE_POWER 0x40
#define TYPE_MODE 0x01
#define TYPE_FAN_SPEED 0x02
#define TYPE_RESERVATION 0x04
#define TYPE_FILTER_INFO 0x10
#define TYPE_SENSOR_INFO 0x20
#define TYPE_HOOD_STATE 0x40 // add 2022.1.25
#define TYPE_SEND_FLAG 0x80
extern volatile uint8_t Roomcon_connect_mode;
extern volatile uint32_t Set_Reserve_timer_sec;
extern volatile uint8_t Set_Run_Mode, Set_Fan_Mode;
extern uint32_t urpm1, urpm2;
extern uint8_t EEP_Save_Flag;
extern uint8_t Sometime_Mode;
extern uint8_t BlackOut_Power_On;
extern uint8_t BlackOut_Run_Mode;
extern uint8_t BlackOut_Fan_Mode;
extern uint8_t Command_request_type;
/* PC대시보드 제어 → 룸컨(RJ2) 상태 푸시 래치. bunbaegi 의 Command_request_type=0 클리어와 무관하게
* 유지되어 룸컨 누락 방지. TYPE_POWER(0x40)=TYPE_HOOD_STATE 충돌 때문에 모드/풍량 비트만 사용. */
extern volatile uint8_t Homenet_RJ_Request;
uint16_t Diffuser_Damper_process(uint8_t mode);//100ms
uint8_t Air_Quality_damper_process(void);
uint8_t Air_Quality_color_process(void);
extern volatile uint16_t CO2_Histeresys;
extern volatile uint8_t Err_Code;
extern uint8_t Target_Fan1_Speed, Target_Fan2_Speed;
extern volatile uint32_t Reserve_timer_sec;
extern uint8_t s_FAN1_VEN_1_DAN;
extern uint8_t s_FAN1_VEN_2_DAN;
extern uint8_t s_FAN1_VEN_3_DAN;
extern uint8_t s_FAN1_VEN_4_DAN;
extern uint8_t s_FAN1_AIR_1_DAN;
extern uint8_t s_FAN1_AIR_2_DAN;
extern uint8_t s_FAN1_AIR_3_DAN;
extern uint8_t s_FAN1_AIR_4_DAN;
extern uint8_t s_FAN1_BYPASS_1_DAN;
extern uint8_t s_FAN1_BYPASS_2_DAN;
extern uint8_t s_FAN1_BYPASS_3_DAN;
extern uint8_t s_FAN1_BYPASS_4_DAN;
extern uint8_t s_FAN2_VEN_1_DAN;
extern uint8_t s_FAN2_VEN_2_DAN;
extern uint8_t s_FAN2_VEN_3_DAN;
extern uint8_t s_FAN2_VEN_4_DAN;
extern uint8_t s_FAN2_AIR_1_DAN;
extern uint8_t s_FAN2_AIR_2_DAN;
extern uint8_t s_FAN2_AIR_3_DAN;
extern uint8_t s_FAN2_AIR_4_DAN;
extern uint8_t s_FAN2_BYPASS_1_DAN;
extern uint8_t s_FAN2_BYPASS_2_DAN;
extern uint8_t s_FAN2_BYPASS_3_DAN;
extern uint8_t s_FAN2_BYPASS_4_DAN;
extern signed int In_Temperature;
extern signed int Out_Temperature;
extern uint8_t Heater_OnOff, UV_OnOff;
extern uint16_t com_roomcon_delay;
extern uint8_t Filter_Reset_Flag;
extern uint8_t RJ_Vsp_Mode;
extern volatile uint32_t Reserve_timer_sec;
extern volatile uint8_t Reserve_hour, Pre_Reserve_hour;
extern uint16_t m_CO2_Level_1;
extern uint16_t m_CO2_Level_2;
extern uint16_t m_CO2_Level_3,m_CO2_Level_4;
extern uint16_t m_VOC_Level_1;
extern uint16_t m_VOC_Level_2;
extern uint16_t m_VOC_Level_3,m_VOC_Level_4;
extern uint16_t m_PM2_5_Level_1;
extern uint16_t m_PM2_5_Level_2;
extern uint16_t m_PM2_5_Level_3,m_PM2_5_Level_4;
extern uint32_t Damper_Status_Display;
extern uint8_t Force_Damper_Mode;
extern uint8_t Force_Damper_run;
extern uint8_t Focus_Mode;
extern uint16_t Focus_Mode_RunTime;
extern uint8_t ROOM_air_volume[7];
/* 260520 사양 자동 동작로직 (집중/분산) - My_system.c */
extern uint16_t Co2_Thr[3][4];
extern uint16_t Pm25_Thr[3][4];
extern uint16_t Pm10_Thr[3][4];
extern uint16_t Voc_Thr[3][4];
extern uint16_t Co2_Db[3];
extern uint16_t Pm25_Db[3];
extern uint16_t Pm10_Db[3];
extern uint16_t Voc_Db[3];
extern uint8_t Hyst_Preset; /* 0 ECO / 1 NORMAL / 2 TURBO */
extern uint8_t Room_Level[7]; /* 실별 오염단계 0~4 */
extern uint8_t Load_Score; /* 부하 총점 0~16 */
extern uint8_t Auto_P_max;
extern uint8_t Auto_dP;
extern uint8_t Auto_Concentrate; /* 0 분산 / 1 집중 */
uint8_t Hood_process(void);
void Hood_RS485_process(void);
extern uint16_t Hood_Warming_up_Timer;
extern uint8_t Tx_Yeundong_Delay;
extern uint8_t Yuendong_Enable;
extern uint8_t Yeungong_Status;
extern uint8_t Hood_Power_On;
extern uint8_t Hood_Fan_Mode;
extern uint8_t Hood_Control;
extern uint8_t Ext_Run_Mode, Pre_Ext_Run_Mode, Ext_Select_Room, Pre_Ext_Select_Room;
extern uint8_t Hood_Status;
extern uint8_t Hood_Yeundong_flag;
extern uint16_t Ext_Run_Mode_Off_Delay;
extern uint8_t Memory_Hood_Status;
extern uint8_t My_Memory_Run_Mode, My_Memory_Fan_Mode;
extern uint8_t Hood_YeunDong_Enable;
extern uint16_t Hood_Conn_Timeout; /* 후드 485 통신연결 생존 카운터(ms) */
extern uint8_t HREV_Hood_Control;
/* HOMENET(ErvDashboard) 바이너리 프로토콜 - My_Uart.c */
void Homenet_Rx_Byte(uint8_t b);
void Homenet_Process(void);
void Homenet_Send_Status(void);
void Homenet_Build_Status(uint8_t *p);
extern uint8_t Homenet_Reset_State;
extern uint8_t Total_Air_Volume, Pre_Total_Air_Volume;
extern uint8_t Light_Bright[6];