using ErvProtocol; namespace ErvDashboard.Api { // PC 대시보드 ↔ ERV (PC_ERV_Protocol.md) 통신을 함수로 감싼 API. // 내부적으로는 485 프레임(CtrlFrame 송신 / STATUS 수신)을 그대로 사용한다. // 즉 전송 방식(프로토콜)은 불변이고, 호출부가 바이트 대신 의미 있는 함수를 쓰도록 캡슐화한 것. public interface IErvApi : IDisposable { // ---- 연결 ---- bool IsConnected { get; } bool Connect(string port, int baud); void Disconnect(); event Action? ConnectionChanged; // ---- 수신 ---- event Action? StatusReceived; // STATUS 디코드 완료 event Action? Log; // 프레임/이벤트 hex 로그 void RequestStatus(); // STATUS 요청 (0x0A) // 최근 수신한 STATUS 기준 각실(room 1~4) 상태 조회. 수신 이력이 없거나 room 범위 밖이면 false. bool GetRoomStatus(int room, out bool damperSa, out bool damperEa, out AirQuality airQuality, out int led); // ---- 제어(기본) ---- void SetPower(bool on); // 0x01 void SetRunMode(RunMode mode); // 0x02 void SetFan(int speed); // 0x03 (0~4) void SetSubMode(SubModeType type, bool on); // 0x04 void SetHood(bool on); // 0x05 void SetReserve(int hours); // 0x0E (0~8, 0=해제) void SetReset(bool on); // 0x0B // ---- 각실 ---- void SetDiffuserDamper(int room, int type, bool open); // 0x08 (type 0=급기/1=배기) void SetDiffuserLed(int room, int dim); // 0x09 (0~9) // ---- 풍량 VSP ---- void SetVsp(int group, int index, int sa, int ea); // 0x0C // ---- 히스테리시스 ---- void SetHystPreset(HystPreset preset); // 0x06 void SetHystDeadband(int preset, int pm25, int pm10, int voc, int co2); // 0x07 void SetHystThreshold(int preset, int pollutant, int l1, int l2, int l3, int l4); // 0x0D } }