import React, {Component} from 'react';
import {
Animated,
Dimensions,
Image,
StyleSheet,
Text,
FlatList,
TouchableOpacity,
PermissionsAndroid,
TouchableHighlight,
View,
Pressable,
} from 'react-native';
import base64 from 'react-native-base64';
import {Container, Header, Content, Footer} from 'native-base';
import BLE from './BLE';
import {connect} from 'react-redux';
import {BleManager} from 'react-native-ble-plx';
import {
changeStatus,
connectedDevice,
connectedDeviceServices,
addBLE,
} from './actions/index.js';
// import {connectDevice,startScan} from './actions';
import DataActivityIndicator from './DataActivityIndicator';
import {ToastAndroid} from 'react-native';
const DeviceManager = new BleManager();
const requestLocationPermission = async () => {
try {
const granted = await PermissionsAndroid.request(
PermissionsAndroid.PERMISSIONS.ACCESS_COARSE_LOCATION,
{
title: 'Location permission for bluetooth scanning',
message: 'wahtever',
buttonNeutral: 'Ask Me Later',
buttonNegative: 'Cancel',
buttonPositive: 'OK',
},
);
if (granted === PermissionsAndroid.RESULTS.GRANTED) {
console.log('Location permission for bluetooth scanning granted');
return true;
} else {
console.log('Location permission for bluetooth scanning revoked');
return false;
}
} catch (err) {
console.warn(err);
return false;
}
};
class BLEList extends Component {
constructor(props) {
super(props);
}
componentDidMount() {
const subscription = DeviceManager.onStateChange(state => {
if (state === 'PoweredOn') {
console.log('powered on');
this.getPermission();
subscription.remove();
}
}, true);
}
getPermission = async () => {
const permission = await requestLocationPermission();
if (permission) {
DeviceManager.startDeviceScan(null, null, (error, device) => {
this.props.dispatch(changeStatus('Scanning'));
if (error) {
console.log(error);
}
if (device) {
this.props.dispatch(addBLE(device));
}
});
} else {
console.log('Error permission');
}
};
discoverAllServices = async d => {
await DeviceManager.discoverAllServicesAndCharacteristicsForDevice(
d.id,
null,
).then(response => {
console.log(response, 'discoverAllServicesAndCharacteristicsForDevice');
});
};
discoveringCharastics = async d => {
console.log(d, 'd', d.id, d.serviceUUIDs[0]);
let allCharacteristicsData = await DeviceManager.characteristicsForDevice(
d.id,
d.serviceUUIDs[0],
);
console.log('**********allCharacteristicticsData*************');
console.log(allCharacteristicsData, 'allCharacteristicsData');
console.log(
'****************._manager._eventEmitter data**********************',
);
console.log(allCharacteristicsData[0]._manager._eventEmittr);
console.log( '**************allCharacteristicsData[0]._manager._eventEmitter.toggleElementInspector******************',);
console.log(
allCharacteristicsData[0]._manager._eventEmitter.toggleElementInspector,
);
console.log(
'****************._manager._eventEmitter._subscriber data**********************',
);
console.log(allCharacteristicsData[0]._manager._eventEmitter._subscriber);
console.log(
'***************allCharacteristicsData[0]._manager._eventEmitter._subscriber._subscriptionsForType data*****************',
);
console.log(
allCharacteristicsData[0]._manager._eventEmitter._subscriber
._subscriptionsForType,
);
console.log(
'***********allCharacteristicsData[0]._manager._eventEmitter._subscriber._subscriptionsForType.appStateDidChange,*****',
);
console.log(
allCharacteristicsData[0]._manager._eventEmitter._subscriber
._subscriptionsForType.appStateDidChange,
);
console.log(
'*********allCharacteristicsData[0]._manager._eventEmitter._subscriber._subscriptionsForType.appStateDidChange[0].emitter._subscriber***********',
);
console.log(
allCharacteristicsData[0]._manager._eventEmitter._subscriber
._subscriptionsForType.appStateDidChange[0].emitter._subscriber,
);
console.log(
'***********allCharacteristicsData[0]._manager._eventEmitter._subscriber._subscriptionsForType.appStateDidChange[0].emitter._supportedEvents****************',
);
console.log(
allCharacteristicsData[0]._manager._eventEmitter._subscriber
._subscriptionsForType.appStateDidChange[0].emitter._supportedEvents,
);
console.log(
'*********allCharacteristicsData[0]._manager._eventEmitter._subscriber._subscriptionsForType.collectBugExtraData ******',
);
console.log(
allCharacteristicsData[0]._manager._eventEmitter._subscriber
._subscriptionsForType.collectBugExtraData,
);
console.log(
'*****allCharacteristicsData[0]._manager._eventEmitter._subscriber._subscriptionsForType.hardwareBackPress*******',
);
console.log(
allCharacteristicsData[0]._manager._eventEmitter._subscriber
._subscriptionsForType,
);
console.log(
'*****allCharacteristicsData[0]._manager._eventEmitter._subscriber._subscriptionsForType.didUpdateDimensions*******',
);
console.log(
allCharacteristicsData[0]._manager._eventEmitter._subscriber
._subscriptionsForType.didUpdateDimensions,
);
console.log(
'*****allCharacteristicsData[0]._manager._eventEmitter._subscriber._subscriptionsForType.keyboardDidHide*******',
);
console.log(
allCharacteristicsData[0]._manager._eventEmitter._subscriber
._subscriptionsForType.keyboardDidHide,
);
console.log(
'*****allCharacteristicsData[0]._manager._eventEmitter._subscriber._subscriptionsForType.keyboardWillHide*******',
);
console.log(
allCharacteristicsData[0]._manager._eventEmitter._subscriber
._subscriptionsForType.keyboardWillHide,
);
const data = await DeviceManager.readCharacteristicForDevice(
d.id,
d.serviceUUIDs[0],
null,
null,
);
console.log(data, 'data').then(response => {
console.log(response, 'response');
});
discoverAllServices();
};
handleClick = async device => {
// console.log(device,"device")
this.props.dispatch(changeStatus('Connecting'));
DeviceManager.stopDeviceScan();
await DeviceManager.connectToDevice(device.id, null)
.then(async device => {
this.props.dispatch(changeStatus('Discovering'));
let allCharacteristics = device.discoverAllServicesAndCharacteristics();
this.props.dispatch(connectedDevice(device));
let checkDeviceIConnected = await DeviceManager.isDeviceConnected(
device.id,
);
console.log(
checkDeviceIConnected,
'status if device connected it returns true',
);
if (checkDeviceIConnected === true) {
this.props.dispatch(changeStatus('Connected'));
} else {
this.props.dispatch(changeStatus('Disconnected'));
}
return allCharacteristics;
})
.then(device => {
let services = device.services(device.id);
return services;
})
.then(
services => {
console.log('*******services*************');
console.log('found services: ', services);
console.log('*********services._manager._eventEmitter************');
console.log(services[0]._manager._eventEmitter);
console.log(
'*********services._manager._eventEmitter._subscriber************',
);
console.log(services[0]._manager._eventEmitter._subscriber);
console.log(
'*********services._manager._eventEmitter._subscriber._subscriptionsForType************',
);
console.log(
services[0]._manager._eventEmitter._subscriber
._subscriptionsForType,
);
console.log(
'*********services._manager._eventEmitter._subscriber._subscriptionsForType.appStateDidChange[0].emitter************',
);
console.log(
services[0]._manager._eventEmitter._subscriber._subscriptionsForType
.appStateDidChange[0].emitter,
);
console.log(
'*********services._manager._eventEmitter._subscriber._subscriptionsForType.appStateDidChange[0].emitter.collectBugExtraData************',
);
console.log(
services[0]._manager._eventEmitter._subscriber._subscriptionsForType
.appStateDidChange[0].emitter.collectBugExtraData,
);
console.log(
'*********services._manager._eventEmitter._subscriber._subscriptionsForType.appStateDidChange[0].emitter.hardwareBackPress************',
);
console.log(
services[0]._manager._eventEmitter._subscriber._subscriptionsForType
.appStateDidChange[0].emitter.hardwareBackPress,
);
console.log(
'*********services._manager._eventEmitter._subscriber._subscriptionsForType.appStateDidChange[0].emitter.keyboardWillShow************',
);
console.log(
services[0]._manager._eventEmitter._subscriber._subscriptionsForType
.appStateDidChange[0].emitter.keyboardWillShow,
);
console.log(
'*********services._manager._eventEmitter._subscriber._subscriptionsForType.appStateDidChange[0].emitter._supportedEvents************',
);
console.log(
services[0]._manager._eventEmitter._subscriber._subscriptionsForType
.appStateDidChange[0].emitter._supportedEvents.websocketOpen,
);
console.log(
'*********services._manager._eventEmitter._subscriber._subscriptionsForType.appStateDidChange[0].emitter.websocketOpen************',
);
console.log(
services[0]._manager._eventEmitter._subscriber._subscriptionsForType
.appStateDidChange[0].emitter.websocketOpen,
);
this.props.dispatch(connectedDeviceServices(services));
this.discoveringCharastics(device);
},
error => {
console.log(this._logError('SCAN', error));
},
);
const descriptor = await DeviceManager.descriptorsForDevice(
'00:1F:FF:49:C8:6D',
'4553867f-f809-49f4-aefc-e190a1f459f3',
'22a4e311-a097-4517-9b81-cf32af60b982',
);
console.log('^^^^^^^^^^^^^^descriptor^^^^^^^^^^^^^^^');
console.log(descriptor);
console.log(
'^^^^^^^^^^^^^^descriptor[0]._manager._activePromises^^^^^^^^^^^^^^^',
);
console.log(descriptor[0]._manager._activePromises[0]);
console.log(
'^^^^^^^^^^^^^^descriptor[0]._manager._eventEmitter^^^^^^^^^^^^^^^',
);
console.log(descriptor[0]._manager._eventEmitter);
// this.props.navigation.navigate('BLEServices');
};
connectableString = item => {
if (item.isConnectable) {
if (item.name.toString().includes('PR BT')) {
}
return 'Tap to connect to: ' + item.name;
} else {
return item.name + item.name.toString().includes('PR BT')
? base64.decode(base64.encode(item.name))
: ' ' + ' is not connectable';
}
};
render() {
return (
<Container>
<Header />
<FlatList
data={this.props.BLEList}
renderItem={({item}) => (
<>
<TouchableHighlight
onPress={() => this.handleClick(item)}
style={item.isConnectable ? styles.rowFront : styles.rowBack}
underlayColor={'#AAA'}>
<View>
<Text>
{/* {item.name} + {item.id} */}
{this.connectableString(item)}
</Text>
</View>
</TouchableHighlight>
</>
)}
keyExtractor={item => item.id.toString()}
ListEmptyComponent={DataActivityIndicator}
/>
<Footer>
<BLE />
</Footer>
</Container>
);
}
}
const mapStateToProps = state => {
return {
BLEList: state.BLEs['BLEList'],
status: state.BLEs['status'],
};
};
Blockquote 我们正在使用 philips respironics dreamStation 设备并检索服务、描述符和特性数据。检索这些对象的数据时,我们没有得到我们期望的数据,但我们想要获得内部数据,如最小压力、最大压力、 philips respironics dreamstation 设备中的平均压力、日期、持续时间等。如何得到我们想要的结果