(C++) 현재 연결된 USB들의 VID/PID 검출
COM 포트 번호가 매번 바뀌어서 VID/PID로 장치를 찾기로 했다. libusb로 열거하는 방법과, 윈도우에서는 libusb 대신 SetupAPI를 써야 했던 이유를 정리했다.
COM 포트 번호가 매번 바뀌어서 VID/PID로 장치를 찾기로 했다. libusb로 열거하는 방법과, 윈도우에서는 libusb 대신 SetupAPI를 써야 했던 이유를 정리했다.
MFC 응용 프로그램에서 버튼을 클릭하면 텍스트 컨트롤의 문자열을 OpenClipboard와 SetClipboardData로 클립보드에 복사하는 기능을 구현한다.
검사 끝난 장비에 라벨을 붙이려고 TSC P200을 RAW 모드로 직접 제어했다. 드라이버를 우회하는 이유, 줄바꿈과 라벨 규격 때문에 인쇄가 밀리는 문제, WritePrinter가 성공해도 인쇄가 안 되는 경우를 정리했다.
보드가 자기 IP를 알아야 해서 getifaddrs를 썼다. 인터페이스 이름으로 거르면 안 되는 이유, 링크 로컬 주소를 걸러야 하는 이유, 윈도우 GetAdaptersAddresses의 버퍼 재시도 규칙을 정리했다.
C++과 OpenCV로 이미지에서 직사각형을 검출하는 함수를 만들고, 같은 알고리즘을 MFC와 파이썬 환경에서 구현한 예제를 정리한다.
현재 연결된 프로필과 저장된 프로필 목록을 대조해 장비 AP인지 판별한다. WlanQueryInterface의 출력 인자 두 개를 같은 변수로 넘겼다가 포인터가 깨진 일과, wcout에 narrow 리터럴을 넣으면 안 되는 이유를 같이 정리했다.
같은 망의 장비 IP를 찾으려고 arp 출력을 파싱하다 'Too many open files'에 막혔다. system → popen → fork/exec를 거치며 계속 같은 에러가 났고, 결국 프로세스를 안 띄우는 방향으로 돌아선 기록이다.
netsh wlan show profiles와 같은 결과를 WlanGetProfileList로 얻는다. 목록 순서가 곧 연결 우선순위라는 점, 와이드 문자열 변환에서 널 문자가 하나 더 붙는 버그, 저장된 비밀번호를 읽는 방법까지 정리했다.
접속한 AP의 MAC(BSSID)을 뽑는 코드. 이게 내 어댑터 MAC이 아니라는 점, 같은 장비인데 대역마다 BSSID가 다른 점, 로컬 관리 비트로 임의 주소를 구분하는 법까지 정리했다.
WlanQueryInterface로 현재 연결 정보를 직접 받아오는 방법. 연결이 없을 때 나는 에러, 프로필 이름과 실제 SSID의 차이, 신호 품질 값을 dBm으로 되돌리는 식까지 정리했다.