@rhinosw/react-native-usb-serial 0.0.2

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.
@@ -0,0 +1,301 @@
1
+ package com.usbserial
2
+
3
+ import android.hardware.usb.UsbDevice
4
+ import com.facebook.react.bridge.ReactApplicationContext
5
+ import com.facebook.react.module.annotations.ReactModule
6
+ import com.facebook.react.bridge.Arguments
7
+ import com.facebook.react.bridge.WritableArray
8
+ import com.facebook.react.bridge.WritableMap
9
+ import com.facebook.react.bridge.ReadableMap
10
+ import com.rezaul.usbserial.UsbManager
11
+ import com.facebook.react.modules.core.DeviceEventManagerModule
12
+ import com.rezaul.usbserial.RawReadConfig
13
+ import com.rezaul.usbserial.SoilSensorConfig
14
+ import com.facebook.react.bridge.Promise
15
+
16
+ @ReactModule(name = UsbSerialModule.NAME)
17
+ class UsbSerialModule(reactContext: ReactApplicationContext) :
18
+ NativeUsbSerialSpec(reactContext) {
19
+
20
+ private val usbManager = UsbManager(reactContext)
21
+
22
+ override fun multiply(a: Double, b: Double): Double {
23
+ return a * b
24
+ }
25
+
26
+ private fun sendEvent(eventName: String, data: Any?) {
27
+ reactApplicationContext
28
+ .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java)
29
+ .emit(eventName, data)
30
+ }
31
+
32
+ private fun readableMapToUsbDevice(map: ReadableMap): UsbDevice? {
33
+ val devices = usbManager.getDeviceList()
34
+ val vendorId = map.getInt("vendorId")
35
+ val productId = map.getInt("productId")
36
+
37
+ for (device in devices) {
38
+ if (device.vendorId == vendorId && device.productId == productId) {
39
+ return device
40
+ }
41
+ }
42
+ return null
43
+ }
44
+
45
+ private fun usbDeviceToMap(device: UsbDevice): WritableMap {
46
+ val map = Arguments.createMap()
47
+ map.putInt("vendorId", device.vendorId)
48
+ map.putInt("productId", device.productId)
49
+ map.putString("manufacturer", device.manufacturerName)
50
+ return map
51
+ }
52
+
53
+ /**
54
+ * Returns all connected USB devices
55
+ */
56
+ override fun getDeviceList(): WritableArray {
57
+ val result: WritableArray = Arguments.createArray()
58
+ val devices: List<UsbDevice> = usbManager.getDeviceList()
59
+
60
+ for (device in devices) {
61
+ result.pushMap(usbDeviceToMap(device))
62
+ }
63
+
64
+ return result
65
+ }
66
+
67
+ /**
68
+ * Check if app has permission for a specific device
69
+ */
70
+ override fun hasPermission(device: ReadableMap, promise: Promise) {
71
+ try {
72
+ val usbDevice = readableMapToUsbDevice(device)
73
+ if (usbDevice == null) {
74
+ promise.reject("DEVICE_NOT_FOUND", "USB device not found")
75
+ return
76
+ }
77
+
78
+ val hasPermission = usbManager.hasPermission(usbDevice)
79
+ promise.resolve(hasPermission)
80
+ } catch (e: Exception) {
81
+ promise.reject("ERROR", e.message)
82
+ }
83
+ }
84
+
85
+ /**
86
+ * Request USB permission for a specific device
87
+ */
88
+ override fun requestUsbPermission(device: ReadableMap, promise: Promise) {
89
+ try {
90
+ val usbDevice = readableMapToUsbDevice(device)
91
+ if (usbDevice == null) {
92
+ promise.reject("DEVICE_NOT_FOUND", "USB device not found")
93
+ return
94
+ }
95
+
96
+ usbManager.requestUsbPermission(usbDevice) { granted ->
97
+ promise.resolve(granted)
98
+ }
99
+ } catch (e: Exception) {
100
+ promise.reject("ERROR", e.message)
101
+ }
102
+ }
103
+
104
+ /**
105
+ * Connect to a specific USB device with optional baud rate
106
+ */
107
+ override fun connect(device: ReadableMap, baudRate: Double?, promise: Promise) {
108
+ try {
109
+ val usbDevice = readableMapToUsbDevice(device)
110
+ if (usbDevice == null) {
111
+ promise.reject("DEVICE_NOT_FOUND", "USB device not found")
112
+ return
113
+ }
114
+
115
+ val baud = baudRate?.toInt() ?: 9600
116
+ val connected = usbManager.connect(usbDevice, baud)
117
+ promise.resolve(connected)
118
+ } catch (e: Exception) {
119
+ promise.reject("ERROR", e.message)
120
+ }
121
+ }
122
+
123
+ /**
124
+ * Check if serial connection is active
125
+ */
126
+ override fun isConnected(promise: Promise) {
127
+ try {
128
+ val connected = usbManager.isConnected()
129
+ promise.resolve(connected)
130
+ } catch (e: Exception) {
131
+ promise.reject("ERROR", e.message)
132
+ }
133
+ }
134
+
135
+ /**
136
+ * Disconnect the current serial device
137
+ */
138
+ override fun disconnect(promise: Promise) {
139
+ try {
140
+ usbManager.disconnect()
141
+ promise.resolve(null)
142
+ } catch (e: Exception) {
143
+ promise.reject("ERROR", e.message)
144
+ }
145
+ }
146
+
147
+ /**
148
+ * Write data to the serial port
149
+ */
150
+ override fun write(data: String, promise: Promise) {
151
+ try {
152
+ usbManager.write(data.toByteArray())
153
+ promise.resolve(null)
154
+ } catch (e: Exception) {
155
+ promise.reject("ERROR", e.message)
156
+ }
157
+ }
158
+
159
+ /**
160
+ * Read data from the serial port
161
+ */
162
+ override fun read(bufferSize: Double?, timeout: Double?, promise: Promise) {
163
+ try {
164
+ val buffer = bufferSize?.toInt() ?: 1024
165
+ val timeoutVal = timeout?.toInt() ?: 1000
166
+ val data = usbManager.read(buffer, timeoutVal)
167
+ promise.resolve(String(data))
168
+ } catch (e: Exception) {
169
+ promise.reject("ERROR", e.message)
170
+ }
171
+ }
172
+
173
+ /**
174
+ * Start listening for raw serial data at specified interval
175
+ */
176
+ override fun onReadInterval(intervalMs: Double, config: ReadableMap?, promise: Promise) {
177
+ try {
178
+ val bufferSize = config?.getInt("bufferSize") ?: 1024
179
+ val timeout = config?.getInt("timeout") ?: 1000
180
+ val readConfig = RawReadConfig(bufferSize, timeout)
181
+
182
+ usbManager.onReadInterval(
183
+ intervalMs = intervalMs.toLong(),
184
+ onDataReceived = { bytes: ByteArray ->
185
+ val map = Arguments.createMap()
186
+ map.putString("data", String(bytes))
187
+ sendEvent("USB_SERIAL_DATA", map)
188
+ },
189
+ config = readConfig
190
+ )
191
+ promise.resolve(null)
192
+ } catch (e: Exception) {
193
+ promise.reject("ERROR", e.message)
194
+ }
195
+ }
196
+
197
+ /**
198
+ * Stop listening for raw serial data
199
+ */
200
+ override fun offReadInterval(promise: Promise) {
201
+ try {
202
+ usbManager.offReadInterval()
203
+ promise.resolve(null)
204
+ } catch (e: Exception) {
205
+ promise.reject("ERROR", e.message)
206
+ }
207
+ }
208
+
209
+ /**
210
+ * Get currently connected device
211
+ */
212
+ override fun getConnectedDevice(promise: Promise) {
213
+ try {
214
+ val device = usbManager.getConnectedDevice()
215
+ if (device == null) {
216
+ promise.resolve(null)
217
+ } else {
218
+ promise.resolve(usbDeviceToMap(device))
219
+ }
220
+ } catch (e: Exception) {
221
+ promise.reject("ERROR", e.message)
222
+ }
223
+ }
224
+
225
+ /**
226
+ * Read soil sensor data once
227
+ */
228
+ override fun readSoilData(config: ReadableMap?, promise: Promise) {
229
+ try {
230
+ val slaveId = config?.getInt("slaveId") ?: 1
231
+ val startAddress = config?.getInt("startAddress") ?: 0x0000
232
+ val registerCount = config?.getInt("registerCount") ?: 8
233
+ val responseDelayMs = config?.getInt("responseDelayMs") ?: 300
234
+
235
+ val data = usbManager.utils.readSoilData(slaveId, startAddress, registerCount, responseDelayMs)
236
+ if (data == null) {
237
+ promise.resolve(null)
238
+ return
239
+ }
240
+
241
+ val map: WritableMap = Arguments.createMap()
242
+ data.forEach { (key: String, value: Double?) ->
243
+ if (value != null) {
244
+ map.putDouble(key, value)
245
+ }
246
+ }
247
+
248
+ promise.resolve(map)
249
+ } catch (e: Exception) {
250
+ promise.reject("ERROR", e.message)
251
+ }
252
+ }
253
+
254
+ /**
255
+ * Start listening for soil sensor data at specified interval
256
+ */
257
+ override fun onReadSoilDataInterval(intervalMs: Double, config: ReadableMap?, promise: Promise) {
258
+ try {
259
+ val slaveId = config?.getInt("slaveId") ?: 1
260
+ val startAddress = config?.getInt("startAddress") ?: 0x0000
261
+ val registerCount = config?.getInt("registerCount") ?: 8
262
+ val responseDelayMs = config?.getInt("responseDelayMs") ?: 300
263
+ val soilConfig = SoilSensorConfig(slaveId, startAddress, registerCount, responseDelayMs)
264
+
265
+ usbManager.utils.onReadSoilDataInterval(
266
+ intervalMs = intervalMs.toLong(),
267
+ onDataReceived = { soilData: Map<String, Double?> ->
268
+ val map = Arguments.createMap()
269
+
270
+ soilData.forEach { (key: String, value: Double?) ->
271
+ if (value != null) {
272
+ map.putDouble(key, value)
273
+ }
274
+ }
275
+
276
+ sendEvent("USB_SOIL_DATA", map)
277
+ },
278
+ config = soilConfig
279
+ )
280
+ promise.resolve(null)
281
+ } catch (e: Exception) {
282
+ promise.reject("ERROR", e.message)
283
+ }
284
+ }
285
+
286
+ /**
287
+ * Stop listening for soil sensor data
288
+ */
289
+ override fun offReadSoilDataInterval(promise: Promise) {
290
+ try {
291
+ usbManager.utils.offReadSoilDataInterval()
292
+ promise.resolve(null)
293
+ } catch (e: Exception) {
294
+ promise.reject("ERROR", e.message)
295
+ }
296
+ }
297
+
298
+ companion object {
299
+ const val NAME = NativeUsbSerialSpec.NAME
300
+ }
301
+ }
@@ -0,0 +1,31 @@
1
+ package com.usbserial
2
+
3
+ import com.facebook.react.BaseReactPackage
4
+ import com.facebook.react.bridge.NativeModule
5
+ import com.facebook.react.bridge.ReactApplicationContext
6
+ import com.facebook.react.module.model.ReactModuleInfo
7
+ import com.facebook.react.module.model.ReactModuleInfoProvider
8
+ import java.util.HashMap
9
+
10
+ class UsbSerialPackage : BaseReactPackage() {
11
+ override fun getModule(name: String, reactContext: ReactApplicationContext): NativeModule? {
12
+ return if (name == UsbSerialModule.NAME) {
13
+ UsbSerialModule(reactContext)
14
+ } else {
15
+ null
16
+ }
17
+ }
18
+
19
+ override fun getReactModuleInfoProvider() = ReactModuleInfoProvider {
20
+ mapOf(
21
+ UsbSerialModule.NAME to ReactModuleInfo(
22
+ name = UsbSerialModule.NAME,
23
+ className = UsbSerialModule.NAME,
24
+ canOverrideExistingModule = false,
25
+ needsEagerInit = false,
26
+ isCxxModule = false,
27
+ isTurboModule = true
28
+ )
29
+ )
30
+ }
31
+ }
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+
3
+ import { TurboModuleRegistry, Platform } from 'react-native';
4
+ function getModule() {
5
+ return Platform.OS === 'android' ? TurboModuleRegistry.getEnforcing('UsbSerial') : {};
6
+ }
7
+ export default getModule();
8
+ //# sourceMappingURL=NativeUsbSerial.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["TurboModuleRegistry","Platform","getModule","OS","getEnforcing"],"sourceRoot":"..\\..\\src","sources":["NativeUsbSerial.ts"],"mappings":";;AAAA,SAASA,mBAAmB,EAAqBC,QAAQ,QAAO,cAAc;AAmH9E,SAASC,SAASA,CAAA,EAAS;EAC1B,OAAOD,QAAQ,CAACE,EAAE,KAAK,SAAS,GAAGH,mBAAmB,CAACI,YAAY,CAAO,WAAW,CAAC,GAAG,CAAC,CAAS;AACpG;AAEA,eAAeF,SAAS,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,107 @@
1
+ "use strict";
2
+
3
+ import UsbSerial from "./NativeUsbSerial.js";
4
+
5
+ /**
6
+ * Get list of all connected USB devices
7
+ */
8
+ export function getDeviceList() {
9
+ return UsbSerial.getDeviceList();
10
+ }
11
+
12
+ /**
13
+ * Check if app has permission for a device
14
+ */
15
+ export function hasPermission(device) {
16
+ return UsbSerial.hasPermission(device);
17
+ }
18
+
19
+ /**
20
+ * Request USB permission for a device
21
+ */
22
+ export function requestUsbPermission(device) {
23
+ return UsbSerial.requestUsbPermission(device);
24
+ }
25
+
26
+ /**
27
+ * Connect to a USB device
28
+ */
29
+ export function connect(device, baudRate) {
30
+ return UsbSerial.connect(device, baudRate);
31
+ }
32
+
33
+ /**
34
+ * Check if currently connected
35
+ */
36
+ export function isConnected() {
37
+ return UsbSerial.isConnected();
38
+ }
39
+
40
+ /**
41
+ * Disconnect from device
42
+ */
43
+ export function disconnect() {
44
+ return UsbSerial.disconnect();
45
+ }
46
+
47
+ /**
48
+ * Write data to serial port
49
+ */
50
+ export function write(data) {
51
+ return UsbSerial.write(data);
52
+ }
53
+
54
+ /**
55
+ * Read data from serial port
56
+ */
57
+ export function read(bufferSize, timeout) {
58
+ return UsbSerial.read(bufferSize, timeout);
59
+ }
60
+
61
+ /**
62
+ * Start listening for raw serial data
63
+ */
64
+ export function onReadInterval(intervalMs, config) {
65
+ return UsbSerial.onReadInterval(intervalMs, config);
66
+ }
67
+
68
+ /**
69
+ * Stop listening for raw serial data
70
+ */
71
+ export function offReadInterval() {
72
+ return UsbSerial.offReadInterval();
73
+ }
74
+
75
+ /**
76
+ * Get currently connected device
77
+ */
78
+ export function getConnectedDevice() {
79
+ return UsbSerial.getConnectedDevice();
80
+ }
81
+
82
+ /**
83
+ * Read soil sensor data once
84
+ */
85
+ export function readSoilData(config) {
86
+ return UsbSerial.readSoilData(config);
87
+ }
88
+
89
+ /**
90
+ * Start listening for soil sensor data
91
+ */
92
+ export function onReadSoilDataInterval(intervalMs, config) {
93
+ return UsbSerial.onReadSoilDataInterval(intervalMs, config);
94
+ }
95
+
96
+ /**
97
+ * Stop listening for soil sensor data
98
+ */
99
+ export function offReadSoilDataInterval() {
100
+ return UsbSerial.offReadSoilDataInterval();
101
+ }
102
+
103
+ // Export types
104
+
105
+ // Export native module
106
+ export default UsbSerial;
107
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["UsbSerial","getDeviceList","hasPermission","device","requestUsbPermission","connect","baudRate","isConnected","disconnect","write","data","read","bufferSize","timeout","onReadInterval","intervalMs","config","offReadInterval","getConnectedDevice","readSoilData","onReadSoilDataInterval","offReadSoilDataInterval"],"sourceRoot":"..\\..\\src","sources":["index.tsx"],"mappings":";;AAAA,OAAOA,SAAS,MAKT,sBAAmB;;AAE1B;AACA;AACA;AACA,OAAO,SAASC,aAAaA,CAAA,EAAgB;EAC3C,OAAOD,SAAS,CAACC,aAAa,CAAC,CAAC;AAClC;;AAEA;AACA;AACA;AACA,OAAO,SAASC,aAAaA,CAACC,MAAiB,EAAoB;EACjE,OAAOH,SAAS,CAACE,aAAa,CAACC,MAAM,CAAC;AACxC;;AAEA;AACA;AACA;AACA,OAAO,SAASC,oBAAoBA,CAACD,MAAiB,EAAoB;EACxE,OAAOH,SAAS,CAACI,oBAAoB,CAACD,MAAM,CAAC;AAC/C;;AAEA;AACA;AACA;AACA,OAAO,SAASE,OAAOA,CACrBF,MAAiB,EACjBG,QAAiB,EACC;EAClB,OAAON,SAAS,CAACK,OAAO,CAACF,MAAM,EAAEG,QAAQ,CAAC;AAC5C;;AAEA;AACA;AACA;AACA,OAAO,SAASC,WAAWA,CAAA,EAAqB;EAC9C,OAAOP,SAAS,CAACO,WAAW,CAAC,CAAC;AAChC;;AAEA;AACA;AACA;AACA,OAAO,SAASC,UAAUA,CAAA,EAAkB;EAC1C,OAAOR,SAAS,CAACQ,UAAU,CAAC,CAAC;AAC/B;;AAEA;AACA;AACA;AACA,OAAO,SAASC,KAAKA,CAACC,IAAY,EAAiB;EACjD,OAAOV,SAAS,CAACS,KAAK,CAACC,IAAI,CAAC;AAC9B;;AAEA;AACA;AACA;AACA,OAAO,SAASC,IAAIA,CAACC,UAAmB,EAAEC,OAAgB,EAAmB;EAC3E,OAAOb,SAAS,CAACW,IAAI,CAACC,UAAU,EAAEC,OAAO,CAAC;AAC5C;;AAEA;AACA;AACA;AACA,OAAO,SAASC,cAAcA,CAC5BC,UAAkB,EAClBC,MAAsB,EACP;EACf,OAAOhB,SAAS,CAACc,cAAc,CAACC,UAAU,EAAEC,MAAM,CAAC;AACrD;;AAEA;AACA;AACA;AACA,OAAO,SAASC,eAAeA,CAAA,EAAkB;EAC/C,OAAOjB,SAAS,CAACiB,eAAe,CAAC,CAAC;AACpC;;AAEA;AACA;AACA;AACA,OAAO,SAASC,kBAAkBA,CAAA,EAA8B;EAC9D,OAAOlB,SAAS,CAACkB,kBAAkB,CAAC,CAAC;AACvC;;AAEA;AACA;AACA;AACA,OAAO,SAASC,YAAYA,CAC1BH,MAAyB,EACC;EAC1B,OAAOhB,SAAS,CAACmB,YAAY,CAACH,MAAM,CAAC;AACvC;;AAEA;AACA;AACA;AACA,OAAO,SAASI,sBAAsBA,CACpCL,UAAkB,EAClBC,MAAyB,EACV;EACf,OAAOhB,SAAS,CAACoB,sBAAsB,CAACL,UAAU,EAAEC,MAAM,CAAC;AAC7D;;AAEA;AACA;AACA;AACA,OAAO,SAASK,uBAAuBA,CAAA,EAAkB;EACvD,OAAOrB,SAAS,CAACqB,uBAAuB,CAAC,CAAC;AAC5C;;AAEA;;AAGA;AACA,eAAerB,SAAS","ignoreList":[]}
@@ -0,0 +1 @@
1
+ {"type":"module"}
@@ -0,0 +1 @@
1
+ {"type":"module"}
@@ -0,0 +1,93 @@
1
+ import { type TurboModule } from 'react-native';
2
+ export type UsbDevice = {
3
+ deviceName: string;
4
+ vendorId: number;
5
+ productId: number;
6
+ manufacturer?: string | null;
7
+ productName?: string | null;
8
+ serialNumber?: string | null;
9
+ };
10
+ export type SoilData = {
11
+ [key: string]: number;
12
+ };
13
+ export type RawReadConfig = {
14
+ bufferSize?: number;
15
+ timeout?: number;
16
+ };
17
+ export type SoilSensorConfig = {
18
+ slaveId?: number;
19
+ startAddress?: number;
20
+ registerCount?: number;
21
+ responseDelayMs?: number;
22
+ };
23
+ export interface Spec extends TurboModule {
24
+ /**
25
+ * Multiply two numbers
26
+ */
27
+ multiply(a: number, b: number): number;
28
+ /**
29
+ * Returns all connected USB devices
30
+ */
31
+ getDeviceList(): UsbDevice[];
32
+ /**
33
+ * Check if app has permission for a specific device
34
+ */
35
+ hasPermission(device: UsbDevice): Promise<boolean>;
36
+ /**
37
+ * Request USB permission for a specific device
38
+ */
39
+ requestUsbPermission(device: UsbDevice): Promise<boolean>;
40
+ /**
41
+ * Connect to a specific USB device with optional baud rate
42
+ */
43
+ connect(device: UsbDevice, baudRate?: number): Promise<boolean>;
44
+ /**
45
+ * Check if serial connection is active
46
+ */
47
+ isConnected(): Promise<boolean>;
48
+ /**
49
+ * Disconnect the current serial device
50
+ */
51
+ disconnect(): Promise<void>;
52
+ /**
53
+ * Write data to the serial port
54
+ */
55
+ write(data: string): Promise<void>;
56
+ /**
57
+ * Read data from the serial port
58
+ */
59
+ read(bufferSize?: number, timeout?: number): Promise<string>;
60
+ /**
61
+ * Start listening for raw serial data at specified interval
62
+ */
63
+ onReadInterval(intervalMs: number, config?: RawReadConfig): Promise<void>;
64
+ /**
65
+ * Stop listening for raw serial data
66
+ */
67
+ offReadInterval(): Promise<void>;
68
+ /**
69
+ * Get currently connected device
70
+ */
71
+ getConnectedDevice(): Promise<UsbDevice | null>;
72
+ /**
73
+ * Read soil sensor data once
74
+ */
75
+ readSoilData(config?: SoilSensorConfig): Promise<SoilData | null>;
76
+ /**
77
+ * Start listening for soil sensor data at specified interval
78
+ */
79
+ onReadSoilDataInterval(intervalMs: number, config?: SoilSensorConfig): Promise<void>;
80
+ /**
81
+ * Stop listening for soil sensor data
82
+ */
83
+ offReadSoilDataInterval(): Promise<void>;
84
+ }
85
+ export type UsbSerialEvent = {
86
+ data: string;
87
+ };
88
+ export type UsbSoilEvent = {
89
+ [key: string]: number;
90
+ };
91
+ declare const _default: Spec;
92
+ export default _default;
93
+ //# sourceMappingURL=NativeUsbSerial.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NativeUsbSerial.d.ts","sourceRoot":"","sources":["../../../src/NativeUsbSerial.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,WAAW,EAAY,MAAM,cAAc,CAAC;AAE/E,MAAM,MAAM,SAAS,GAAG;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG;IACrB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,MAAM,WAAW,IAAK,SAAQ,WAAW;IACvC;;OAEG;IACH,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAEvC;;OAEG;IACH,aAAa,IAAI,SAAS,EAAE,CAAC;IAE7B;;OAEG;IACH,aAAa,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEnD;;OAEG;IACH,oBAAoB,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAE1D;;OAEG;IACH,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEhE;;OAEG;IACH,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAEhC;;OAEG;IACH,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5B;;OAEG;IACH,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnC;;OAEG;IACH,IAAI,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAE7D;;OAEG;IACH,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1E;;OAEG;IACH,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjC;;OAEG;IACH,kBAAkB,IAAI,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;IAEhD;;OAEG;IACH,YAAY,CAAC,MAAM,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;IAElE;;OAEG;IACH,sBAAsB,CACpB,UAAU,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,gBAAgB,GACxB,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjB;;OAEG;IACH,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1C;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CACvB,CAAC;;AAMF,wBAA2B"}
@@ -0,0 +1,60 @@
1
+ import UsbSerial, { type UsbDevice, type SoilData, type RawReadConfig, type SoilSensorConfig } from './NativeUsbSerial';
2
+ /**
3
+ * Get list of all connected USB devices
4
+ */
5
+ export declare function getDeviceList(): UsbDevice[];
6
+ /**
7
+ * Check if app has permission for a device
8
+ */
9
+ export declare function hasPermission(device: UsbDevice): Promise<boolean>;
10
+ /**
11
+ * Request USB permission for a device
12
+ */
13
+ export declare function requestUsbPermission(device: UsbDevice): Promise<boolean>;
14
+ /**
15
+ * Connect to a USB device
16
+ */
17
+ export declare function connect(device: UsbDevice, baudRate?: number): Promise<boolean>;
18
+ /**
19
+ * Check if currently connected
20
+ */
21
+ export declare function isConnected(): Promise<boolean>;
22
+ /**
23
+ * Disconnect from device
24
+ */
25
+ export declare function disconnect(): Promise<void>;
26
+ /**
27
+ * Write data to serial port
28
+ */
29
+ export declare function write(data: string): Promise<void>;
30
+ /**
31
+ * Read data from serial port
32
+ */
33
+ export declare function read(bufferSize?: number, timeout?: number): Promise<string>;
34
+ /**
35
+ * Start listening for raw serial data
36
+ */
37
+ export declare function onReadInterval(intervalMs: number, config?: RawReadConfig): Promise<void>;
38
+ /**
39
+ * Stop listening for raw serial data
40
+ */
41
+ export declare function offReadInterval(): Promise<void>;
42
+ /**
43
+ * Get currently connected device
44
+ */
45
+ export declare function getConnectedDevice(): Promise<UsbDevice | null>;
46
+ /**
47
+ * Read soil sensor data once
48
+ */
49
+ export declare function readSoilData(config?: SoilSensorConfig): Promise<SoilData | null>;
50
+ /**
51
+ * Start listening for soil sensor data
52
+ */
53
+ export declare function onReadSoilDataInterval(intervalMs: number, config?: SoilSensorConfig): Promise<void>;
54
+ /**
55
+ * Stop listening for soil sensor data
56
+ */
57
+ export declare function offReadSoilDataInterval(): Promise<void>;
58
+ export type { UsbDevice, SoilData, RawReadConfig, SoilSensorConfig };
59
+ export default UsbSerial;
60
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,SAAS,EAAE,EAChB,KAAK,SAAS,EACd,KAAK,QAAQ,EACb,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACtB,MAAM,mBAAmB,CAAC;AAE3B;;GAEG;AACH,wBAAgB,aAAa,IAAI,SAAS,EAAE,CAE3C;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,CAEjE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,CAExE;AAED;;GAEG;AACH,wBAAgB,OAAO,CACrB,MAAM,EAAE,SAAS,EACjB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,OAAO,CAAC,CAElB;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAE9C;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAE1C;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEjD;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAE3E;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,UAAU,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC,IAAI,CAAC,CAEf;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAE/C;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAE9D;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,MAAM,CAAC,EAAE,gBAAgB,GACxB,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAE1B;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,gBAAgB,GACxB,OAAO,CAAC,IAAI,CAAC,CAEf;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC,CAEvD;AAGD,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,gBAAgB,EAAE,CAAC;AAGrE,eAAe,SAAS,CAAC"}