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
+48
View File
@@ -0,0 +1,48 @@
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<bool>? ConnectionChanged;
// ---- 수신 ----
event Action<StatusRecord>? StatusReceived; // STATUS 디코드 완료
event Action<string>? 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
// ---- 데모/테스트 (합성 STATUS를 수신 경로로 주입) ----
void InjectDemoStatus(int tick);
}
}