Skip to content

Commit 80dc98a

Browse files
committed
fix: auto open app doc and fix typescript type for useDevice
1 parent 203f027 commit 80dc98a

6 files changed

Lines changed: 37 additions & 27 deletions

File tree

README.md

Lines changed: 29 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,32 @@ Add USB permissions to your `AndroidManifest.xml`:
6161
<uses-permission android:name="android.permission.USB_PERMISSION" />
6262
<uses-feature android:name="android.hardware.usb.host" />
6363
```
64+
## Setup: Auto-Launch App
6465

66+
To make your app open automatically when the hardware is plugged in:
67+
68+
### 1. Define Device Filter
69+
Create `res/xml/device_filter.xml`:
70+
```xml
71+
<?xml version="1.0" encoding="utf-8"?>
72+
<resources>
73+
<!-- Empty tag matches any USB Serial device -->
74+
<usb-device />
75+
</resources>
76+
```
77+
78+
### 2. Configure Manifest
79+
Update your `MainActivity` in `AndroidManifest.xml`:
80+
```xml
81+
<activity android:name=".MainActivity" android:exported="true">
82+
<intent-filter>
83+
<action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
84+
</intent-filter>
85+
<meta-data
86+
android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
87+
android:resource="@xml/device_filter" />
88+
</activity>
89+
```
6590
## Quick Start
6691

6792
### Basic Device Enumeration
@@ -76,9 +101,9 @@ import {
76101
const devices: UsbDevice[] = getDeviceList();
77102

78103
devices.forEach(device => {
79-
console.log(`Device: ${device.productName}`);
80104
console.log(`Vendor ID: ${device.vendorId}`);
81105
console.log(`Product ID: ${device.productId}`);
106+
console.log(`Manufacturer: ${device.manufacturer}`);
82107
});
83108
```
84109

@@ -127,8 +152,8 @@ import {
127152
onReadInterval,
128153
offReadInterval,
129154
type RawReadConfig,
130-
NativeEventEmitter,
131155
} from '@rejaul/react-native-usb-serial';
156+
import {NativeEventEmitter} from 'react-native';
132157

133158
// Configure reading parameters
134159
const readConfig: RawReadConfig = {
@@ -200,7 +225,7 @@ async function readSerialData(): Promise<void> {
200225

201226
## Advanced Usage
202227

203-
### Soil Sensor Integration
228+
### Soil Sensor Integration 8-in-1 (Modbus RTU)
204229

205230
```typescript
206231
import {
@@ -209,8 +234,8 @@ import {
209234
offReadSoilDataInterval,
210235
type SoilSensorConfig,
211236
type SoilData,
212-
NativeEventEmitter,
213237
} from '@rejaul/react-native-usb-serial';
238+
import {NativeEventEmitter} from 'react-native';
214239

215240
// Configure modbus soil sensor
216241
const soilConfig: SoilSensorConfig = {
@@ -311,12 +336,9 @@ async function safeConnect(device: UsbDevice): Promise<void> {
311336

312337
```typescript
313338
type UsbDevice = {
314-
deviceName: string;
315339
vendorId: number;
316340
productId: number;
317341
manufacturer?: string | null;
318-
productName?: string | null;
319-
serialNumber?: string | null;
320342
};
321343
```
322344

example/src/App.tsx

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -42,18 +42,12 @@ function DeviceItem({
4242
disabled={isConnecting}
4343
>
4444
<View style={styles.deviceInfo}>
45-
<Text style={styles.deviceName}>
46-
{device.productName || 'Unknown Device'}
47-
</Text>
4845
<Text style={styles.deviceDetails}>
4946
{device.manufacturer || 'Unknown Manufacturer'}
5047
</Text>
5148
<Text style={styles.deviceIds}>
5249
VID: {device.vendorId} | PID: {device.productId}
5350
</Text>
54-
{device.serialNumber && (
55-
<Text style={styles.serialNumber}>S/N: {device.serialNumber}</Text>
56-
)}
5751
</View>
5852
<View style={styles.buttonContainer}>
5953
{isConnecting ? (
@@ -113,7 +107,7 @@ export default function App() {
113107

114108
// Connect to device
115109
const handleConnectDevice = async (device: UsbDevice) => {
116-
if (selectedDevice?.deviceName === device.deviceName) {
110+
if (selectedDevice?.productId === device.productId) {
117111
setIsConnecting(true);
118112
try {
119113
await disconnect();
@@ -254,7 +248,7 @@ export default function App() {
254248
<DeviceItem
255249
device={item}
256250
onConnect={() => handleConnectDevice(item)}
257-
isSelected={selectedDevice?.deviceName === item.deviceName}
251+
isSelected={selectedDevice?.productId === item.productId}
258252
isConnecting={isConnecting}
259253
/>
260254
)}
@@ -278,7 +272,7 @@ export default function App() {
278272
{isConnectedState ? 'Connected' : 'Disconnected'}
279273
</Text>
280274
<Text style={styles.statusDevice}>
281-
{selectedDevice.productName}
275+
{selectedDevice.productId}
282276
</Text>
283277
</View>
284278
</View>

example/src/examples/DeviceManagementExample.tsx

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ export default function DeviceManagementExample() {
8888
}));
8989
Alert.alert(
9090
'Success',
91-
`Connected to ${device.productName || 'Unknown Device'}`
91+
`Connected to ${device.productId || 'Unknown Device'}`
9292
);
9393
} else {
9494
throw new Error('Failed to establish connection');
@@ -146,17 +146,14 @@ export default function DeviceManagementExample() {
146146
<View style={[styles.deviceCard, isConnected && styles.connectedCard]}>
147147
<View style={styles.deviceInfo}>
148148
<Text style={styles.deviceName}>
149-
{item.productName || 'Unknown Device'}
149+
{item.productId || 'Unknown Device'}
150150
</Text>
151151
<Text style={styles.deviceMeta}>
152152
{item.manufacturer || 'Unknown Manufacturer'}
153153
</Text>
154154
<Text style={styles.deviceIds}>
155155
VID: {item.vendorId} | PID: {item.productId}
156156
</Text>
157-
{item.serialNumber && (
158-
<Text style={styles.serialNumber}>S/N: {item.serialNumber}</Text>
159-
)}
160157
</View>
161158

162159
<TouchableOpacity

example/src/hooks/useUsbSerial.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ export function useUsbSerial(): UseUsbSerialReturn {
9595
if (connected) {
9696
setSelectedDevice(device);
9797
setIsConnectedState(true);
98-
console.log(`[USB] Connected to ${device.productName} (${device.vendorId}:${device.productId})`);
98+
console.log(`[USB] Connected to (${device.vendorId}:${device.productId})`);
9999
} else {
100100
setError('Failed to connect to device');
101101
}

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@rejaul/react-native-usb-serial",
3-
"version": "0.0.1",
3+
"version": "0.1.1",
44
"description": "Production-ready React Native USB serial communication module for Android with Modbus RTU soil sensor support",
55
"main": "./lib/module/index.js",
66
"types": "./lib/typescript/src/index.d.ts",

src/NativeUsbSerial.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,9 @@
11
import { TurboModuleRegistry, type TurboModule , Platform} from 'react-native';
22

33
export type UsbDevice = {
4-
deviceName: string;
54
vendorId: number;
65
productId: number;
7-
manufacturer?: string | null;
8-
productName?: string | null;
9-
serialNumber?: string | null;
6+
manufacturer: string;
107
};
118

129
export type SoilData = {

0 commit comments

Comments
 (0)