-
Notifications
You must be signed in to change notification settings - Fork 3
/
interface.ts
128 lines (117 loc) · 4.03 KB
/
interface.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
import {EmitterSubscription} from 'react-native';
import BleManager, {Peripheral} from 'react-native-ble-manager';
import {Permission} from 'react-native-permissions';
import {
DisconnectedPeripheralHandler,
HandleDidUpdateValueForCharacteristic,
} from './libs';
import {
InspectorFn,
ToBetterOptions,
ToBetterOptionsWithMustTimeout,
} from './utils';
import {MethodParamsRecord} from './utils/typeUtils/MethodParamsRecord';
export type BlueveryOptions = {
/**
* @see https://github.com/visionmedia/debug#environment-variables
*/
__DEBUG?: string;
onDisconnectPeripheralHandler?: DisconnectedPeripheralHandler;
onChangeStateHandler?: (state: State) => unknown;
initialState?: State;
};
export type PeripheralId = string;
export type PeripheralInfo = Peripheral & {
connect?: 'connecting' | 'connected' | 'disconnected' | 'failed';
bonded?: 'unknown' | boolean;
communicate?: 'nonCommunicate' | 'reading' | 'writing';
receivingForCharacteristicValue?: boolean;
retrieveServices?: 'retrieving' | 'retrieved' | 'failed';
};
export type Store = {
bluevery: State;
};
export type State = {
bluetoothEnabled: boolean;
permissionGranted: {
is: 'granted' | 'ungranted' | 'unknown';
lack: Permission[];
};
managing: boolean;
scanning: boolean;
scannedPeripherals: {[key in PeripheralId]?: Peripheral};
managingPeripherals: {[key in PeripheralId]?: PeripheralInfo};
error: Error | undefined;
};
export type PublicSubscriptions = {
receivingForCharacteristicValueListener?: EmitterSubscription;
};
export type PublicListeners = {
[key in PeripheralId]?: PublicSubscriptions;
};
export type InternalListeners = {
discoverPeripheralListener?: EmitterSubscription;
disconnectPeripheralListener?: EmitterSubscription;
};
export interface PublicHandlers {
HandleDidUpdateValueForCharacteristic: HandleDidUpdateValueForCharacteristic;
}
export type BlueveryEvents = 'didChangeBlueveryState';
/**
* BleManager interface
*/
export type TBleManager = typeof BleManager;
export type BleManagerParams = MethodParamsRecord<TBleManager>;
/**
* BlueveryCore each method options map
* @description It must be an Option type used by the core. It should not be an Option type provided to the user.
*/
export interface BlueveryCoreMethodOptions {
scan: {
/**
* @description
* Important: The seconds setting is a second, not a millisecond!
*/
scanningSettings: BleManagerParams['scan'];
/**
* @description Important: this is millisecond. interval that scan between scan. default is `0` = no interval.
*/
intervalLength: number;
/**
* @description count of interval iteration. default is `1` = only once scan.
*/
iterations: number;
};
// Note: connectはiOSで失敗してもタイムアウトしないので、タイムアウトするようにする
connect: ToBetterOptionsWithMustTimeout & {
omoiyariTime: number;
};
disconnect: ToBetterOptions & {};
// Note: retrieveServicesがpendingのままになるときがあるので、タイムアウトするようにする
retrieveServices: ToBetterOptionsWithMustTimeout & {
omoiyariTime: number;
};
read: ToBetterOptions & {
advanceRetryCondition?: InspectorFn<typeof BleManager.read>;
};
write: ToBetterOptions;
// Note: 無限にbondingして返ってこないケースがあるので、タイムアウトするようにする
createBond: ToBetterOptionsWithMustTimeout & {
omoiyariTime: number;
};
startNotification: {};
stopNotification: {};
}
/**
* Bluevery each method options map
* @description each method options for the user-land
*/
export interface BlueveryMethodOptions {
scan: Partial<BlueveryCoreMethodOptions['scan']>;
connect: Partial<BlueveryCoreMethodOptions['connect']>;
disconnect: Partial<BlueveryCoreMethodOptions['disconnect']>;
retrieveServices: Partial<BlueveryCoreMethodOptions['retrieveServices']>;
createBond: Partial<BlueveryCoreMethodOptions['createBond']>;
read: Partial<BlueveryCoreMethodOptions['read']>;
write: Partial<BlueveryCoreMethodOptions['write']>;
}