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:
@@ -0,0 +1,189 @@
|
||||
<UserControl x:Class="DiffuserSimulator.RoomPanel"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
<!-- 디퓨저 각실(방) 1개 패널 — 디자이너에서 이 레이아웃만 수정하면 5실에 모두 반영됨.
|
||||
컨트롤 동작(이벤트)은 MainWindow.BuildRoomPanels 에서 연결한다. -->
|
||||
<Border Background="{StaticResource SecondaryBgBrush}" CornerRadius="8" Padding="10" Margin="3">
|
||||
<ScrollViewer VerticalScrollBarVisibility="Auto">
|
||||
<StackPanel>
|
||||
|
||||
<!-- 헤더: 활성 체크 + 색상 + 이름 / 상태 -->
|
||||
<Grid Margin="0,0,0,6">
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<CheckBox x:Name="ChkEnabled" VerticalAlignment="Center" Margin="0,0,6,0"/>
|
||||
<Ellipse x:Name="HdrColor" Width="8" Height="8" Fill="#7DCFFF"
|
||||
Margin="0,0,5,0" VerticalAlignment="Center"/>
|
||||
<TextBlock x:Name="HdrName" Text="거실" FontSize="14" FontWeight="Bold"
|
||||
Foreground="{StaticResource TextPrimaryBrush}"/>
|
||||
</StackPanel>
|
||||
<TextBlock x:Name="TxtStatus" Text="대기" FontSize="10" HorizontalAlignment="Right"
|
||||
VerticalAlignment="Center" Foreground="Gray"/>
|
||||
</Grid>
|
||||
|
||||
<TextBlock x:Name="TxtRxCount" Text="수신: 0" FontSize="9"
|
||||
Foreground="{StaticResource TextSecondaryBrush}" Margin="0,0,0,4"/>
|
||||
<Separator Background="{StaticResource BorderBrush}" Margin="0,4,0,4"/>
|
||||
|
||||
<!-- 배기(RA) 디퓨저 -->
|
||||
<Grid Margin="0,4,0,2">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBlock Text="배기 댐퍼(열림)" FontSize="11" VerticalAlignment="Center"
|
||||
Foreground="{StaticResource TextPrimaryBrush}"/>
|
||||
<ToggleButton x:Name="TglEA" Grid.Column="1" Style="{StaticResource ToggleSwitch}"/>
|
||||
</Grid>
|
||||
<Grid Margin="0,0,0,3">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="52"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBlock x:Name="TxtEALabel" Text="RA 각도" FontSize="10" VerticalAlignment="Center"
|
||||
Foreground="{StaticResource TextSecondaryBrush}"/>
|
||||
<TextBox x:Name="TbEAAngle" Grid.Column="1" Text="0" FontSize="11" Padding="4,2"
|
||||
Background="{StaticResource CardBgBrush}" Foreground="{StaticResource TextPrimaryBrush}"
|
||||
BorderBrush="{StaticResource BorderBrush}" BorderThickness="1"/>
|
||||
</Grid>
|
||||
<!-- RA2 (거실2 = ID2 0x00) — 거실 전용. 힘펠 모드에서만 활성 -->
|
||||
<Grid x:Name="GridEA2" Margin="0,0,0,3" Visibility="Collapsed">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="52"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBlock Text="RA2 각도" FontSize="10" VerticalAlignment="Center"
|
||||
Foreground="{StaticResource TextSecondaryBrush}"/>
|
||||
<TextBox x:Name="TbEAAngle2" Grid.Column="1" Text="0" FontSize="11" Padding="4,2"
|
||||
Background="{StaticResource CardBgBrush}" Foreground="{StaticResource TextPrimaryBrush}"
|
||||
BorderBrush="{StaticResource BorderBrush}" BorderThickness="1"/>
|
||||
</Grid>
|
||||
<CheckBox x:Name="ChkCloseRA" Content="RA 수동 닫기" FontSize="10"
|
||||
Foreground="{StaticResource TextSecondaryBrush}" Margin="0,2,0,2"/>
|
||||
|
||||
<Separator Background="{StaticResource BorderBrush}" Margin="0,4,0,4"/>
|
||||
|
||||
<!-- 공기질 센서값 -->
|
||||
<TextBlock Text="공기질 센서값" FontSize="11" FontWeight="SemiBold"
|
||||
Foreground="{StaticResource TextSecondaryBrush}" Margin="0,2,0,4"/>
|
||||
<Grid Margin="0,0,0,3">
|
||||
<Grid.ColumnDefinitions><ColumnDefinition Width="52"/><ColumnDefinition Width="*"/></Grid.ColumnDefinitions>
|
||||
<TextBlock Text="PM2.5" FontSize="10" VerticalAlignment="Center" Foreground="{StaticResource TextSecondaryBrush}"/>
|
||||
<TextBox x:Name="TbPM25" Grid.Column="1" Text="25" FontSize="11" Padding="4,2"
|
||||
Background="{StaticResource CardBgBrush}" Foreground="{StaticResource TextPrimaryBrush}"
|
||||
BorderBrush="{StaticResource BorderBrush}" BorderThickness="1"/>
|
||||
</Grid>
|
||||
<Grid Margin="0,0,0,3">
|
||||
<Grid.ColumnDefinitions><ColumnDefinition Width="52"/><ColumnDefinition Width="*"/></Grid.ColumnDefinitions>
|
||||
<TextBlock Text="PM10" FontSize="10" VerticalAlignment="Center" Foreground="{StaticResource TextSecondaryBrush}"/>
|
||||
<TextBox x:Name="TbPM10" Grid.Column="1" Text="30" FontSize="11" Padding="4,2"
|
||||
Background="{StaticResource CardBgBrush}" Foreground="{StaticResource TextPrimaryBrush}"
|
||||
BorderBrush="{StaticResource BorderBrush}" BorderThickness="1"/>
|
||||
</Grid>
|
||||
<Grid Margin="0,0,0,3">
|
||||
<Grid.ColumnDefinitions><ColumnDefinition Width="52"/><ColumnDefinition Width="*"/></Grid.ColumnDefinitions>
|
||||
<TextBlock Text="CO₂" FontSize="10" VerticalAlignment="Center" Foreground="{StaticResource TextSecondaryBrush}"/>
|
||||
<TextBox x:Name="TbCO2" Grid.Column="1" Text="850" FontSize="11" Padding="4,2"
|
||||
Background="{StaticResource CardBgBrush}" Foreground="{StaticResource TextPrimaryBrush}"
|
||||
BorderBrush="{StaticResource BorderBrush}" BorderThickness="1"/>
|
||||
</Grid>
|
||||
<Grid Margin="0,0,0,3">
|
||||
<Grid.ColumnDefinitions><ColumnDefinition Width="52"/><ColumnDefinition Width="*"/></Grid.ColumnDefinitions>
|
||||
<TextBlock Text="VOC" FontSize="10" VerticalAlignment="Center" Foreground="{StaticResource TextSecondaryBrush}"/>
|
||||
<TextBox x:Name="TbVOC" Grid.Column="1" Text="115" FontSize="11" Padding="4,2"
|
||||
Background="{StaticResource CardBgBrush}" Foreground="{StaticResource TextPrimaryBrush}"
|
||||
BorderBrush="{StaticResource BorderBrush}" BorderThickness="1"/>
|
||||
</Grid>
|
||||
<Grid Margin="0,0,0,3">
|
||||
<Grid.ColumnDefinitions><ColumnDefinition Width="52"/><ColumnDefinition Width="*"/></Grid.ColumnDefinitions>
|
||||
<TextBlock Text="TVOC" FontSize="10" VerticalAlignment="Center" Foreground="{StaticResource TextSecondaryBrush}"/>
|
||||
<TextBox x:Name="TbTVOC" Grid.Column="1" Text="250" FontSize="11" Padding="4,2"
|
||||
Background="{StaticResource CardBgBrush}" Foreground="{StaticResource TextPrimaryBrush}"
|
||||
BorderBrush="{StaticResource BorderBrush}" BorderThickness="1"/>
|
||||
</Grid>
|
||||
<Grid Margin="0,0,0,3">
|
||||
<Grid.ColumnDefinitions><ColumnDefinition Width="52"/><ColumnDefinition Width="*"/></Grid.ColumnDefinitions>
|
||||
<TextBlock Text="온도" FontSize="10" VerticalAlignment="Center" Foreground="{StaticResource TextSecondaryBrush}"/>
|
||||
<TextBox x:Name="TbTemp" Grid.Column="1" Text="25" FontSize="11" Padding="4,2"
|
||||
Background="{StaticResource CardBgBrush}" Foreground="{StaticResource TextPrimaryBrush}"
|
||||
BorderBrush="{StaticResource BorderBrush}" BorderThickness="1"/>
|
||||
</Grid>
|
||||
<Grid Margin="0,0,0,3">
|
||||
<Grid.ColumnDefinitions><ColumnDefinition Width="52"/><ColumnDefinition Width="*"/></Grid.ColumnDefinitions>
|
||||
<TextBlock Text="습도" FontSize="10" VerticalAlignment="Center" Foreground="{StaticResource TextSecondaryBrush}"/>
|
||||
<TextBox x:Name="TbHumidity" Grid.Column="1" Text="50" FontSize="11" Padding="4,2"
|
||||
Background="{StaticResource CardBgBrush}" Foreground="{StaticResource TextPrimaryBrush}"
|
||||
BorderBrush="{StaticResource BorderBrush}" BorderThickness="1"/>
|
||||
</Grid>
|
||||
|
||||
<!-- 공기질 프리셋 (RbNoSensor=센서없음). GroupName 없이 부모 UniformGrid 단위로 그룹화 → 실별 독립 -->
|
||||
<TextBlock Text="프리셋" FontSize="9" Foreground="{StaticResource TextSecondaryBrush}" Margin="0,2,0,4"/>
|
||||
<UniformGrid Columns="2" Margin="0,2,0,4">
|
||||
<RadioButton x:Name="RbGood" Content="좋음" Foreground="DodgerBlue" FontSize="10" FontWeight="SemiBold" Margin="0,0,0,2"/>
|
||||
<RadioButton x:Name="RbNormal" Content="보통" Foreground="LimeGreen" FontSize="10" FontWeight="SemiBold" Margin="0,0,0,2" IsChecked="True"/>
|
||||
<RadioButton x:Name="RbBad" Content="나쁨" Foreground="Orange" FontSize="10" FontWeight="SemiBold" Margin="0,0,0,2"/>
|
||||
<RadioButton x:Name="RbVeryBad" Content="매우나쁨" Foreground="OrangeRed" FontSize="10" FontWeight="SemiBold" Margin="0,0,0,2"/>
|
||||
<RadioButton x:Name="RbWorst" Content="최악" Foreground="Red" FontSize="10" FontWeight="SemiBold" Margin="0,0,0,2"/>
|
||||
<RadioButton x:Name="RbNoSensor" Content="센서없음" Foreground="Gray" FontSize="10" FontWeight="SemiBold" Margin="0,0,0,2"/>
|
||||
</UniformGrid>
|
||||
|
||||
<!-- 프리셋모드 (센서값 밴드 선택). 기본 NORMAL -->
|
||||
<TextBlock Text="프리셋모드" FontSize="9" Foreground="{StaticResource TextSecondaryBrush}" Margin="0,2,0,4"/>
|
||||
<UniformGrid Columns="2" Margin="0,2,0,4">
|
||||
<RadioButton x:Name="RbEco" Content="ECO" Foreground="MediumAquamarine" FontSize="10" FontWeight="SemiBold" Margin="0,0,0,2"/>
|
||||
<RadioButton x:Name="RbNorm" Content="NORMAL" Foreground="LimeGreen" FontSize="10" FontWeight="SemiBold" Margin="0,0,0,2" IsChecked="True"/>
|
||||
<RadioButton x:Name="RbTurbo" Content="TURBO" Foreground="Orange" FontSize="10" FontWeight="SemiBold" Margin="0,0,0,2"/>
|
||||
</UniformGrid>
|
||||
|
||||
<!-- LED -->
|
||||
<Grid Margin="0,4,0,2">
|
||||
<TextBlock Text="LED" FontSize="11" Foreground="{StaticResource TextPrimaryBrush}"/>
|
||||
<TextBlock x:Name="TxtLedVal" Text="0 (OFF)" FontSize="11" FontWeight="Bold"
|
||||
HorizontalAlignment="Right" Foreground="{StaticResource AccentYellowBrush}"/>
|
||||
</Grid>
|
||||
<Slider x:Name="SldLed" Minimum="0" Maximum="9" IsSnapToTickEnabled="True"
|
||||
TickFrequency="1" TickPlacement="BottomRight" Value="0"/>
|
||||
<CheckBox x:Name="ChkLedManual" Content="LED 디밍 수동 제어" FontSize="10"
|
||||
Foreground="{StaticResource TextSecondaryBrush}" Margin="0,2,0,2"/>
|
||||
|
||||
<Separator Background="{StaticResource BorderBrush}" Margin="0,4,0,4"/>
|
||||
|
||||
<!-- 급기(SA) 디퓨저 -->
|
||||
<Grid Margin="0,4,0,2">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBlock Text="급기 댐퍼(열림)" FontSize="11" VerticalAlignment="Center"
|
||||
Foreground="{StaticResource TextPrimaryBrush}"/>
|
||||
<ToggleButton x:Name="TglSA" Grid.Column="1" Style="{StaticResource ToggleSwitch}"/>
|
||||
</Grid>
|
||||
<Grid Margin="0,0,0,3">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="52"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBlock x:Name="TxtSALabel" Text="SA 각도" FontSize="10" VerticalAlignment="Center"
|
||||
Foreground="{StaticResource TextSecondaryBrush}"/>
|
||||
<TextBox x:Name="TbSAAngle" Grid.Column="1" Text="0" FontSize="11" Padding="4,2"
|
||||
Background="{StaticResource CardBgBrush}" Foreground="{StaticResource TextPrimaryBrush}"
|
||||
BorderBrush="{StaticResource BorderBrush}" BorderThickness="1"/>
|
||||
</Grid>
|
||||
<!-- SA2 (거실2 = ID2 0x00) — 거실 전용 -->
|
||||
<Grid x:Name="GridSA2" Margin="0,0,0,3" Visibility="Collapsed">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="52"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBlock Text="SA2 각도" FontSize="10" VerticalAlignment="Center"
|
||||
Foreground="{StaticResource TextSecondaryBrush}"/>
|
||||
<TextBox x:Name="TbSAAngle2" Grid.Column="1" Text="0" FontSize="11" Padding="4,2"
|
||||
Background="{StaticResource CardBgBrush}" Foreground="{StaticResource TextPrimaryBrush}"
|
||||
BorderBrush="{StaticResource BorderBrush}" BorderThickness="1"/>
|
||||
</Grid>
|
||||
<CheckBox x:Name="ChkCloseSA" Content="SA 수동 닫기" FontSize="10"
|
||||
Foreground="{StaticResource TextSecondaryBrush}" Margin="0,2,0,2"/>
|
||||
|
||||
</StackPanel>
|
||||
</ScrollViewer>
|
||||
</Border>
|
||||
</UserControl>
|
||||
Reference in New Issue
Block a user