0
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 设备中的平均压力、日期、持续时间等。如何得到我们想要的结果

4

0 回答 0