juc500 정상동작

This commit is contained in:
Macbook
2026-07-21 21:04:25 +09:00
parent ff60cee1cc
commit 1388668b56
2917 changed files with 708021 additions and 651 deletions
@@ -0,0 +1,79 @@
# 폐쇄망 Windows 11 — 오프라인 빌드/실행
이 저장소의 `vendor/` 에는 **인터넷 없이** 설치·실행할 수 있는 파일이 포함되어 있습니다.
## 포함 내용
- `vendor/wheels/*.whl` — pyusb, pynput, setuptools, pip, virtualenv 등
- `vendor/libusb-1.0.dll` — libusb x64
- `vendor/python-windows/` — Python 3.11.9 embeddable (시스템 Python 불필요)
- `vendor/get-pip.py` — 오프라인 pip 설치
- `vendor/tools/zadig.exe` — WinUSB 바인딩 (폐쇄망용, 오프라인)
## 지원 케이블
| 모델 | USB ID | 비고 |
|------|--------|------|
| **JUC500** | `0711:7500` | Interface 5 (MI_05) bulk 파일 전송 |
## 대상 PC에서 **신규** 설치
1. 소스 트리 전체를 USB 등으로 복사 (특히 `vendor/` 누락 금지)
- Mac에서 전체 zip: `./scripts/make_windows_bundle.sh` (`.venv` 제외, `vendor/` 포함)
2. Git Bash (권장):
```bash
cd /c/dev/juc500
./start_win.sh
```
첫 실행 시 `vendor/` 로 `.venv`·`libusb` 가 **자동 생성**됩니다.
또는 CMD:
```bat
cd c:\dev\juc500
scripts\setup_windows.bat
.\start.bat
```
## 이미 설치된 PC에 **소스 업데이트만** (폐쇄망)
Mac에서:
```bash
./scripts/make_offline_windows_update.sh
```
생성물:
- `dist-offline/juc500-offline-update-*.zip`
- 바탕화면 동일 zip
- `vendor/tools/zadig.exe`, `vendor/wheels`, `juc500_xfer/*`, `apply_offline_update.bat` 포함
Windows에서:
1. zip을 USB로 복사·압축 해제
2. JUC500 GUI 종료
3. `apply_offline_update.bat` 실행 (기본 `C:\dev\juc500`)
4. `start.bat` 재실행 → 상단 빌드 태그가 `BUILD.txt`의 `XFER_BUILD`와 일치하는지 확인
인터넷·PyPI 불필요.
## USB / WinUSB
장치 Interface 5 는 **Zadig → WinUSB** 가 필요합니다.
```
vendor\tools\zadig.exe
```
Options → List All Devices → `Smart Data Link` (0711:7500) → **Interface 5 (MI_05)** → WinUSB.
## 온라인 PC에서 vendor 갱신
```bat
python -m pip download -d vendor\wheels ^
pyusb==1.2.1 pynput==1.8.2 six==1.17.0 ^
"setuptools>=68" wheel packaging pip build virtualenv
```
@@ -0,0 +1,54 @@
# Windows 11 — Access denied (Interface 5) 해결
연결 시 아래 메시지가 나오면:
```
USB interface 5 점유 실패: [Errno 13] Access denied (insufficient permissions)
```
케이블은 보이지만, **Interface 5를 쓸 권한이 없다**는 뜻입니다.
(공식 Wormhole 드라이버가 Interface 5를 점유 중일 때가 가장 흔합니다.)
## 해결 순서
### 1. 공식 앱 종료/제거
이 앱은 실행·연결 시 Wormhole를 **자동 종료**합니다. 그래도 Access denied면:
- GUI 상단 **Wormhole 종료** 버튼, 또는 `python -m juc500_xfer kill-wormhole`
- 작업 관리자에서 `Wormhole` / `SmartDataLink` / `j5create` 수동 종료
- 설정 → 앱에서 j5create Wormhole 제거 (가능하면)
### 2. Zadig로 Interface 5만 WinUSB 변경
1. [Zadig](https://zadig.akeo.ie/) 를 **관리자 권한**으로 실행
2. **Options → List All Devices**
3. 드롭다운에서 다음 중 하나를 고릅니다.
- `Smart Data Link (Interface 5)`
- 또는 `USB ID` 가 `0711:7500` 이고 이름/인스턴스에 **MI_05** 포함
4. 오른쪽 Driver 를 **WinUSB** 로 선택
5. **Replace Driver**
6. USB 케이블을 뽑았다가 Windows 쪽에 다시 연결
> Interface 2(대용량 저장소 CD), 3·4(HID) 는 바꾸지 마세요.
### 3. 장치 관리자 확인
장치 관리자 → 보기 → 디바이스(연결 기준)
- `0711` / `Smart Data Link` 하위 **MI_05** 항목의 드라이버가 **WinUSB** 인지 확인
- `j5create` / `Wormhole` / `OTi` 드라이버면 → 드라이버 제거 후 Zadig 다시
### 4. 재실행
```powershell
python -m juc500_xfer doctor
python -m juc500_xfer gui
```
그다음 **연결**.
## 참고
- Access denied 는 “관리자 미실행”보다 **잘못된 USB 드라이버** 문제인 경우가 훨씬 많습니다.
- libusb DLL(`vendor\libusb-1.0.dll` → `.venv\Scripts\`)도 필요합니다.
@@ -0,0 +1,114 @@
# Windows 11 설정
## 연결 시 Access denied (Interface 5)
```
USB interface 5 점유 실패: [Errno 13] Access denied
```
→ 케이블은 보이지만 Interface 5가 WinUSB가 아닙니다.
자세한 단계: [`WINDOWS-ACCESS-DENIED.md`](WINDOWS-ACCESS-DENIED.md)
요약: GUI **Wormhole 종료** → Zadig → **List All Devices** → **Smart Data Link (Interface 5) / MI_05** → **WinUSB** → Replace Driver → 케이블 재연결.
## 소스에서 실행 (오프라인 wheel 포함)
저장소의 `vendor/wheels/pyusb-1.2.1-py3-none-any.whl` 을 사용합니다. PyPI 접속이 없어도 됩니다.
```powershell
cd juc500
py -3 -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install --no-index --find-links=vendor\wheels -r requirements.txt
pip install -e .
python -m juc500_xfer gui
```
또는 `scripts\setup_windows.bat`
설치 후 실행 (Git Bash):
```bash
./start.sh
```
CMD/탐색기에서는 `start.bat` 을 사용해도 됩니다.
## 설치파일 사용 (권장)
1. `JUC500-Setup-win64.exe` 실행해 설치
또는 `JUC500-portable.exe` / zip 포터블 사용
2. 아래 **Zadig WinUSB** 설정
3. `JUC500` 실행 → 브라우저 GUI → **연결**
Mac에서 빌드 산출물 받기:
```bash
./build-installer-windows.sh --ci
```
## 1. Zadig로 WinUSB 바인딩
1. [Zadig](https://zadig.akeo.ie/) 실행 (관리자)
2. Options → **List All Devices**
3. `Smart Data Link` / `SmartKMLink` 선택
4. 하단에서 **Interface 5** 선택 → Driver: **WinUSB** → Replace Driver
5. 마찬가지로 **Interface 1** (CDC Data) 권장
6. Interface 2(Mass Storage), 3·4(HID) 는 그대로 두세요.
공식 Wormhole가 설치돼 있으면 GUI의 **Wormhole 종료** 또는 `python -m juc500_xfer kill-wormhole` 후 Zadig를 실행하세요.
### SmartKMLink가 목록에 하나만 보이고 MI_05가 없을 때
OEM 드라이버가 **복합 장치 전체**를 한 덩어리로 붙잡고 있으면 Zadig에 `MI_00`…`MI_05` 하위 항목이 안 나옵니다. 아래 순서로 인터페이스를 분리하세요.
**A. Zadig 옵션 확인**
1. 관리자 실행
2. Options → **List All Devices** 체크
3. Options → **Ignore Hubs or Composite Parents** 체크 해제 후 목록을 다시 연다
4. 같은 이름이라도 USB ID가 `0EA0:7301` / `0EA0:7301 (MI_05)` 처럼 다른 항목이 있는지 확인
5. 장치 선택 후 창 하단 **Interface** 숫자(0~5)를 **5**로 바꿀 수 있으면 → WinUSB → Replace Driver
**B. 장치 관리자로 OEM 드라이버 제거 (권장, MI_xx 분리)**
1. JUC500 / Wormhole 종료
2. `devmgmt.msc` → 보기 → **장치(연결)별** / **숨김 장치 표시**
3. **범용 직렬 버스 장치** · **휴대용 장치** · **디스크 드라이브** 등에서
`SmartKMLink` / `WORMHOLE` / `j5create` / `0EA0` 관련 항목을 모두 찾는다
4. 각 항목 → 제거 → **이 장치의 드라이버 소프트웨어 삭제** 체크
5. 케이블 분리 → 5초 대기 → 다시 연결
6. Windows가 **USB 복합 장치(usbccgp)** + 자식 `MI_00`…`MI_05` 로 다시 잡히면
Zadig List All Devices 에 Interface/MI_05 가 나타난다
7. **MI_05 (Interface 5)** 만 WinUSB 설치 (저장장치·HID MI는 건드리지 않음)
**C. 그래도 MI_05가 없을 때 (최후 수단)**
복합 부모(`USB Composite Device` / usbccgp, USB ID `0EA0:7301` 에 MI 없음)에
WinUSB를 씌우면 libusb로 IF5에 접근 가능해질 수 있다.
단, 같은 케이블의 CD롬/HID/가상 시리얼이 Windows에서 안 보일 수 있다.
파일 전송만 필요하면 이 방법으로 진행한 뒤 `start.bat` 로 연결을 확인한다.
복구: 장치 관리자에서 해당 WinUSB 장치 제거(+드라이버 삭제) 후 케이블 재연결.
## 2. libusb DLL
[libusb releases](https://github.com/libusb/libusb/releases) 에서 MS64/dll을 받아:
```
juc500/vendor/libusb-1.0.dll
```
에 두거나 PATH에 추가합니다.
## 3. 실행
```powershell
py -3 -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -r requirements.txt
python -m juc500_xfer info
python -m juc500_xfer recv --dest $env:USERPROFILE\Downloads -y
```
Mac 쪽에서 `send` 하면 전송이 시작됩니다.