@simplysm/capacitor-plugin-usb-storage 13.0.95 → 13.0.97
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +3 -3
- package/README.md +0 -166
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@simplysm/capacitor-plugin-usb-storage",
|
|
3
|
-
"version": "13.0.
|
|
3
|
+
"version": "13.0.97",
|
|
4
4
|
"description": "Simplysm Package - Capacitor USB Storage Plugin",
|
|
5
5
|
"author": "simplysm",
|
|
6
6
|
"license": "MIT",
|
|
@@ -18,8 +18,8 @@
|
|
|
18
18
|
"android"
|
|
19
19
|
],
|
|
20
20
|
"dependencies": {
|
|
21
|
-
"@simplysm/core-
|
|
22
|
-
"@simplysm/core-
|
|
21
|
+
"@simplysm/core-browser": "13.0.97",
|
|
22
|
+
"@simplysm/core-common": "13.0.97"
|
|
23
23
|
},
|
|
24
24
|
"devDependencies": {
|
|
25
25
|
"@capacitor/core": "^7.6.0"
|
package/README.md
DELETED
|
@@ -1,166 +0,0 @@
|
|
|
1
|
-
# @simplysm/capacitor-plugin-usb-storage
|
|
2
|
-
|
|
3
|
-
Capacitor USB Mass Storage 플러그인. Android에서 USB 저장장치를 열거하고, 권한을 관리하며, 파일을 읽는다.
|
|
4
|
-
|
|
5
|
-
## 설치
|
|
6
|
-
|
|
7
|
-
```bash
|
|
8
|
-
npm install @simplysm/capacitor-plugin-usb-storage
|
|
9
|
-
```
|
|
10
|
-
|
|
11
|
-
**의존성:** `@simplysm/core-common` (Bytes, bytes 유틸), `@simplysm/core-browser` (IndexedDbStore, IndexedDbVirtualFs)
|
|
12
|
-
**Peer:** `@capacitor/core` ^7.4.4
|
|
13
|
-
**Android 네이티브:** `me.jahnen:libaums:core:0.9.1` (USB Mass Storage 라이브러리)
|
|
14
|
-
|
|
15
|
-
## Export 목록
|
|
16
|
-
|
|
17
|
-
```typescript
|
|
18
|
-
// index.ts
|
|
19
|
-
export type { UsbStoragePlugin, UsbDeviceInfo, UsbDeviceFilter, UsbFileInfo } from "./UsbStoragePlugin";
|
|
20
|
-
export { UsbStorage } from "./UsbStorage";
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
## 주요 사용법
|
|
24
|
-
|
|
25
|
-
### 기기 목록 조회
|
|
26
|
-
|
|
27
|
-
```typescript
|
|
28
|
-
import { UsbStorage } from "@simplysm/capacitor-plugin-usb-storage";
|
|
29
|
-
|
|
30
|
-
const devices = await UsbStorage.getDevices();
|
|
31
|
-
// UsbDeviceInfo[] = [{
|
|
32
|
-
// deviceName: "USB Storage",
|
|
33
|
-
// manufacturerName: "SanDisk",
|
|
34
|
-
// productName: "Ultra",
|
|
35
|
-
// vendorId: 1234,
|
|
36
|
-
// productId: 5678,
|
|
37
|
-
// }]
|
|
38
|
-
```
|
|
39
|
-
|
|
40
|
-
### 권한 관리
|
|
41
|
-
|
|
42
|
-
기기별로 `vendorId`/`productId` 조합으로 권한을 확인/요청한다.
|
|
43
|
-
|
|
44
|
-
```typescript
|
|
45
|
-
import type { UsbDeviceFilter } from "@simplysm/capacitor-plugin-usb-storage";
|
|
46
|
-
|
|
47
|
-
const filter: UsbDeviceFilter = { vendorId: 1234, productId: 5678 };
|
|
48
|
-
|
|
49
|
-
const granted = await UsbStorage.checkPermissions(filter); // boolean
|
|
50
|
-
if (!granted) {
|
|
51
|
-
const result = await UsbStorage.requestPermissions(filter); // boolean
|
|
52
|
-
}
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
### 디렉토리 읽기
|
|
56
|
-
|
|
57
|
-
```typescript
|
|
58
|
-
const filter: UsbDeviceFilter = { vendorId: 1234, productId: 5678 };
|
|
59
|
-
|
|
60
|
-
const files = await UsbStorage.readdir(filter, "/documents");
|
|
61
|
-
// UsbFileInfo[] = [{ name: "report.pdf", isDirectory: false }]
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
### 파일 읽기
|
|
65
|
-
|
|
66
|
-
```typescript
|
|
67
|
-
import type { Bytes } from "@simplysm/core-common";
|
|
68
|
-
|
|
69
|
-
const filter: UsbDeviceFilter = { vendorId: 1234, productId: 5678 };
|
|
70
|
-
const data: Bytes | undefined = await UsbStorage.readFile(filter, "/documents/report.pdf");
|
|
71
|
-
// 파일이 없으면 undefined, 있으면 Bytes (Uint8Array)
|
|
72
|
-
```
|
|
73
|
-
|
|
74
|
-
Android에서 최대 파일 크기는 100MB이다.
|
|
75
|
-
|
|
76
|
-
## API 레퍼런스
|
|
77
|
-
|
|
78
|
-
### `UsbStorage` (abstract class, static 메서드)
|
|
79
|
-
|
|
80
|
-
| 메서드 | 시그니처 | 설명 |
|
|
81
|
-
|--------|----------|------|
|
|
82
|
-
| `getDevices` | `() => Promise<UsbDeviceInfo[]>` | 연결된 USB 기기 목록 |
|
|
83
|
-
| `checkPermissions` | `(filter: UsbDeviceFilter) => Promise<boolean>` | 권한 확인 |
|
|
84
|
-
| `requestPermissions` | `(filter: UsbDeviceFilter) => Promise<boolean>` | 권한 요청 (다이얼로그 표시) |
|
|
85
|
-
| `readdir` | `(filter: UsbDeviceFilter, dirPath: string) => Promise<UsbFileInfo[]>` | 디렉토리 목록 |
|
|
86
|
-
| `readFile` | `(filter: UsbDeviceFilter, filePath: string) => Promise<Bytes \| undefined>` | 파일 읽기 (base64 디코딩) |
|
|
87
|
-
|
|
88
|
-
### `UsbDeviceFilter` (interface)
|
|
89
|
-
|
|
90
|
-
```typescript
|
|
91
|
-
interface UsbDeviceFilter {
|
|
92
|
-
vendorId: number;
|
|
93
|
-
productId: number;
|
|
94
|
-
}
|
|
95
|
-
```
|
|
96
|
-
|
|
97
|
-
### `UsbDeviceInfo` (interface)
|
|
98
|
-
|
|
99
|
-
```typescript
|
|
100
|
-
interface UsbDeviceInfo {
|
|
101
|
-
deviceName: string; // USB 디바이스 경로명
|
|
102
|
-
manufacturerName: string; // 제조사
|
|
103
|
-
productName: string; // 제품명
|
|
104
|
-
vendorId: number; // USB Vendor ID
|
|
105
|
-
productId: number; // USB Product ID
|
|
106
|
-
}
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
### `UsbFileInfo` (interface)
|
|
110
|
-
|
|
111
|
-
```typescript
|
|
112
|
-
interface UsbFileInfo {
|
|
113
|
-
name: string; // 파일/디렉토리 이름
|
|
114
|
-
isDirectory: boolean;
|
|
115
|
-
}
|
|
116
|
-
```
|
|
117
|
-
|
|
118
|
-
## 플랫폼 지원
|
|
119
|
-
|
|
120
|
-
| 기능 | Android | Web |
|
|
121
|
-
|------|---------|-----|
|
|
122
|
-
| 기기 열거 | UsbManager + libaums | 가상 기기 (IndexedDB) |
|
|
123
|
-
| 권한 관리 | USB 권한 다이얼로그 (PendingIntent) | 항상 granted |
|
|
124
|
-
| 디렉토리 읽기 | libaums `UsbFile.listFiles()` | IndexedDB 가상 스토리지 |
|
|
125
|
-
| 파일 읽기 | libaums `UsbFileInputStream` (최대 100MB) | IndexedDB base64 데이터 |
|
|
126
|
-
|
|
127
|
-
## Web 테스트용 가상 기기
|
|
128
|
-
|
|
129
|
-
`UsbStorageWeb` 클래스에는 개발/테스트용 메서드가 있다. Capacitor의 `registerPlugin`을 통해 Web 환경에서 자동으로 사용된다.
|
|
130
|
-
|
|
131
|
-
```typescript
|
|
132
|
-
import type { UsbDeviceFilter } from "@simplysm/capacitor-plugin-usb-storage";
|
|
133
|
-
|
|
134
|
-
// Web 환경에서만 UsbStorageWeb 인스턴스의 메서드를 직접 호출해야 함
|
|
135
|
-
// 일반적으로 Capacitor plugin 등록 시 자동으로 Web 구현체가 사용됨
|
|
136
|
-
|
|
137
|
-
// 가상 기기 추가
|
|
138
|
-
await usbStorageWeb.addVirtualDevice({
|
|
139
|
-
vendorId: 1234,
|
|
140
|
-
productId: 5678,
|
|
141
|
-
deviceName: "Test USB",
|
|
142
|
-
manufacturerName: "Test",
|
|
143
|
-
productName: "Drive",
|
|
144
|
-
});
|
|
145
|
-
|
|
146
|
-
// 가상 파일 추가
|
|
147
|
-
const filter: UsbDeviceFilter = { vendorId: 1234, productId: 5678 };
|
|
148
|
-
await usbStorageWeb.addVirtualFile(filter, "/test.txt", new Uint8Array([72, 101, 108, 108, 111]));
|
|
149
|
-
|
|
150
|
-
// 가상 디렉토리 추가
|
|
151
|
-
await usbStorageWeb.addVirtualDirectory(filter, "/docs");
|
|
152
|
-
```
|
|
153
|
-
|
|
154
|
-
Web 가상 스토리지는 `VirtualUsbStorage` 클래스를 사용하며, IndexedDB(`capacitor_usb_virtual_storage`)에 기기와 파일 데이터를 저장한다.
|
|
155
|
-
- 스토어: `devices` (keyPath: `key`, key = `vendorId:productId`), `files` (keyPath: `fullKey`, fullKey = `deviceKey:path`)
|
|
156
|
-
|
|
157
|
-
## Android 네이티브 구현
|
|
158
|
-
|
|
159
|
-
- **패키지:** `kr.co.simplysm.capacitor.usbstorage`
|
|
160
|
-
- **플러그인명:** `UsbStorage`
|
|
161
|
-
- **라이브러리:** `me.jahnen:libaums:core:0.9.1`
|
|
162
|
-
- `getDevices`: `UsbMassStorageDevice.getMassStorageDevices(context)`
|
|
163
|
-
- `requestPermissions`: `UsbManager.requestPermission` + BroadcastReceiver 콜백 (Android 13+: `RECEIVER_NOT_EXPORTED`, Android 12+: `PendingIntent.FLAG_MUTABLE`)
|
|
164
|
-
- `readdir`/`readFile`: 기기 init -> 첫 번째 파티션의 FileSystem -> `root.search(path)` -> 작업 -> `device.close()`
|
|
165
|
-
- `readFile`: `UsbFileInputStream`으로 읽고 base64 인코딩, 최대 100MB 제한
|
|
166
|
-
- **퍼미션 액션:** `kr.co.simplysm.capacitor.usbstorage.USB_PERMISSION`
|