package com.shlb.comb.model;
|
|
|
import com.blakequ.bluetooth_manager_lib.device.BeaconType;
|
import com.blakequ.bluetooth_manager_lib.device.BeaconUtils;
|
import com.blakequ.bluetooth_manager_lib.device.BluetoothLeDevice;
|
import com.blakequ.bluetooth_manager_lib.device.ibeacon.IBeaconDevice;
|
import com.blakequ.bluetooth_manager_lib.util.ByteUtils;
|
import com.shlb.comb.util.CsvWriterHelper;
|
import com.shlb.comb.util.TimeFormatter;
|
|
import java.io.File;
|
import java.io.FileWriter;
|
import java.io.IOException;
|
import java.util.ArrayList;
|
import java.util.Collections;
|
import java.util.Comparator;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Locale;
|
import java.util.Map;
|
|
|
public class BluetoothLeDeviceStore {
|
private final Map<String, BluetoothLeDevice> mDeviceMap;
|
|
|
public BluetoothLeDeviceStore() {
|
mDeviceMap = new HashMap<>();
|
}
|
|
public void addDevice(final BluetoothLeDevice device) {
|
//if (mDeviceMap.containsKey(device.getAddress())) {
|
// mDeviceMap.get(device.getAddress()).updateRssiReading(device.getTimestamp(), device.getRssi());
|
//} else {
|
// mDeviceMap.put(device.getAddress(), device);
|
//}
|
mDeviceMap.put(device.getAddress(), device);
|
}
|
|
public void clear() {
|
mDeviceMap.clear();
|
}
|
|
|
public List<BluetoothLeDevice> getDeviceList() {
|
final List<BluetoothLeDevice> methodResult = new ArrayList<>(mDeviceMap.values());
|
if(methodResult==null || methodResult.size()< 1) return methodResult;
|
|
Collections.sort(methodResult, new Comparator<BluetoothLeDevice>() {
|
|
@Override
|
public int compare(final BluetoothLeDevice arg0, final BluetoothLeDevice arg1) {
|
return arg0.getAddress().compareToIgnoreCase(arg1.getAddress());
|
}
|
});
|
|
return methodResult;
|
}
|
|
public int size(){
|
return mDeviceMap.size();
|
}
|
|
private String getListAsCsv() {
|
final List<BluetoothLeDevice> list = getDeviceList();
|
final StringBuilder sb = new StringBuilder();
|
sb.append(CsvWriterHelper.addStuff("mac"));
|
sb.append(CsvWriterHelper.addStuff("name"));
|
sb.append(CsvWriterHelper.addStuff("firstTimestamp"));
|
sb.append(CsvWriterHelper.addStuff("firstRssi"));
|
sb.append(CsvWriterHelper.addStuff("currentTimestamp"));
|
sb.append(CsvWriterHelper.addStuff("currentRssi"));
|
sb.append(CsvWriterHelper.addStuff("adRecord"));
|
sb.append(CsvWriterHelper.addStuff("iBeacon"));
|
sb.append(CsvWriterHelper.addStuff("uuid"));
|
sb.append(CsvWriterHelper.addStuff("major"));
|
sb.append(CsvWriterHelper.addStuff("minor"));
|
sb.append(CsvWriterHelper.addStuff("txPower"));
|
sb.append(CsvWriterHelper.addStuff("distance"));
|
sb.append(CsvWriterHelper.addStuff("accuracy"));
|
sb.append('\n');
|
|
for (final BluetoothLeDevice device : list) {
|
sb.append(CsvWriterHelper.addStuff(device.getAddress()));
|
sb.append(CsvWriterHelper.addStuff(device.getName()));
|
sb.append(CsvWriterHelper.addStuff(TimeFormatter.getIsoDateTime(device.getFirstTimestamp())));
|
sb.append(CsvWriterHelper.addStuff(device.getFirstRssi()));
|
sb.append(CsvWriterHelper.addStuff(TimeFormatter.getIsoDateTime(device.getTimestamp())));
|
sb.append(CsvWriterHelper.addStuff(device.getRssi()));
|
sb.append(CsvWriterHelper.addStuff(ByteUtils.byteArrayToHexString(device.getScanRecord())));
|
final boolean isIBeacon = BeaconUtils.getBeaconType(device) == BeaconType.IBEACON;
|
final String uuid;
|
final String minor;
|
final String major;
|
final String txPower;
|
final String distance;
|
final String accuracy;
|
|
if (isIBeacon) {
|
final IBeaconDevice beacon = new IBeaconDevice(device);
|
uuid = String.valueOf(beacon.getUUID());
|
minor = String.valueOf(beacon.getMinor());
|
major = String.valueOf(beacon.getMajor());
|
txPower = String.valueOf(beacon.getCalibratedTxPower());
|
distance = beacon.getDistanceDescriptor().toString().toLowerCase(Locale.US);
|
accuracy = String.valueOf(beacon.getAccuracy());
|
} else {
|
uuid = "";
|
minor = "";
|
major = "";
|
txPower = "";
|
distance = "";
|
accuracy = "";
|
}
|
|
sb.append(CsvWriterHelper.addStuff(isIBeacon));
|
sb.append(CsvWriterHelper.addStuff(uuid));
|
sb.append(CsvWriterHelper.addStuff(minor));
|
sb.append(CsvWriterHelper.addStuff(major));
|
sb.append(CsvWriterHelper.addStuff(txPower));
|
sb.append(CsvWriterHelper.addStuff(distance));
|
sb.append(CsvWriterHelper.addStuff(accuracy));
|
|
sb.append('\n');
|
}
|
|
return sb.toString();
|
}
|
|
|
private static FileWriter generateFile(final File file, final String contents) {
|
FileWriter writer = null;
|
try {
|
writer = new FileWriter(file);
|
writer.append(contents);
|
writer.flush();
|
|
} catch (final IOException e) {
|
e.printStackTrace();
|
} finally {
|
try {
|
writer.close();
|
} catch (final IOException e) {
|
e.printStackTrace();
|
}
|
}
|
return writer;
|
}
|
}
|