[ UI (Dialog) ]
↓ (버튼 / 체크박스 / 콤보박스 이벤트)
[ CRS232SwitchLEDMonitorDlg ]
↓
[ 패킷 생성 MakePacket() ]
↓
[ RS232 WriteFile ]
↓
[ 보드 (LED 제어) ]
class CRS232SwitchLEDMonitorDlg : public CDialogEx
-> 이 클래스가 모든 것을 관리함

HANDLE m_hCom; // 실제 COM 핸들
BOOL m_bComOpen; // 열려있는지 여부
m_hCom → OS 리소스
m_bComOpen → 논리 상태 판단
: 실무에서도 항상 같이 씀
BYTE m_ledState; // 0000 0000
| 비트 | LED |
| ---- | ---- |
| bit0 | LED1 |
| bit1 | LED2 |
| bit2 | LED3 |
| bit3 | LED4 |
예: LED1 + LED3 → 0000 0101 → 0x05
BEGIN_MESSAGE_MAP(CRS232SwitchLEDMonitorDlg, CDialogEx)
ON_BN_CLICKED(IDC_BTN_COM, &CRS232SwitchLEDMonitorDlg::OnBnClickedBtnCom)
ON_BN_CLICKED(IDC_CHK_LED1, &CRS232SwitchLEDMonitorDlg::OnBnClickedChkLed1)
ON_CBN_SELCHANGE(IDC_CB_COMPORT, &CRS232SwitchLEDMonitorDlg::OnCbnSelchangeCbComport)
END_MESSAGE_MAP()
-> "어떤 UI → 어떤 함수" 연결표
[ 체크박스 클릭 ]
↓
OnBnClickedChkLed1()
↓
m_ledState 비트 변경
↓
SendLedPacket()

STX | CH | CMD | LEN | DATA | SUM | ETX
02 30 31 30 45 30 30 30 32 30 33 36 03
| 필드 | 설명 |
| ---- | ------ |
| STX | 0x02 |
| CH | "01" |
| CMD | "0E" |
| LEN | "0002" |
| DATA | "03" |
| SUM | 체크섬 |
| ETX | 0x03 |
※ 숫자처럼 보여도 전부 ASCII
※ 0x30 = '0'
“프로토콜 담당”
SendLedPacket()
{
m_ledState → "03"
MakePacket()
WriteFile()
}
-> 데이터 → 패킷 → 전송
OnCbnSelchangeCbComport()
{
Close COM
Reset LED
Reset UI
}
-> “포트 변경 = 시스템 리셋”