Add error in connection updates (#89)
* Add error in connection updates * implement windows * Update changelog and Docs * minor fix in connect() * Add default timeout in connect * Document new pair and connect API * Fix Connect and Pair apis to throw proper errors and Improve logging * remove import * Rename PairingException and update Exception doc * Update changelog * Update comments --------- Co-authored-by: Foti Dim <fdimanidis@gmail.com>
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
// Autogenerated from Pigeon (v21.1.0), do not edit directly.
|
||||
// Autogenerated from Pigeon (v22.4.0), do not edit directly.
|
||||
// See also: https://pub.dev/packages/pigeon
|
||||
|
||||
#undef _HAS_EXCEPTIONS
|
||||
@@ -22,10 +22,10 @@ using flutter::EncodableMap;
|
||||
using flutter::EncodableValue;
|
||||
|
||||
FlutterError CreateConnectionError(const std::string channel_name) {
|
||||
return FlutterError(
|
||||
"channel-error",
|
||||
"Unable to establish connection on channel: '" + channel_name + "'.",
|
||||
EncodableValue(""));
|
||||
return FlutterError(
|
||||
"channel-error",
|
||||
"Unable to establish connection on channel: '" + channel_name + "'.",
|
||||
EncodableValue(""));
|
||||
}
|
||||
|
||||
// UniversalBleScanResult
|
||||
@@ -146,7 +146,7 @@ UniversalBleScanResult UniversalBleScanResult::FromEncodableList(const Encodable
|
||||
}
|
||||
auto& encodable_rssi = list[3];
|
||||
if (!encodable_rssi.IsNull()) {
|
||||
decoded.set_rssi(encodable_rssi.LongValue());
|
||||
decoded.set_rssi(std::get<int64_t>(encodable_rssi));
|
||||
}
|
||||
auto& encodable_manufacturer_data_list = list[4];
|
||||
if (!encodable_manufacturer_data_list.IsNull()) {
|
||||
@@ -364,7 +364,7 @@ EncodableList UniversalManufacturerDataFilter::ToEncodableList() const {
|
||||
|
||||
UniversalManufacturerDataFilter UniversalManufacturerDataFilter::FromEncodableList(const EncodableList& list) {
|
||||
UniversalManufacturerDataFilter decoded(
|
||||
list[0].LongValue());
|
||||
std::get<int64_t>(list[0]));
|
||||
auto& encodable_data = list[1];
|
||||
if (!encodable_data.IsNull()) {
|
||||
decoded.set_data(std::get<std::vector<uint8_t>>(encodable_data));
|
||||
@@ -412,36 +412,42 @@ EncodableList UniversalManufacturerData::ToEncodableList() const {
|
||||
|
||||
UniversalManufacturerData UniversalManufacturerData::FromEncodableList(const EncodableList& list) {
|
||||
UniversalManufacturerData decoded(
|
||||
list[0].LongValue(),
|
||||
std::get<int64_t>(list[0]),
|
||||
std::get<std::vector<uint8_t>>(list[1]));
|
||||
return decoded;
|
||||
}
|
||||
|
||||
|
||||
PigeonCodecSerializer::PigeonCodecSerializer() {}
|
||||
PigeonInternalCodecSerializer::PigeonInternalCodecSerializer() {}
|
||||
|
||||
EncodableValue PigeonCodecSerializer::ReadValueOfType(
|
||||
EncodableValue PigeonInternalCodecSerializer::ReadValueOfType(
|
||||
uint8_t type,
|
||||
flutter::ByteStreamReader* stream) const {
|
||||
switch (type) {
|
||||
case 129:
|
||||
return CustomEncodableValue(UniversalBleScanResult::FromEncodableList(std::get<EncodableList>(ReadValue(stream))));
|
||||
case 130:
|
||||
return CustomEncodableValue(UniversalBleService::FromEncodableList(std::get<EncodableList>(ReadValue(stream))));
|
||||
case 131:
|
||||
return CustomEncodableValue(UniversalBleCharacteristic::FromEncodableList(std::get<EncodableList>(ReadValue(stream))));
|
||||
case 132:
|
||||
return CustomEncodableValue(UniversalScanFilter::FromEncodableList(std::get<EncodableList>(ReadValue(stream))));
|
||||
case 133:
|
||||
return CustomEncodableValue(UniversalManufacturerDataFilter::FromEncodableList(std::get<EncodableList>(ReadValue(stream))));
|
||||
case 134:
|
||||
return CustomEncodableValue(UniversalManufacturerData::FromEncodableList(std::get<EncodableList>(ReadValue(stream))));
|
||||
case 129: {
|
||||
return CustomEncodableValue(UniversalBleScanResult::FromEncodableList(std::get<EncodableList>(ReadValue(stream))));
|
||||
}
|
||||
case 130: {
|
||||
return CustomEncodableValue(UniversalBleService::FromEncodableList(std::get<EncodableList>(ReadValue(stream))));
|
||||
}
|
||||
case 131: {
|
||||
return CustomEncodableValue(UniversalBleCharacteristic::FromEncodableList(std::get<EncodableList>(ReadValue(stream))));
|
||||
}
|
||||
case 132: {
|
||||
return CustomEncodableValue(UniversalScanFilter::FromEncodableList(std::get<EncodableList>(ReadValue(stream))));
|
||||
}
|
||||
case 133: {
|
||||
return CustomEncodableValue(UniversalManufacturerDataFilter::FromEncodableList(std::get<EncodableList>(ReadValue(stream))));
|
||||
}
|
||||
case 134: {
|
||||
return CustomEncodableValue(UniversalManufacturerData::FromEncodableList(std::get<EncodableList>(ReadValue(stream))));
|
||||
}
|
||||
default:
|
||||
return flutter::StandardCodecSerializer::ReadValueOfType(type, stream);
|
||||
}
|
||||
}
|
||||
|
||||
void PigeonCodecSerializer::WriteValue(
|
||||
void PigeonInternalCodecSerializer::WriteValue(
|
||||
const EncodableValue& value,
|
||||
flutter::ByteStreamWriter* stream) const {
|
||||
if (const CustomEncodableValue* custom_value = std::get_if<CustomEncodableValue>(&value)) {
|
||||
@@ -481,7 +487,7 @@ void PigeonCodecSerializer::WriteValue(
|
||||
|
||||
/// The codec used by UniversalBlePlatformChannel.
|
||||
const flutter::StandardMessageCodec& UniversalBlePlatformChannel::GetCodec() {
|
||||
return flutter::StandardMessageCodec::GetInstance(&PigeonCodecSerializer::GetInstance());
|
||||
return flutter::StandardMessageCodec::GetInstance(&PigeonInternalCodecSerializer::GetInstance());
|
||||
}
|
||||
|
||||
// Sets up an instance of `UniversalBlePlatformChannel` to handle messages through the `binary_messenger`.
|
||||
@@ -1019,7 +1025,7 @@ UniversalBleCallbackChannel::UniversalBleCallbackChannel(
|
||||
message_channel_suffix_(message_channel_suffix.length() > 0 ? std::string(".") + message_channel_suffix : "") {}
|
||||
|
||||
const flutter::StandardMessageCodec& UniversalBleCallbackChannel::GetCodec() {
|
||||
return flutter::StandardMessageCodec::GetInstance(&PigeonCodecSerializer::GetInstance());
|
||||
return flutter::StandardMessageCodec::GetInstance(&PigeonInternalCodecSerializer::GetInstance());
|
||||
}
|
||||
|
||||
void UniversalBleCallbackChannel::OnAvailabilityChanged(
|
||||
@@ -1133,6 +1139,7 @@ void UniversalBleCallbackChannel::OnValueChanged(
|
||||
void UniversalBleCallbackChannel::OnConnectionChanged(
|
||||
const std::string& device_id_arg,
|
||||
bool connected_arg,
|
||||
const std::string* error_arg,
|
||||
std::function<void(void)>&& on_success,
|
||||
std::function<void(const FlutterError&)>&& on_error) {
|
||||
const std::string channel_name = "dev.flutter.pigeon.universal_ble.UniversalBleCallbackChannel.onConnectionChanged" + message_channel_suffix_;
|
||||
@@ -1140,6 +1147,7 @@ void UniversalBleCallbackChannel::OnConnectionChanged(
|
||||
EncodableValue encoded_api_arguments = EncodableValue(EncodableList{
|
||||
EncodableValue(device_id_arg),
|
||||
EncodableValue(connected_arg),
|
||||
error_arg ? EncodableValue(*error_arg) : EncodableValue(),
|
||||
});
|
||||
channel.Send(encoded_api_arguments, [channel_name, on_success = std::move(on_success), on_error = std::move(on_error)](const uint8_t* reply, size_t reply_size) {
|
||||
std::unique_ptr<EncodableValue> response = GetCodec().DecodeMessage(reply, reply_size);
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Autogenerated from Pigeon (v21.1.0), do not edit directly.
|
||||
// Autogenerated from Pigeon (v22.4.0), do not edit directly.
|
||||
// See also: https://pub.dev/packages/pigeon
|
||||
|
||||
#ifndef PIGEON_UNIVERSAL_BLE_G_H_
|
||||
@@ -57,6 +57,7 @@ template<class T> class ErrorOr {
|
||||
};
|
||||
|
||||
|
||||
|
||||
// Generated class from Pigeon that represents data sent in messages.
|
||||
class UniversalBleScanResult {
|
||||
public:
|
||||
@@ -101,7 +102,7 @@ class UniversalBleScanResult {
|
||||
flutter::EncodableList ToEncodableList() const;
|
||||
friend class UniversalBlePlatformChannel;
|
||||
friend class UniversalBleCallbackChannel;
|
||||
friend class PigeonCodecSerializer;
|
||||
friend class PigeonInternalCodecSerializer;
|
||||
std::string device_id_;
|
||||
std::optional<std::string> name_;
|
||||
std::optional<bool> is_paired_;
|
||||
@@ -136,7 +137,7 @@ class UniversalBleService {
|
||||
flutter::EncodableList ToEncodableList() const;
|
||||
friend class UniversalBlePlatformChannel;
|
||||
friend class UniversalBleCallbackChannel;
|
||||
friend class PigeonCodecSerializer;
|
||||
friend class PigeonInternalCodecSerializer;
|
||||
std::string uuid_;
|
||||
std::optional<flutter::EncodableList> characteristics_;
|
||||
|
||||
@@ -163,7 +164,7 @@ class UniversalBleCharacteristic {
|
||||
flutter::EncodableList ToEncodableList() const;
|
||||
friend class UniversalBlePlatformChannel;
|
||||
friend class UniversalBleCallbackChannel;
|
||||
friend class PigeonCodecSerializer;
|
||||
friend class PigeonInternalCodecSerializer;
|
||||
std::string uuid_;
|
||||
flutter::EncodableList properties_;
|
||||
|
||||
@@ -196,7 +197,7 @@ class UniversalScanFilter {
|
||||
flutter::EncodableList ToEncodableList() const;
|
||||
friend class UniversalBlePlatformChannel;
|
||||
friend class UniversalBleCallbackChannel;
|
||||
friend class PigeonCodecSerializer;
|
||||
friend class PigeonInternalCodecSerializer;
|
||||
flutter::EncodableList with_services_;
|
||||
flutter::EncodableList with_name_prefix_;
|
||||
flutter::EncodableList with_manufacturer_data_;
|
||||
@@ -233,7 +234,7 @@ class UniversalManufacturerDataFilter {
|
||||
flutter::EncodableList ToEncodableList() const;
|
||||
friend class UniversalBlePlatformChannel;
|
||||
friend class UniversalBleCallbackChannel;
|
||||
friend class PigeonCodecSerializer;
|
||||
friend class PigeonInternalCodecSerializer;
|
||||
int64_t company_identifier_;
|
||||
std::optional<std::vector<uint8_t>> data_;
|
||||
std::optional<std::vector<uint8_t>> mask_;
|
||||
@@ -261,17 +262,18 @@ class UniversalManufacturerData {
|
||||
flutter::EncodableList ToEncodableList() const;
|
||||
friend class UniversalBlePlatformChannel;
|
||||
friend class UniversalBleCallbackChannel;
|
||||
friend class PigeonCodecSerializer;
|
||||
friend class PigeonInternalCodecSerializer;
|
||||
int64_t company_identifier_;
|
||||
std::vector<uint8_t> data_;
|
||||
|
||||
};
|
||||
|
||||
class PigeonCodecSerializer : public flutter::StandardCodecSerializer {
|
||||
|
||||
class PigeonInternalCodecSerializer : public flutter::StandardCodecSerializer {
|
||||
public:
|
||||
PigeonCodecSerializer();
|
||||
inline static PigeonCodecSerializer& GetInstance() {
|
||||
static PigeonCodecSerializer sInstance;
|
||||
PigeonInternalCodecSerializer();
|
||||
inline static PigeonInternalCodecSerializer& GetInstance() {
|
||||
static PigeonInternalCodecSerializer sInstance;
|
||||
return sInstance;
|
||||
}
|
||||
|
||||
@@ -387,6 +389,7 @@ class UniversalBleCallbackChannel {
|
||||
void OnConnectionChanged(
|
||||
const std::string& device_id,
|
||||
bool connected,
|
||||
const std::string* error,
|
||||
std::function<void(void)>&& on_success,
|
||||
std::function<void(const FlutterError&)>&& on_error);
|
||||
|
||||
|
||||
@@ -190,7 +190,7 @@ namespace universal_ble
|
||||
CleanConnection(deviceAddress);
|
||||
// TODO: send disconnect event only after disconnect is complete
|
||||
uiThreadHandler_.Post([deviceAddress]
|
||||
{ callbackChannel->OnConnectionChanged(_mac_address_to_str(deviceAddress), false, SuccessCallback, ErrorCallback); });
|
||||
{ callbackChannel->OnConnectionChanged(_mac_address_to_str(deviceAddress), false, nullptr, SuccessCallback, ErrorCallback); });
|
||||
|
||||
return std::nullopt;
|
||||
};
|
||||
@@ -925,7 +925,7 @@ namespace universal_ble
|
||||
{
|
||||
std::cout << "ConnectionLog: ConnectionFailed: Failed to get device" << std::endl;
|
||||
uiThreadHandler_.Post([bluetoothAddress]
|
||||
{ callbackChannel->OnConnectionChanged(_mac_address_to_str(bluetoothAddress), false, SuccessCallback, ErrorCallback); });
|
||||
{ callbackChannel->OnConnectionChanged(_mac_address_to_str(bluetoothAddress), false, new std::string("Failed to get device"), SuccessCallback, ErrorCallback); });
|
||||
|
||||
co_return;
|
||||
}
|
||||
@@ -933,9 +933,10 @@ namespace universal_ble
|
||||
auto status = servicesResult.Status();
|
||||
if (status != GattCommunicationStatus::Success)
|
||||
{
|
||||
std::cout << "ConnectionFailed: Failed to get services: " << GattCommunicationStatusToString(status) << std::endl;
|
||||
uiThreadHandler_.Post([bluetoothAddress]
|
||||
{ callbackChannel->OnConnectionChanged(_mac_address_to_str(bluetoothAddress), false, SuccessCallback, ErrorCallback); });
|
||||
std::string error = GattCommunicationStatusToString(status);
|
||||
std::cout << "ConnectionFailed: Failed to get services: " << error << std::endl;
|
||||
uiThreadHandler_.Post([bluetoothAddress, error]
|
||||
{ callbackChannel->OnConnectionChanged(_mac_address_to_str(bluetoothAddress), false, &error, SuccessCallback, ErrorCallback); });
|
||||
|
||||
co_return;
|
||||
}
|
||||
@@ -972,7 +973,7 @@ namespace universal_ble
|
||||
connectedDevices.insert(std::move(pair));
|
||||
std::cout << "ConnectionLog: Connected" << std::endl;
|
||||
uiThreadHandler_.Post([bluetoothAddress]
|
||||
{ callbackChannel->OnConnectionChanged(_mac_address_to_str(bluetoothAddress), true, SuccessCallback, ErrorCallback); });
|
||||
{ callbackChannel->OnConnectionChanged(_mac_address_to_str(bluetoothAddress), true, nullptr, SuccessCallback, ErrorCallback); });
|
||||
}
|
||||
|
||||
void UniversalBlePlugin::BluetoothLEDevice_ConnectionStatusChanged(BluetoothLEDevice sender, IInspectable args)
|
||||
@@ -982,7 +983,7 @@ namespace universal_ble
|
||||
CleanConnection(sender.BluetoothAddress());
|
||||
auto bluetoothAddress = sender.BluetoothAddress();
|
||||
uiThreadHandler_.Post([bluetoothAddress]
|
||||
{ callbackChannel->OnConnectionChanged(_mac_address_to_str(bluetoothAddress), false, SuccessCallback, ErrorCallback); });
|
||||
{ callbackChannel->OnConnectionChanged(_mac_address_to_str(bluetoothAddress), false, nullptr, SuccessCallback, ErrorCallback); });
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user