Files
jeon 096111e983 feat: 06-17 신규 작업본 반영 (개발사양서/기능검토/승인원/Source 등 추가)
.claude/ 제외(.gitignore 추가). 기존 초기커밋(5a96a69) 위에 신규·수정·이동분 커밋.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 07:54:58 +09:00

76 lines
3.2 KiB
C#

using ErvDashboard.Model;
using ErvProtocol;
namespace ErvDashboard.Api
{
// StatusRecord(공용 프로토콜 디코드 결과) → DashboardState(WPF UI 모델) 매핑.
// (이전 DashboardProtocol.ApplyStatus 로직 — API 는 UI 비종속, 매핑은 여기로 분리)
public static class StatusMapper
{
public static void Apply(StatusRecord s, DashboardState state)
{
state.PowerOn = s.Power != 0;
state.RunMode = (RunMode)s.RunMode;
state.AutoState = (AutoState)s.AutoState;
state.FanMode = s.FanMode;
state.SubModeBitmap = s.SubMode;
state.Hood = s.HoodEnable; // byte5 bit0 = 연동 Enable
state.HoodRunning = s.HoodRunning; // byte5 bit1 = 연동운전중(메이크업 동작중)
state.HoodConnected = s.HoodConnected; // byte5 bit2 = 후드 통신연결
state.HystPreset = (HystPreset)s.HystPreset;
state.HystPm25 = s.HystPm25;
state.HystPm10 = s.HystPm10;
state.HystVoc = s.HystVoc;
state.HystCo2 = s.HystCo2;
state.ErrorCode = s.ErrorCode;
state.Reset = s.Reset != 0;
state.ReserveRemainSec = s.ReserveRemainSec;
for (int i = 0; i < state.Vsp.Count && i < s.Vsp.Length; i++)
{
state.Vsp[i].Sa = s.Vsp[i].Sa;
state.Vsp[i].Ea = s.Vsp[i].Ea;
}
for (int i = 0; i < state.HystTable.Count && i < s.HystTable.Length; i++)
{
state.HystTable[i].Pm25 = s.HystTable[i].Pm25;
state.HystTable[i].Pm10 = s.HystTable[i].Pm10;
state.HystTable[i].Voc = s.HystTable[i].Voc;
state.HystTable[i].Co2 = s.HystTable[i].Co2;
}
// 모드별 오염단계 임계표
for (int i = 0; i < 3 && i < s.ThrTable.Length; i++)
for (int k = 0; k < 4; k++)
{
state.Co2Thr[i][k] = s.ThrTable[i].Co2[k];
state.Pm25Thr[i][k] = s.ThrTable[i].Pm25[k];
state.Pm10Thr[i][k] = s.ThrTable[i].Pm10[k];
state.VocThr[i][k] = s.ThrTable[i].Voc[k];
}
int totalLoad = 0;
for (int r = 0; r < 4; r++)
{
var src = s.Rooms[r];
var room = state.Rooms[r];
room.DamperSaOpen = src.DamperSa; // 비트맵 bit0
room.DamperEaOpen = src.DamperEa; // 비트맵 bit1
room.Pm25 = src.Pm25;
room.Pm10 = src.Pm10;
room.Voc = src.Voc;
room.Co2 = src.Co2;
room.AirQuality = (AirQuality)src.AirQuality;
room.LedDim = src.LedDim;
room.LoadScore = src.LoadScore;
room.FinalVolume = src.FinalVolume;
room.Temp = src.Temp;
room.Humi = src.Humi;
totalLoad += src.LoadScore;
}
state.TotalLoadScore = totalLoad; // 합산 부하점수 (0~16)
}
}
}