From 57b18b733945482a06e38a70108a6a02cf1bdba8 Mon Sep 17 00:00:00 2001 From: Kiyou Sen <49185386+MrkKSen@users.noreply.github.com> Date: Fri, 20 Aug 2021 16:55:48 +0900 Subject: [PATCH 01/11] Move Editor folder --- Assets/{ => Plugins}/Editor.meta | 0 Assets/{ => Plugins}/Editor/XcodeModuleEnabling.cs | 0 Assets/{ => Plugins}/Editor/XcodeModuleEnabling.cs.meta | 0 Assets/{ => Plugins}/Editor/XcodePlistUpdating.cs | 0 Assets/{ => Plugins}/Editor/XcodePlistUpdating.cs.meta | 0 5 files changed, 0 insertions(+), 0 deletions(-) rename Assets/{ => Plugins}/Editor.meta (100%) rename Assets/{ => Plugins}/Editor/XcodeModuleEnabling.cs (100%) rename Assets/{ => Plugins}/Editor/XcodeModuleEnabling.cs.meta (100%) rename Assets/{ => Plugins}/Editor/XcodePlistUpdating.cs (100%) rename Assets/{ => Plugins}/Editor/XcodePlistUpdating.cs.meta (100%) diff --git a/Assets/Editor.meta b/Assets/Plugins/Editor.meta similarity index 100% rename from Assets/Editor.meta rename to Assets/Plugins/Editor.meta diff --git a/Assets/Editor/XcodeModuleEnabling.cs b/Assets/Plugins/Editor/XcodeModuleEnabling.cs similarity index 100% rename from Assets/Editor/XcodeModuleEnabling.cs rename to Assets/Plugins/Editor/XcodeModuleEnabling.cs diff --git a/Assets/Editor/XcodeModuleEnabling.cs.meta b/Assets/Plugins/Editor/XcodeModuleEnabling.cs.meta similarity index 100% rename from Assets/Editor/XcodeModuleEnabling.cs.meta rename to Assets/Plugins/Editor/XcodeModuleEnabling.cs.meta diff --git a/Assets/Editor/XcodePlistUpdating.cs b/Assets/Plugins/Editor/XcodePlistUpdating.cs similarity index 100% rename from Assets/Editor/XcodePlistUpdating.cs rename to Assets/Plugins/Editor/XcodePlistUpdating.cs diff --git a/Assets/Editor/XcodePlistUpdating.cs.meta b/Assets/Plugins/Editor/XcodePlistUpdating.cs.meta similarity index 100% rename from Assets/Editor/XcodePlistUpdating.cs.meta rename to Assets/Plugins/Editor/XcodePlistUpdating.cs.meta From 6259236a4049b4eac11a4962c4e3870312a5a700 Mon Sep 17 00:00:00 2001 From: Kiyou Sen <49185386+MrkKSen@users.noreply.github.com> Date: Fri, 20 Aug 2021 16:57:21 +0900 Subject: [PATCH 02/11] Add asmdef --- Assets/Plugins/ble-plugin-unity.asmdef | 3 +++ Assets/Plugins/ble-plugin-unity.asmdef.meta | 7 +++++++ 2 files changed, 10 insertions(+) create mode 100644 Assets/Plugins/ble-plugin-unity.asmdef create mode 100644 Assets/Plugins/ble-plugin-unity.asmdef.meta diff --git a/Assets/Plugins/ble-plugin-unity.asmdef b/Assets/Plugins/ble-plugin-unity.asmdef new file mode 100644 index 0000000..d0324d8 --- /dev/null +++ b/Assets/Plugins/ble-plugin-unity.asmdef @@ -0,0 +1,3 @@ +{ + "name": "ble-plugin-unity" +} diff --git a/Assets/Plugins/ble-plugin-unity.asmdef.meta b/Assets/Plugins/ble-plugin-unity.asmdef.meta new file mode 100644 index 0000000..7c41467 --- /dev/null +++ b/Assets/Plugins/ble-plugin-unity.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 67661c459d63ac743adc84bcb7d51f9a +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: From 486b4d385f9b257d2395f8f4209f82a19aa224b1 Mon Sep 17 00:00:00 2001 From: Yusuke Kurokawa Date: Tue, 5 Oct 2021 22:00:03 +0900 Subject: [PATCH 03/11] add windows native Plugin Project --- .gitignore | 6 +- .../Windows/BlePluginWin/BleDeviceManager.cpp | 96 +++++ .../Windows/BlePluginWin/BleDeviceManager.h | 30 ++ .../Windows/BlePluginWin/BleDeviceObject.cpp | 245 ++++++++++++ .../Windows/BlePluginWin/BleDeviceObject.h | 129 +++++++ .../Windows/BlePluginWin/BleDeviceWatcher.cpp | 142 +++++++ .../Windows/BlePluginWin/BleDeviceWatcher.h | 80 ++++ .../Windows/BlePluginWin/BlePluginWin.vcxproj | 143 +++++++ .../BlePluginWin/BlePluginWin.vcxproj.filters | 63 +++ .../Windows/BlePluginWin/UnityInterface.cpp | 364 ++++++++++++++++++ .../Windows/BlePluginWin/UnityInterface.h | 72 ++++ .../Windows/BlePluginWin/Utility.h | 52 +++ .../Windows/BlePluginWin/UuidManager.cpp | 28 ++ .../Windows/BlePluginWin/UuidManager.h | 19 + .../Windows/BlePluginWin/bleTestConsole.cpp | 104 +++++ .../Windows/BlePluginWin/pch.cpp | 3 + bleplugin_projects/Windows/BlePluginWin/pch.h | 52 +++ bleplugin_projects/Windows/ReadMe.txt | 6 + 18 files changed, 1633 insertions(+), 1 deletion(-) create mode 100644 bleplugin_projects/Windows/BlePluginWin/BleDeviceManager.cpp create mode 100644 bleplugin_projects/Windows/BlePluginWin/BleDeviceManager.h create mode 100644 bleplugin_projects/Windows/BlePluginWin/BleDeviceObject.cpp create mode 100644 bleplugin_projects/Windows/BlePluginWin/BleDeviceObject.h create mode 100644 bleplugin_projects/Windows/BlePluginWin/BleDeviceWatcher.cpp create mode 100644 bleplugin_projects/Windows/BlePluginWin/BleDeviceWatcher.h create mode 100644 bleplugin_projects/Windows/BlePluginWin/BlePluginWin.vcxproj create mode 100644 bleplugin_projects/Windows/BlePluginWin/BlePluginWin.vcxproj.filters create mode 100644 bleplugin_projects/Windows/BlePluginWin/UnityInterface.cpp create mode 100644 bleplugin_projects/Windows/BlePluginWin/UnityInterface.h create mode 100644 bleplugin_projects/Windows/BlePluginWin/Utility.h create mode 100644 bleplugin_projects/Windows/BlePluginWin/UuidManager.cpp create mode 100644 bleplugin_projects/Windows/BlePluginWin/UuidManager.h create mode 100644 bleplugin_projects/Windows/BlePluginWin/bleTestConsole.cpp create mode 100644 bleplugin_projects/Windows/BlePluginWin/pch.cpp create mode 100644 bleplugin_projects/Windows/BlePluginWin/pch.h create mode 100644 bleplugin_projects/Windows/ReadMe.txt diff --git a/.gitignore b/.gitignore index 07da593..8f044b4 100644 --- a/.gitignore +++ b/.gitignore @@ -68,4 +68,8 @@ crashlytics-build.properties # Temporary auto-generated Android Assets /[Aa]ssets/[Ss]treamingAssets/aa.meta -/[Aa]ssets/[Ss]treamingAssets/aa/* \ No newline at end of file +/[Aa]ssets/[Ss]treamingAssets/aa/* + +#Windows Plugin builds +bleplugin_projects/x64/* +bleplugin_projects/BlePluginWin/x64/* \ No newline at end of file diff --git a/bleplugin_projects/Windows/BlePluginWin/BleDeviceManager.cpp b/bleplugin_projects/Windows/BlePluginWin/BleDeviceManager.cpp new file mode 100644 index 0000000..a8f3fac --- /dev/null +++ b/bleplugin_projects/Windows/BlePluginWin/BleDeviceManager.cpp @@ -0,0 +1,96 @@ +#include "BleDeviceManager.h" +#include "BleDeviceObject.h" + +using namespace BlePlugin; + + +BleDeviceManager BleDeviceManager::s_instance; +BleDeviceManager& BleDeviceManager::GetInstance() { + return s_instance; +} + +BleDeviceObject* BleDeviceManager::ConnectDevice(uint64_t addr) { + + BleDeviceObject* deviceObj = this->GetDeviceByAddr(addr); + if (deviceObj == nullptr) { + deviceObj = new BleDeviceObject(addr); + m_devices.push_back(deviceObj); + } + deviceObj->ConnectRequest(); + return nullptr; +} +BleDeviceObject* BleDeviceManager::GetDeviceByAddr(uint64_t addr) { + for (auto it = m_devices.begin(); it != m_devices.end(); ++it) { + BleDeviceObject* devicePtr = (*it); + if (devicePtr == nullptr) { + continue; + } + if (devicePtr->GetAddr() == addr) { + return devicePtr; + } + } + return nullptr; +} +void BleDeviceManager::DisconnectDevice(uint64_t addr) { + BleDeviceObject* deviceObj = this->GetDeviceByAddr(addr); + if (deviceObj != nullptr) { + deviceObj->Disconnect(); + } +} + + +void BleDeviceManager::DisconnectAll() { + for (auto it = m_devices.begin(); it != m_devices.end(); ++it) { + BleDeviceObject* deviceObj = *it; + if (deviceObj == nullptr) { + continue; + } + if (deviceObj->IsConnected()) { + deviceObj->Disconnect(); + } + } +} +void BleDeviceManager::ResetAll() { + this->DisconnectAll(); + m_connectDevices.clear(); + m_devices.clear(); +} + + +int BleDeviceManager::GetConnectedDeviceNum()const { + return static_cast( m_connectDevices.size() ); +} + +BleDeviceObject* BleDeviceManager::GetConnectedDeviceByIndex(int idx) { + return m_connectDevices.at(idx); +} + +void BleDeviceManager::Update() { + m_connectDevices.clear(); + for (auto it = m_devices.begin(); it != m_devices.end(); ++it) { + BleDeviceObject* deviceObj = *it; + if (deviceObj == nullptr) { + continue; + } + deviceObj->Update(); + if (deviceObj->IsConnected()) { + m_connectDevices.push_back(deviceObj); + } + } +} + + +winrt::fire_and_forget BleDeviceManager::Characteristic_ValueChanged(WinRtBleCharacteristic const& charastrics, WinRtBleValueChangedEventArgs args) { + winrt::fire_and_forget ret; + uint64_t addr = charastrics.Service().Device().BluetoothAddress(); + BleDeviceObject* obj = BleDeviceManager::GetInstance().GetDeviceByAddr(addr); + if (obj == nullptr) { + return ret; + } + WinRtGuid serviceUuid = charastrics.Service().Uuid(); + WinRtGuid charastricsUuid = charastrics.Uuid(); + uint8_t* data = args.CharacteristicValue().data(); + int length = args.CharacteristicValue().Length(); + obj->OnChangeValue(serviceUuid, charastricsUuid, data, length); + return ret; +} diff --git a/bleplugin_projects/Windows/BlePluginWin/BleDeviceManager.h b/bleplugin_projects/Windows/BlePluginWin/BleDeviceManager.h new file mode 100644 index 0000000..a858f7e --- /dev/null +++ b/bleplugin_projects/Windows/BlePluginWin/BleDeviceManager.h @@ -0,0 +1,30 @@ +#pragma once +#include "pch.h" + + + +namespace BlePlugin { + class BleDeviceObject; + class BleDeviceManager { + static BleDeviceManager s_instance; + std::vector < BleDeviceObject*> m_devices; + std::vector < BleDeviceObject*> m_connectDevices; + + public: + static BleDeviceManager& GetInstance(); + + BleDeviceObject* ConnectDevice(uint64_t addr); + BleDeviceObject* GetDeviceByAddr(uint64_t addr); + void DisconnectDevice(uint64_t addr); + void DisconnectAll(); + void ResetAll(); + + int GetConnectedDeviceNum()const; + BleDeviceObject* GetConnectedDeviceByIndex(int idx); + void Update(); + + static winrt::fire_and_forget Characteristic_ValueChanged(WinRtBleCharacteristic const&, WinRtBleValueChangedEventArgs args); + + + }; +} \ No newline at end of file diff --git a/bleplugin_projects/Windows/BlePluginWin/BleDeviceObject.cpp b/bleplugin_projects/Windows/BlePluginWin/BleDeviceObject.cpp new file mode 100644 index 0000000..c9ae717 --- /dev/null +++ b/bleplugin_projects/Windows/BlePluginWin/BleDeviceObject.cpp @@ -0,0 +1,245 @@ +#include "BleDeviceObject.h" +#include "BleDeviceManager.h" +#include "Utility.h" + + +using namespace BlePlugin; +using namespace winrt::Windows::Foundation; +using namespace winrt::Windows::Devices::Bluetooth; + +BleDeviceObject::BleDeviceObject(uint64_t addr) : +m_addr(addr), m_device(nullptr),m_connectState(EConnectState::None) +{ +} + +bool BleDeviceObject::IsConnected()const { + return (m_connectState == EConnectState::GattServiceComplete); +} + + +void BleDeviceObject::ConnectRequest() { + UpdateDisconectCheck(); + if (m_connectState == EConnectState::None) { + m_connectAsync = BluetoothLEDevice::FromBluetoothAddressAsync(m_addr); + m_connectState = EConnectState::Connecting; + } +} +void BleDeviceObject::Disconnect() { + for (auto it = m_services.begin(); it != m_services.end(); ++it) { + it->Close(); + } + m_device.Close(); + + m_device = WinRtBleDevice(nullptr); + OnDisconnect(); +} + +void BleDeviceObject::Update() { + // DeviceRequest + switch (m_connectState) { + case EConnectState::Connecting: + if (m_connectAsync.Status() == AsyncStatus::Completed) { + m_device = m_connectAsync.get(); + m_connectGattAsync = m_device.GetGattServicesAsync(); + this->m_connectState = EConnectState::GattServiceRequesting; + } + else if (m_connectAsync.Status() == AsyncStatus::Error) { + Disconnect(); + } + break; + case EConnectState::GattServiceRequesting: + if (m_connectGattAsync.Status() == AsyncStatus::Completed) { + auto gattResult = m_connectGattAsync.get(); + this->SetupGattServices(gattResult); + this->m_connectState = EConnectState::GattCharastricsRequesting; + } + else if (m_connectGattAsync.Status() == AsyncStatus::Error) { + Disconnect(); + } + break; + case EConnectState::GattCharastricsRequesting: + UpdateCharacterisc(); + break; + } + this->UpdateDisconectCheck(); + this->UpdateNotification(); +} +void BleDeviceObject::UpdateCharacterisc() { + bool hasError = false; + for (auto it = m_charastricsRequests.begin(); it != m_charastricsRequests.end(); ) { + if (it->Status() == AsyncStatus::Completed) { + auto result = it->get(); + SetupCharacterisc(result); + it = m_charastricsRequests.erase(it); + } + else if (it->Status() == AsyncStatus::Error) { + hasError = true; + } + else { + ++it; + } + } + if (hasError) { + Disconnect(); + return; + } + if (m_charastricsRequests.size() == 0) { + m_connectState = EConnectState::GattServiceComplete; + } +} + +void BleDeviceObject::SetupCharacterisc(const WinRtBleCharacteristicsResult& result) { + auto charastricses = result.Characteristics(); + int size = charastricses.Size(); + if (size == 0) { + return; + } + auto serviceUUid = charastricses.GetAt(0).Service().Uuid(); + + for (int i = 0; i < size; ++i) { + auto ch = charastricses.GetAt(i); + m_charastrictics.push_back(ch); + } +} + + + +void BleDeviceObject::SetupGattServices(const WinRtBleGattServiceResult& result) { + this->m_services.clear(); + auto services = result.Services(); + int size = services.Size(); + for (int i = 0; i < size; ++i) { + m_services.push_back( services.GetAt(i) ); + // Debug code + /* + auto uuid = services.GetAt(i).Uuid(); + std::cout << "ServiceId:"; + Utility::DebugGuid(uuid); + std::cout << std::endl; + */ + } + + this->m_charastricsRequests.clear(); + for (auto it = m_services.begin(); it != m_services.end(); ++it) { + WinRtAsyncOperation request + =it->GetCharacteristicsAsync(); + WinRtGuid guid = it->Uuid(); + + m_charastricsRequests.push_back(request); + } +} + +WinRtBleCharacteristic* BleDeviceObject::GetCharastric(const WinRtGuid& serviceUuid, const WinRtGuid& charastricsUuid) { + for (auto it = m_charastrictics.begin();it != m_charastrictics.end(); ++it) { + auto hoge = it->ReadValueAsync(); + auto val = hoge.get().Value(); + if (it->Uuid() == charastricsUuid && + it->Service().Uuid() == serviceUuid) { + return &*it; + } + } + return nullptr; +} + +WinRtAsyncOperation< WinRtGattWriteResult>* BleDeviceObject::WriteRequest(const WinRtGuid& serviceUuid, const WinRtGuid& charastricsUuid, + const uint8_t* src, int size) { + WinRtBleCharacteristic* charastrics = this->GetCharastric(serviceUuid, charastricsUuid); + if (charastrics == nullptr) { + return nullptr; + } + auto buf = winrt::Windows::Storage::Streams::Buffer(size); + buf.Length(size); + uint8_t* ptr = buf.data(); + for (int i = 0; i < size; ++i) { + *ptr = *src; + ++ptr; + ++src; + } + auto result = charastrics->WriteValueWithResultAsync(buf); + auto it = m_writeRequest.insert(m_writeRequest.begin(), result); + return &(*it); +} + +WinRtAsyncOperation< WinRtGattReadResult>* BleDeviceObject::ReadRequest(const WinRtGuid& serviceUuid, const WinRtGuid& charastricsUuid) { + WinRtBleCharacteristic* charastrics = this->GetCharastric(serviceUuid, charastricsUuid); + if (charastrics == nullptr) { + return nullptr; + } + auto result = charastrics->ReadValueAsync(); + + auto it = m_readRequest.insert(m_readRequest.begin(),result); + return &(*it); +} + +void BleDeviceObject::RemoveWriteOperation(WinRtAsyncOperation< WinRtGattWriteResult>* operation) { + for (auto it = m_writeRequest.begin(); it != m_writeRequest.end(); ++it) { + if (&(*it) == operation) { + m_writeRequest.erase(it); + break; + } + } +} +void BleDeviceObject::RemoveReadOperation(WinRtAsyncOperation< WinRtGattReadResult>* operation) { + for (auto it = m_readRequest.begin(); it != m_readRequest.end(); ++it) { + if (&(*it) == operation) { + m_readRequest.erase(it); + break; + } + } +} + + +void BleDeviceObject::SetValueChangeNotification(const WinRtGuid& serviceUuid, const WinRtGuid& charastricsUuid, bool isnotificate) { + WinRtBleCharacteristic* charastrics = this->GetCharastric(serviceUuid, charastricsUuid); + if (charastrics == nullptr) { + return; + } + if (isnotificate) { + charastrics->WriteClientCharacteristicConfigurationDescriptorAsync(WinRtCharacteristicConfigValue::Notify); + charastrics->ValueChanged(BleDeviceManager::Characteristic_ValueChanged); + } + else { + charastrics->WriteClientCharacteristicConfigurationDescriptorAsync(WinRtCharacteristicConfigValue::None); + charastrics->ValueChanged(nullptr); + } +} + +void BleDeviceObject::OnChangeValue(const WinRtGuid& serviceUuid, const WinRtGuid& charastricsUuid, uint8_t* data, int size) { + NotificateData notificateData(serviceUuid, charastricsUuid, data, size); + { + std::lock_guard lock(m_notificateMutex); + this->m_NotificateBuffer.push_back(notificateData); + } +} + +void BleDeviceObject::UpdateNotification() { + m_NotificateResult.clear(); + std::lock_guard lock(m_notificateMutex); + for (auto it = m_NotificateBuffer.begin(); it != m_NotificateBuffer.end(); ++it) { + m_NotificateResult.push_back(*it); + } + m_NotificateBuffer.clear(); +} + +void BleDeviceObject::UpdateDisconectCheck() { + if (this->m_connectState != EConnectState::GattServiceComplete) { + return; + } + if( this->m_device.ConnectionStatus() != WinRtBleConnectStatus::Connected){ + OnDisconnect(); + } +} +void BleDeviceObject::OnDisconnect() { + this->m_connectState = EConnectState::None; + m_services.clear(); + m_charastrictics.clear(); + + m_charastricsRequests.clear(); + + m_readRequest.clear(); + m_writeRequest.clear(); + + m_NotificateBuffer.clear(); + m_NotificateResult.clear(); + +} \ No newline at end of file diff --git a/bleplugin_projects/Windows/BlePluginWin/BleDeviceObject.h b/bleplugin_projects/Windows/BlePluginWin/BleDeviceObject.h new file mode 100644 index 0000000..c270b53 --- /dev/null +++ b/bleplugin_projects/Windows/BlePluginWin/BleDeviceObject.h @@ -0,0 +1,129 @@ +#pragma once + +#include "pch.h" + +namespace BlePlugin { + class NotificateData { + public: + // ãŒÀ‚Í 22bytec + static const int MaxDataSize = 22; + private: + WinRtGuid service; + WinRtGuid charastrics; + uint8_t data[MaxDataSize]; + int size; + private: + void SetData(const uint8_t* src, int length) { + for (int i = 0; i < length && i < sizeof(data); ++i) { + data[i] = src[i]; + } + } + public: + NotificateData(const WinRtGuid &_service, + const WinRtGuid& _charastrics,uint8_t* _data,int _size) : + service(_service), charastrics(_charastrics),size(_size),data() + { + SetData(_data, _size); + } + NotificateData(const NotificateData& src) : + service (src.service),charastrics(src.charastrics), + size(src.size), data() + { + SetData(src.data, src.size); + } + NotificateData& operator =(const NotificateData& src) { + this->service = src.service; + this->charastrics = src.charastrics; + SetData(src.data, src.size); + return *this; + } + inline const WinRtGuid& GetServiceUuid()const { + return service; + } + inline const WinRtGuid& GetCharastricsUuid()const { + return charastrics; + } + inline const uint8_t* GetData()const { + return data; + } + inline int GetSize()const { + return size; + } + + }; + + class BleDeviceObject { + private: + enum class EConnectState { + None = 0, + Connecting = 1, + GattServiceRequesting = 2, + GattCharastricsRequesting = 3, + GattServiceComplete = 4, + }; + + + WinRtAsyncOperation m_connectAsync; + WinRtAsyncOperation m_connectGattAsync; + + uint64_t m_addr; + WinRtBleDevice m_device; + + std::vector m_services; + std::vector m_charastrictics; + + std::vector > m_charastricsRequests; + EConnectState m_connectState; + + std::list< WinRtAsyncOperation< WinRtGattReadResult> > m_readRequest; + std::list< WinRtAsyncOperation< WinRtGattWriteResult> > m_writeRequest; + std::vector< NotificateData> m_NotificateBuffer; + std::vector< NotificateData> m_NotificateResult; + std::mutex m_notificateMutex; + + public: + BleDeviceObject(uint64_t addr); + + bool IsConnected()const; + void ConnectRequest(); + void Disconnect(); + void Update(); + + WinRtAsyncOperation< WinRtGattWriteResult>* WriteRequest(const WinRtGuid& serviceUuid, const WinRtGuid& charastricsUuid, + const uint8_t* src, int size); + WinRtAsyncOperation< WinRtGattReadResult>* ReadRequest(const WinRtGuid& serviceUuid, const WinRtGuid& charastricsUuid); + + void RemoveWriteOperation(WinRtAsyncOperation< WinRtGattWriteResult>* operation); + void RemoveReadOperation(WinRtAsyncOperation< WinRtGattReadResult>* operation); + + void SetValueChangeNotification(const WinRtGuid& serviceUuid, const WinRtGuid& charastricsUuid,bool isnotificate); + void OnChangeValue(const WinRtGuid& serviceUuid, const WinRtGuid& charastricsUuid,uint8_t *data, int length); + + int GetNofiticateNum()const { + return static_cast(m_NotificateResult.size()); + } + const NotificateData& GetNotificateData(int idx)const { + return m_NotificateResult.at(idx); + } + + inline uint64_t GetAddr()const { + return this->m_addr; + } + + inline int GetCharastricsNum()const { + return static_cast( this->m_charastrictics.size()); + } + const WinRtBleCharacteristic& GetCharastrics(int idx) const { + return m_charastrictics.at(idx); + } + private: + WinRtBleCharacteristic* GetCharastric(const WinRtGuid& serviceUuid, const WinRtGuid& charastricsUuid); + void SetupGattServices(const WinRtBleGattServiceResult& result); + void UpdateCharacterisc(); + void SetupCharacterisc(const WinRtBleCharacteristicsResult& result); + + void UpdateNotification(); + void UpdateDisconectCheck(); + void OnDisconnect(); + }; +} \ No newline at end of file diff --git a/bleplugin_projects/Windows/BlePluginWin/BleDeviceWatcher.cpp b/bleplugin_projects/Windows/BlePluginWin/BleDeviceWatcher.cpp new file mode 100644 index 0000000..344b5d4 --- /dev/null +++ b/bleplugin_projects/Windows/BlePluginWin/BleDeviceWatcher.cpp @@ -0,0 +1,142 @@ +#include "BleDeviceWatcher.h" +#include "Utility.h" +#include + +using namespace BlePlugin; + + +BleDeviceWatcher BleDeviceWatcher::s_instance; +// DeviceInfo +BleDeviceWatcher::DeviceInfo::DeviceInfo(const char* _name, + uint64_t _addr,int _rssi) : + //name(_name), + addr(_addr), rssi(_rssi) { + this->lastFound = clock(); +} + +BleDeviceWatcher::DeviceInfo::DeviceInfo(const BleDeviceWatcher::DeviceInfo& src) + : + //name(src.name), + addr(src.addr),rssi(src.rssi),lastFound(src.lastFound) +{ +} + + +const BleDeviceWatcher::DeviceInfo & + BleDeviceWatcher::DeviceInfo::operator= (const BleDeviceWatcher::DeviceInfo &src) +{ +// this->name = src.name; + this->addr = src.addr; + this->rssi = src.rssi; + this->lastFound = src.lastFound; + return *this; +} + + + +//@BleWatcher +BleDeviceWatcher& BleDeviceWatcher::GetInstance() { + return s_instance; +} + +void BleDeviceWatcher::ClearFilterServiceUUID() { + m_filer.Advertisement().ServiceUuids().Clear(); +} + +void BleDeviceWatcher::AddServiceUUID(const WinRtGuid& guid) { + m_filer.Advertisement().ServiceUuids().Append(guid); +} + +void BleDeviceWatcher::AddServiceUUID(uint32_t d1, uint32_t d2, uint32_t d3, uint32_t d4) { + auto guid = Utility::CreateGUID(d1, d2, d3, d4); + m_filer.Advertisement().ServiceUuids().Append(guid); +} + +void BleDeviceWatcher::Start() { + m_watcher.Received(BleDeviceWatcher::ReceiveCallBack); + m_watcher.AdvertisementFilter(m_filer); + m_watcher.Start(); +} +void BleDeviceWatcher::Stop() { + m_watcher.Stop(); +} + +void BleDeviceWatcher::UpdateCache() { + + clock_t current = clock(); + std::lock_guard lock(mtx); + m_cacheData.clear(); + for (auto it = m_DeviceMap.begin(); + it != m_DeviceMap.end(); ++it) { + if (it->second.IsTimeout(current)) { + continue; + } + m_cacheData.push_back(it->second); + } +} + +int BleDeviceWatcher::GetDeviceNum()const { + return static_cast(m_cacheData.size()); +} + +const char* BleDeviceWatcher::GetName(int idx)const { + if (idx < 0 || idx >= m_cacheData.size()) { + return nullptr; + } + return "";// m_cacheData.at(idx).name.c_str(); +} +uint64_t BleDeviceWatcher::GetAddr(int idx)const { + if (idx < 0 || idx >= m_cacheData.size()) { + return 0; + } + return m_cacheData.at(idx).addr; +} + +int BleDeviceWatcher::GetRssi(int idx)const { + if (idx < 0 || idx >= m_cacheData.size()) { + return 0; + } + return m_cacheData.at(idx).rssi; +} + +void BleDeviceWatcher::OnConnectDevice(uint64_t addr) { + m_DeviceMap.erase(addr); +} + +BleDeviceWatcher::BleDeviceWatcher() { +} +BleDeviceWatcher::~BleDeviceWatcher() { +} + +void BleDeviceWatcher::ReceiveCallBack( + WinRtBleAdvertiseWatcher sender, + WinRtBleAdvertiseRecieveEventArg args) { + GetInstance().OnReceive(sender, args); +} + +void BleDeviceWatcher::OnReceive( + WinRtBleAdvertiseWatcher sender, + WinRtBleAdvertiseRecieveEventArg args) +{ + std::lock_guard lock(mtx); + int rssi = args.RawSignalStrengthInDBm(); + uint64_t addr = args.BluetoothAddress(); + auto advertisement = args.Advertisement(); + + /* todo name And ManufactureData + int dataSectionNum = advertisement.DataSections().Size(); + for (int i = 0; i < dataSectionNum; ++i) { + auto dataSection = advertisement.DataSections().GetAt(i); + uint8_t dataType = dataSection.DataType(); + int sectionLength = dataSection.Data().Length(); + } + int manufactureSize = advertisement.ManufacturerData().Size(); + */ + +// auto name = advertisement.LocalName().c_str(); + const char* name = ""; + int nameSize = advertisement.LocalName().size(); + DeviceInfo deviceInfo( name, addr, rssi); + m_DeviceMap[addr] = deviceInfo; +} + diff --git a/bleplugin_projects/Windows/BlePluginWin/BleDeviceWatcher.h b/bleplugin_projects/Windows/BlePluginWin/BleDeviceWatcher.h new file mode 100644 index 0000000..3d7a8c2 --- /dev/null +++ b/bleplugin_projects/Windows/BlePluginWin/BleDeviceWatcher.h @@ -0,0 +1,80 @@ +#pragma once + +#include "pch.h" +#include +#include + +namespace BlePlugin { + + + class BleDeviceWatcher { + private: + + // ƒfƒoƒCƒXî•ñ + struct DeviceInfo { + static const int TimeoutSec = 1500; +// std::string name; + uint64_t addr; + int rssi; + clock_t lastFound; + DeviceInfo() : + /* name(""),*/ + addr(0), rssi(0), lastFound(0) + { + } + DeviceInfo(const DeviceInfo& src); + DeviceInfo(const char* _name, + uint64_t _addr, + int _rssi); + + const DeviceInfo& operator =(const DeviceInfo& src); + + inline bool IsTimeout(clock_t current)const { + return ((current - this->lastFound) >= TimeoutSec); + } + + }; + // member + std::map m_DeviceMap; + std::vector m_cacheData; + static BleDeviceWatcher s_instance; + std::mutex mtx; + + public: + static BleDeviceWatcher& GetInstance(); + + void ClearFilterServiceUUID(); + void AddServiceUUID(const WinRtGuid &guid); + void AddServiceUUID(uint32_t d1, uint32_t d2, uint32_t d3, uint32_t d4); + + void Start(); + void Stop(); + + void UpdateCache(); + int GetDeviceNum()const; + const char* GetName(int idx)const; + uint64_t GetAddr(int idx)const; + int GetRssi(int idx)const; + + void OnConnectDevice(uint64_t addr); + + private: + + BleDeviceWatcher(); + ~BleDeviceWatcher(); + + static void ReceiveCallBack( + WinRtBleAdvertiseWatcher sender, + WinRtBleAdvertiseRecieveEventArg args); + + void OnReceive( + WinRtBleAdvertiseWatcher sender, + WinRtBleAdvertiseRecieveEventArg args); + + WinRtBleAdvertiseWatcher m_watcher; + WinRtBleAdvertiseFilter m_filer; + + + }; + +} \ No newline at end of file diff --git a/bleplugin_projects/Windows/BlePluginWin/BlePluginWin.vcxproj b/bleplugin_projects/Windows/BlePluginWin/BlePluginWin.vcxproj new file mode 100644 index 0000000..813baf6 --- /dev/null +++ b/bleplugin_projects/Windows/BlePluginWin/BlePluginWin.vcxproj @@ -0,0 +1,143 @@ + + + + + Debug + x64 + + + Release + x64 + + + UnityDll + x64 + + + + 16.0 + Win32Proj + {067aec9b-07d2-46d6-8e15-1624071c15c9} + BlePluginWin + 10.0.19041.0 + C++/WinRT + BlePluginWinows + + + + Application + true + v142 + Unicode + + + DynamicLibrary + false + v142 + true + MultiByte + + + DynamicLibrary + false + v142 + true + Unicode + + + + + + + + + + + + + + + + + + true + + + false + + + false + + + + Level3 + true + _DEBUG;_CONSOLE;%(PreprocessorDefinitions) + false + stdcpp17 + NotUsing + pch.h + + + Console + true + windowsapp.lib;%(AdditionalDependencies) + + + + + Level3 + true + true + true + NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + pch.h + stdcpp17 + MultiThreaded + + + Windows + true + true + true + + + + + Level3 + true + true + true + UNITY_DLL;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + true + true + + + + + + + + + Create + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/bleplugin_projects/Windows/BlePluginWin/BlePluginWin.vcxproj.filters b/bleplugin_projects/Windows/BlePluginWin/BlePluginWin.vcxproj.filters new file mode 100644 index 0000000..5984ce1 --- /dev/null +++ b/bleplugin_projects/Windows/BlePluginWin/BlePluginWin.vcxproj.filters @@ -0,0 +1,63 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + ソース ファイル + + + ソース ファイル + + + ソース ファイル + + + ソース ファイル + + + ソース ファイル + + + ソース ファイル + + + ソース ファイル + + + + + ヘッダー ファイル + + + ヘッダー ファイル + + + ヘッダー ファイル + + + ヘッダー ファイル + + + ヘッダー ファイル + + + ヘッダー ファイル + + + ヘッダー ファイル + + + \ No newline at end of file diff --git a/bleplugin_projects/Windows/BlePluginWin/UnityInterface.cpp b/bleplugin_projects/Windows/BlePluginWin/UnityInterface.cpp new file mode 100644 index 0000000..3284f90 --- /dev/null +++ b/bleplugin_projects/Windows/BlePluginWin/UnityInterface.cpp @@ -0,0 +1,364 @@ +#include "pch.h" +#include "BleDeviceObject.h" +#include "BleDeviceWatcher.h" +#include "BleDeviceManager.h" +#include "UUidManager.h" +#include "Utility.h" +#include +#include "UnityInterface.h" +using namespace BlePlugin; + +using namespace winrt::Windows::Foundation; + +// DLL EntryPoint +BOOL APIENTRY DllMain(HMODULE hModule, + DWORD ul_reason_for_call, + LPVOID lpReserved +) +{ + switch (ul_reason_for_call) + { + case DLL_PROCESS_ATTACH: + case DLL_THREAD_ATTACH: + case DLL_THREAD_DETACH: + case DLL_PROCESS_DETACH: + break; + } + return TRUE; +} + + +DllExport void _BlePluginFinalize() { + BleDeviceWatcher& watcher = BleDeviceWatcher::GetInstance(); + watcher.Stop(); + watcher.ClearFilterServiceUUID(); + BleDeviceManager& manager = BleDeviceManager::GetInstance(); + manager.ResetAll(); +} + +DllExport void _BlePluginUpdateWatcher() { + BleDeviceWatcher& watcher = BleDeviceWatcher::GetInstance(); + watcher.UpdateCache(); +} + + +DllExport void _BlePluginUpdateDevicdeManger() { + BleDeviceManager& manager = BleDeviceManager::GetInstance(); + manager.Update(); +} + +DllExport UuidHandle _BlePluginGetOrCreateUuidObject(uint32_t d1, uint32_t d2, uint32_t d3, uint32_t d4) { + UuidManager& manager = UuidManager::GetInstance(); + auto ptr = manager.GetOrCreate(d1, d2, d3, d4); + return ptr; +} +DllExport void _BlePluginConvertUuidUint128(UuidHandle ptr, void* out) { + WinRtGuid* guid = reinterpret_cast(ptr); + Utility::ConvertFromGUID(*guid, reinterpret_cast(out)); +} + + +DllExport void _BlePluginAddScanServiceUuid(UuidHandle uuid) { + auto guid = reinterpret_cast(uuid); + BleDeviceWatcher& watcher = BleDeviceWatcher::GetInstance(); + watcher.AddServiceUUID(*guid); +} +DllExport void _BlePluginStartScan() { + BleDeviceWatcher& watcher = BleDeviceWatcher::GetInstance(); + watcher.Start(); +} +DllExport void _BlePluginStopScan() { + BleDeviceWatcher& watcher = BleDeviceWatcher::GetInstance(); + watcher.Stop(); +} + +DllExport void _BlePluginClearScanFilter() { + BleDeviceWatcher& watcher = BleDeviceWatcher::GetInstance(); + watcher.ClearFilterServiceUUID(); +} + +DllExport int _BlePluginScanGetDeviceLength() { + BleDeviceWatcher& watcher = BleDeviceWatcher::GetInstance(); + return watcher.GetDeviceNum(); +} + +DllExport uint64_t _BlePluginScanGetDeviceAddr(int idx) { + BleDeviceWatcher& watcher = BleDeviceWatcher::GetInstance(); + return watcher.GetAddr(idx); +} +const char* _BlePluginScanGetDeviceName(int idx) { + BleDeviceWatcher& watcher = BleDeviceWatcher::GetInstance(); + return watcher.GetName(idx); +} + +DllExport int32_t _BlePluginScanGetDeviceRssi(int idx) { + BleDeviceWatcher& watcher = BleDeviceWatcher::GetInstance(); + return watcher.GetRssi(idx); +} + +DllExport void _BlePluginScanCopyDeviceManifactureData(int idx, void* ptr, int max) { + BleDeviceWatcher& watcher = BleDeviceWatcher::GetInstance(); +} + + + +DllExport DeviceHandle _BlePluginConnectDevice(uint64_t addr) { + BleDeviceManager& manager = BleDeviceManager::GetInstance(); + BleDeviceObject *obj = manager.ConnectDevice(addr); + return obj; +} +DllExport void _BlePluginDisconnectDevice(uint64_t addr) { + BleDeviceManager& manager = BleDeviceManager::GetInstance(); + manager.DisconnectDevice(addr); +} + +DllExport void _BlePluginDisconnectAllDevice() { + BleDeviceManager& manager = BleDeviceManager::GetInstance(); + manager.DisconnectAll(); +} + +DllExport bool _BlePluginIsDeviceConnectedByAddr(uint64_t addr) { + BleDeviceManager& manager = BleDeviceManager::GetInstance(); + BleDeviceObject* obj = manager.GetDeviceByAddr(addr); + if (obj == nullptr) { + return false; + } + return obj->IsConnected(); +} +DllExport bool _BlePluginIsDeviceConnected(DeviceHandle devicePtr) { + + BleDeviceObject* obj = reinterpret_cast(devicePtr); + if (obj == nullptr) { + return false; + } + return obj->IsConnected(); +} +DllExport uint64_t _BlePluginDeviceGetAddr(DeviceHandle devicePtr) { + BleDeviceObject* obj = reinterpret_cast(devicePtr); + if (obj == nullptr) { + return 0; + } + return obj->GetAddr(); +} + + +DllExport int _BlePluginGetConectDeviceNum() { + BleDeviceManager& manager = BleDeviceManager::GetInstance(); + return manager.GetConnectedDeviceNum(); +} +DllExport uint64_t _BlePluginGetConectDevicAddr(int idx) { + BleDeviceManager& manager = BleDeviceManager::GetInstance(); + BleDeviceObject* obj = manager.GetConnectedDeviceByIndex(idx); + if (obj != nullptr) { + return obj->GetAddr(); + } + return 0; +} + +DllExport DeviceHandle _BlePluginGetConnectDevicePtr(int idx) { + BleDeviceManager& manager = BleDeviceManager::GetInstance(); + BleDeviceObject* obj = manager.GetConnectedDeviceByIndex(idx); + return obj; +} +DllExport DeviceHandle _BlePluginGetDevicePtrByAddr(uint64_t addr) { + BleDeviceManager& manager = BleDeviceManager::GetInstance(); + BleDeviceObject* obj = manager.GetDeviceByAddr(addr); + return obj; +} + +DllExport int _BlePluginDeviceCharastricsNum(DeviceHandle devicePtr) { + BleDeviceObject* deviceObj = reinterpret_cast(devicePtr); + if (deviceObj == nullptr) { + return 0; + } + return deviceObj->GetCharastricsNum(); +} +DllExport UuidHandle _BlePluginDeviceCharastricUuid(DeviceHandle devicePtr, int idx) { + BleDeviceObject* deviceObj = reinterpret_cast(devicePtr); + if (deviceObj == nullptr) { + return nullptr; + } + WinRtGuid guid = deviceObj->GetCharastrics(idx).Uuid(); + WinRtGuid *retval = UuidManager::GetInstance().GetOrCreate(guid); + return retval; +} +DllExport UuidHandle _BlePluginDeviceCharastricServiceUuid(DeviceHandle devicePtr, int idx) { + BleDeviceObject* deviceObj = reinterpret_cast(devicePtr); + if (deviceObj == nullptr) { + return nullptr; + } + WinRtGuid guid = deviceObj->GetCharastrics(idx).Service().Uuid(); + WinRtGuid* retval = UuidManager::GetInstance().GetOrCreate(guid); + return retval; +} + + +DllExport ReadRequestHandle _BlePluginReadCharacteristicRequest(uint64_t addr, UuidHandle serviceUuid, UuidHandle charaUuid) { + BleDeviceManager& manager = BleDeviceManager::GetInstance(); + BleDeviceObject* deviceObj = manager.GetDeviceByAddr(addr); + WinRtGuid* serviceUuidObj = reinterpret_cast(serviceUuid); + WinRtGuid* charaUuidObj = reinterpret_cast(charaUuid); + if (deviceObj == nullptr || serviceUuidObj == nullptr || + charaUuidObj == nullptr) { + return nullptr; + } + auto ptr = deviceObj->ReadRequest(*serviceUuidObj, *charaUuidObj); + return reinterpret_cast(ptr); +} + +DllExport WriteRequestHandle _BlePluginWriteCharacteristicRequest(uint64_t addr, UuidHandle serviceUuid, UuidHandle charaUuid, void* data, int size) { + + BleDeviceManager& manager = BleDeviceManager::GetInstance(); + BleDeviceObject *deviceObj = manager.GetDeviceByAddr(addr); + WinRtGuid* serviceUuidObj = reinterpret_cast(serviceUuid); + WinRtGuid* charaUuidObj = reinterpret_cast(charaUuid); + if (deviceObj == nullptr || serviceUuidObj == nullptr || + charaUuidObj == nullptr ) { + return nullptr; + } + auto ptr = deviceObj->WriteRequest(*serviceUuidObj, *charaUuidObj, + reinterpret_cast(data), size); + return reinterpret_cast(ptr); + +} +DllExport bool _BlePluginIsReadRequestComplete(ReadRequestHandle ptr) { + auto operation = reinterpret_cast*>(ptr); + if (operation == nullptr) { + return true; + } + return (operation->Status() == AsyncStatus::Completed); +} +DllExport bool _BlePluginIsReadRequestError(ReadRequestHandle ptr) { + auto operation = reinterpret_cast*>(ptr); + if (operation == nullptr) { + return true; + } + return (operation->Status() == AsyncStatus::Error); +} +DllExport int _BlePluginCopyReadRequestData(ReadRequestHandle ptr, void* data, int maxSize) { + auto operation = reinterpret_cast*>(ptr); + if (operation == nullptr) { + return 0; + } + if (operation->Status() != AsyncStatus::Completed) { + return 0; + } + if (operation->get().Status() != WinRtGattCommunicateState::Success) { + return 0; + } + if (maxSize > NotificateData::MaxDataSize) { + maxSize = NotificateData::MaxDataSize; + } + int size = operation->get().Value().Length(); + uint8_t* dest = reinterpret_cast(data); + auto src = operation->get().Value().data(); + + for (int i = 0; i < size && i < maxSize; ++i) { + dest[i] = src[i]; + } + return size; +} +DllExport void _BlePluginReleaseReadRequest(uint64_t deviceaddr, ReadRequestHandle ptr) { + BleDeviceManager& manager = BleDeviceManager::GetInstance(); + BleDeviceObject* deviceObj = manager.GetDeviceByAddr(deviceaddr); + if (deviceObj == nullptr) { + return; + } + auto operation = reinterpret_cast*>(ptr); + deviceObj->RemoveReadOperation(operation); +} + +DllExport bool _BlePluginIsWriteRequestComplete(WriteRequestHandle ptr) { + auto operation = reinterpret_cast*>(ptr); + if (operation == nullptr) { + return true; + } + return (operation->Status() == AsyncStatus::Completed); +} +DllExport bool _BlePluginIsWriteRequestError(WriteRequestHandle ptr) { + auto operation = reinterpret_cast*>(ptr); + if (operation == nullptr) { + return false; + } + if (operation->Status() == AsyncStatus::Error) { + return true; + } + if (operation->Status() == AsyncStatus::Completed && + operation->get().Status() != WinRtGattCommunicateState::Success) { + return true; + } + return false; +} +DllExport void _BlePluginReleaseWriteRequest(uint64_t deviceaddr, WriteRequestHandle ptr) { + BleDeviceManager& manager = BleDeviceManager::GetInstance(); + BleDeviceObject* deviceObj = manager.GetDeviceByAddr(deviceaddr); + if (deviceObj == nullptr) { + return; + } + auto operation = reinterpret_cast*>(ptr); + deviceObj->RemoveWriteOperation(operation); +} + + +// Notification +DllExport void _BlePluginSetNotificateRequest(uint64_t addr, UuidHandle serviceUuid, UuidHandle charaUuid, bool enable) { + BleDeviceManager& manager = BleDeviceManager::GetInstance(); + BleDeviceObject* deviceObj = manager.GetDeviceByAddr(addr); + WinRtGuid* serviceUuidObj = reinterpret_cast(serviceUuid); + WinRtGuid* charaUuidObj = reinterpret_cast(charaUuid); + if (deviceObj == nullptr || serviceUuidObj == nullptr || + charaUuidObj == nullptr) { + return; + } + deviceObj->SetValueChangeNotification(*serviceUuidObj, *charaUuidObj, enable); +} + +DllExport int _BlePluginGetDeviceNotificateNum(uint64_t addr) { + BleDeviceManager& manager = BleDeviceManager::GetInstance(); + BleDeviceObject* deviceObj = manager.GetDeviceByAddr(addr); + if (deviceObj == nullptr) { + return 0; + } + return deviceObj->GetNofiticateNum(); +} +DllExport int _BlePluginCopyDeviceNotificateData(uint64_t addr, int idx, void* ptr, int maxSize) { + BleDeviceManager& manager = BleDeviceManager::GetInstance(); + BleDeviceObject* deviceObj = manager.GetDeviceByAddr(addr); + if (deviceObj == nullptr) { + return 0; + } + const NotificateData& notifyData = deviceObj->GetNotificateData(idx); + const uint8_t* src = notifyData.GetData(); + int size = notifyData.GetSize(); + if (maxSize > NotificateData::MaxDataSize) { + maxSize = NotificateData::MaxDataSize; + } + uint8_t* dest = reinterpret_cast(ptr); + for (int i = 0; i < maxSize && i < size; ++i) { + dest[i] = src[i]; + } + return size; +} + +DllExport UuidHandle _BlePluginGetDeviceNotificateServiceUuid(uint64_t addr, int idx) { + BleDeviceManager& manager = BleDeviceManager::GetInstance(); + BleDeviceObject* deviceObj = manager.GetDeviceByAddr(addr); + if (deviceObj == nullptr) { + return nullptr; + } + const NotificateData& notifyData = deviceObj->GetNotificateData(idx); + UuidManager &uuidMgr = UuidManager::GetInstance(); + return uuidMgr.GetOrCreate( notifyData.GetServiceUuid() ); +} + +DllExport UuidHandle _BlePluginGetDeviceNotificateCharastricsUuid(uint64_t addr, int idx) { + BleDeviceManager& manager = BleDeviceManager::GetInstance(); + BleDeviceObject* deviceObj = manager.GetDeviceByAddr(addr); + if (deviceObj == nullptr) { + return nullptr; + } + const NotificateData& notifyData = deviceObj->GetNotificateData(idx); + UuidManager& uuidMgr = UuidManager::GetInstance(); + return uuidMgr.GetOrCreate(notifyData.GetCharastricsUuid()); +} + diff --git a/bleplugin_projects/Windows/BlePluginWin/UnityInterface.h b/bleplugin_projects/Windows/BlePluginWin/UnityInterface.h new file mode 100644 index 0000000..51871a0 --- /dev/null +++ b/bleplugin_projects/Windows/BlePluginWin/UnityInterface.h @@ -0,0 +1,72 @@ +#pragma once +#include "pch.h" + +#define DllExport __declspec(dllexport) + +extern "C" { + typedef void* UuidHandle; + typedef void* DeviceHandle; + typedef void* WriteRequestHandle; + typedef void* ReadRequestHandle; + + DllExport void _BlePluginFinalize(); + + + DllExport UuidHandle _BlePluginGetOrCreateUuidObject(uint32_t d1, uint32_t d2, uint32_t d3, uint32_t d4); + DllExport void _BlePluginConvertUuidUint128(UuidHandle ptr, void* out); + + DllExport void _BlePluginUpdateWatcher(); + DllExport void _BlePluginUpdateDevicdeManger(); + + DllExport void _BlePluginAddScanServiceUuid(UuidHandle uuid); + DllExport void _BlePluginStartScan(); + DllExport void _BlePluginStopScan(); + DllExport void _BlePluginClearScanFilter(); + + // Scan Data + DllExport int _BlePluginScanGetDeviceLength(); + DllExport uint64_t _BlePluginScanGetDeviceAddr(int idx); + DllExport const char* _BlePluginScanGetDeviceName(int idx); + DllExport int32_t _BlePluginScanGetDeviceRssi(int idx); + + // Connect Dissconnect + DllExport DeviceHandle _BlePluginConnectDevice(uint64_t addr); + DllExport void _BlePluginDisconnectDevice(uint64_t addr); + DllExport void _BlePluginDisconnectAllDevice(); + DllExport bool _BlePluginIsDeviceConnectedByAddr(uint64_t addr); + DllExport bool _BlePluginIsDeviceConnected(DeviceHandle devicePtr); + DllExport uint64_t _BlePluginDeviceGetAddr(DeviceHandle devicePtr); + + + // GetDevice + DllExport int _BlePluginGetConectDeviceNum(); + DllExport uint64_t _BlePluginGetConectDevicAddr(int idx); + DllExport DeviceHandle _BlePluginGetConnectDevicePtr(int idx); + DllExport DeviceHandle _BlePluginGetDevicePtrByAddr(uint64_t addr); + DllExport int _BlePluginDeviceCharastricsNum(DeviceHandle devicePtr); + DllExport UuidHandle _BlePluginDeviceCharastricUuid(DeviceHandle devicePtr, int idx); + DllExport UuidHandle _BlePluginDeviceCharastricServiceUuid(DeviceHandle devicePtr, int idx); + + // Read/Write Request + DllExport ReadRequestHandle _BlePluginReadCharacteristicRequest(uint64_t addr, UuidHandle serviceUuid, UuidHandle charaUuid); + DllExport WriteRequestHandle _BlePluginWriteCharacteristicRequest(uint64_t addr, UuidHandle serviceUuid, UuidHandle charaUuid, void* data, int size); + + DllExport bool _BlePluginIsReadRequestComplete(ReadRequestHandle ptr); + DllExport bool _BlePluginIsReadRequestError(ReadRequestHandle ptr); + DllExport int _BlePluginCopyReadRequestData(ReadRequestHandle ptr, void* data, int maxSize); + DllExport void _BlePluginReleaseReadRequest(uint64_t deviceaddr , ReadRequestHandle ptr); + + DllExport bool _BlePluginIsWriteRequestComplete(WriteRequestHandle ptr); + DllExport bool _BlePluginIsWriteRequestError(WriteRequestHandle ptr); + DllExport void _BlePluginReleaseWriteRequest(uint64_t deviceaddr, WriteRequestHandle ptr); + + // notificate + DllExport void _BlePluginSetNotificateRequest(uint64_t addr, UuidHandle serviceUuid, UuidHandle charaUuid, bool enable); + + DllExport int _BlePluginGetDeviceNotificateNum(uint64_t addr); + DllExport int _BlePluginCopyDeviceNotificateData(uint64_t addr, int idx, void* ptr, int maxSize); + DllExport UuidHandle _BlePluginGetDeviceNotificateServiceUuid(uint64_t addr, int idx); + DllExport UuidHandle _BlePluginGetDeviceNotificateCharastricsUuid(uint64_t addr, int idx); + +} + diff --git a/bleplugin_projects/Windows/BlePluginWin/Utility.h b/bleplugin_projects/Windows/BlePluginWin/Utility.h new file mode 100644 index 0000000..1c096ca --- /dev/null +++ b/bleplugin_projects/Windows/BlePluginWin/Utility.h @@ -0,0 +1,52 @@ +#pragma once + +#include "pch.h" +namespace BlePlugin { + class Utility { + public: + inline static WinRtGuid CreateGUID(uint32_t d1, uint32_t d2, uint32_t d3, uint32_t d4) { + WinRtGuid guid; + guid.Data1 = d1; + guid.Data2 = (d2 & 0xffff0000)>>16; + guid.Data3 = (d2 & 0xffff); + + for (int i = 0; i < 8; ++i) { + int idx = i & 0x03; + int shift = (3 - idx) * 8; + int val = d3; + if (i >= 4) { + val = d4; + } + guid.Data4[i] = (((val & (0xff << shift)) >> shift) & 0xff); + } + return guid; + } + inline static void ConvertFromGUID(const WinRtGuid &uuid, + uint32_t *data) { + data[0] = uuid.Data1; + data[1] = (uuid.Data2 << 16) | uuid.Data3; + + for (int i = 0; i < 2; ++i) { + data[2+i] = 0; + for (int j = 0; j < 4; ++j) { + int idx = j + i *4; + int shift = (3 - idx) * 8; + data[2 + i] |= uuid.Data4[idx] << shift; + } + } + } + + +#if defined(_DEBUG) + inline static void DebugGuid(const WinRtGuid &src) { + std::cout << std::hex << src.Data1 << "-" << + src.Data2 << "-" << src.Data3 << "-"; + for (int i = 0; i < 8; ++i) { + std::cout << (int)(src.Data4[i]); + } + } +#endif + + + }; +} \ No newline at end of file diff --git a/bleplugin_projects/Windows/BlePluginWin/UuidManager.cpp b/bleplugin_projects/Windows/BlePluginWin/UuidManager.cpp new file mode 100644 index 0000000..3e6f952 --- /dev/null +++ b/bleplugin_projects/Windows/BlePluginWin/UuidManager.cpp @@ -0,0 +1,28 @@ +#include "UuidManager.h" +#include "Utility.h" + +using namespace BlePlugin; + +UuidManager UuidManager::s_instance; +UuidManager::UuidManager() { +} +WinRtGuid* UuidManager::GetOrCreate(uint32_t d1, uint32_t d2, uint32_t d3, uint32_t d4) { + WinRtGuid guid = Utility::CreateGUID(d1, d2, d3, d4); + return this->GetOrCreate(guid); +} + +WinRtGuid* UuidManager::GetOrCreate(const WinRtGuid& guid) { + for (auto it = m_cache.begin(); it != m_cache.end(); ++it) { + if (guid == *it) { + return &(*it); + } + } + auto insertIt = (m_cache.insert(m_cache.begin(), guid)); + return &(*insertIt); +} + + +UuidManager& UuidManager::GetInstance() { + return s_instance; +} + diff --git a/bleplugin_projects/Windows/BlePluginWin/UuidManager.h b/bleplugin_projects/Windows/BlePluginWin/UuidManager.h new file mode 100644 index 0000000..602bf29 --- /dev/null +++ b/bleplugin_projects/Windows/BlePluginWin/UuidManager.h @@ -0,0 +1,19 @@ +#pragma once + +#include "pch.h" +#include +#include + +namespace BlePlugin { + class UuidManager { + private: + std::list m_cache; + static UuidManager s_instance; + UuidManager(); + public: + WinRtGuid* GetOrCreate(uint32_t d1, uint32_t d2, uint32_t d3, uint32_t d4); + WinRtGuid* GetOrCreate(const WinRtGuid &guid); + static UuidManager &GetInstance(); + + }; +} \ No newline at end of file diff --git a/bleplugin_projects/Windows/BlePluginWin/bleTestConsole.cpp b/bleplugin_projects/Windows/BlePluginWin/bleTestConsole.cpp new file mode 100644 index 0000000..7d93676 --- /dev/null +++ b/bleplugin_projects/Windows/BlePluginWin/bleTestConsole.cpp @@ -0,0 +1,104 @@ +#if defined(_DEBUG) +#include "pch.h" +#include +#include "Utility.h" +#include "BleDeviceWatcher.h" +#include "BleDeviceObject.h" +#include "UuidManager.h" +#include "UnityInterface.h" + +using namespace BlePlugin; + +void debugDevices(const BlePlugin::BleDeviceWatcher& watcher) { + int deviceNum = watcher.GetDeviceNum(); + std::cout << "device " << deviceNum << std::endl; + for (int i = 0; i < deviceNum; ++i) { + std::cout << " "<< std::hex << watcher.GetAddr(i) << "::" << + watcher.GetName(i) << " " << watcher.GetRssi(i) << + std::endl; + } +} + +void ButtonSetSubscrive(uint64_t addr) { + void* serviceUUID = _BlePluginGetOrCreateUuidObject(0x10B20100U, 0x5B3B4571U, 0x9508CF3EU, 0xFCD7BBAEU); + + void* charaStrics = _BlePluginGetOrCreateUuidObject(0x10B20107U, + 0x5B3B4571U, 0x9508CF3EU, 0xFCD7BBAEU); + + _BlePluginSetNotificateRequest(addr, serviceUUID, charaStrics, true); + // 0x10B20107,0x5B3B4571 ,0x9508CF3E , 0xFCD7BBAE +} + +void TestRun(){ + auto uuidMgr = BlePlugin::UuidManager::GetInstance(); + void* gattUUID = _BlePluginGetOrCreateUuidObject(0x10B20100U, + 0x5B3B4571U, 0x9508cf3eU, 0xfcd7bbaeU); + + void* serviceUUID = _BlePluginGetOrCreateUuidObject(0x10B20100U, 0x5B3B4571U, 0x9508CF3EU, 0xFCD7BBAEU); + void* charaUUID = _BlePluginGetOrCreateUuidObject(0x10B20102U, 0x5B3B4571U, 0x9508CF3EU, 0xFCD7BBAEU); + void* gattUUID2 = _BlePluginGetOrCreateUuidObject(0x10B20100U, + 0x5B3B4571U, 0x9508cf3eU, 0xfcd7bbaeU); + + + _BlePluginClearScanFilter(); + _BlePluginAddScanServiceUuid(gattUUID); + _BlePluginStartScan(); + BlePlugin::BleDeviceWatcher& watcher = BlePlugin::BleDeviceWatcher::GetInstance(); + + while (true) { + _BlePluginUpdateWatcher(); + + debugDevices(watcher); + if (_BlePluginScanGetDeviceLength() > 0) { + break; + } + Sleep(500); + } + + auto addr = _BlePluginScanGetDeviceAddr(0); + _BlePluginConnectDevice(addr); + + byte data[7]; + data[0] = 0x01; + data[1] = 0x01; + data[2] = 0x01; + data[3] = 100; + data[4] = 0x02; + data[5] = 0x01; + data[6] = 100; + bool isWrite = false; + + while (true) { + _BlePluginUpdateDevicdeManger(); + + if (!isWrite && _BlePluginGetConectDeviceNum() > 0 ) + { + isWrite = true; + _BlePluginWriteCharacteristicRequest(addr, serviceUUID, + charaUUID, data, 7); + break; + } + } + ButtonSetSubscrive(addr); + for (int i = 0; i < 50; ++i) { + _BlePluginUpdateDevicdeManger(); + int deviceNum = _BlePluginGetConectDeviceNum(); + std::cout << "ButtonCheck " << deviceNum << std::endl; + for (int j = 0; j < deviceNum; ++j) { + int notificateNum = _BlePluginGetDeviceNotificateNum(addr); + std::cout << "Notificate " << notificateNum << std::endl; + } + Sleep(100); + } + +} + + +int main() +{ + while (true) { + TestRun(); + _BlePluginFinalize(); + } +} +#endif \ No newline at end of file diff --git a/bleplugin_projects/Windows/BlePluginWin/pch.cpp b/bleplugin_projects/Windows/BlePluginWin/pch.cpp new file mode 100644 index 0000000..699b941 --- /dev/null +++ b/bleplugin_projects/Windows/BlePluginWin/pch.cpp @@ -0,0 +1,3 @@ +#include "pch.h" + +#pragma comment(lib, "windowsapp") \ No newline at end of file diff --git a/bleplugin_projects/Windows/BlePluginWin/pch.h b/bleplugin_projects/Windows/BlePluginWin/pch.h new file mode 100644 index 0000000..86989a4 --- /dev/null +++ b/bleplugin_projects/Windows/BlePluginWin/pch.h @@ -0,0 +1,52 @@ +#pragma once +//@https://blog.okazuki.jp/entry/2018/10/16/144556 + +/* workaround */ +#define USE_WORKAROUND 1 + +#if defined(USE_WORKAROUND) +#include "winrt/base.h" +namespace winrt::impl +{ + template + auto wait_for(Async const& async, Windows::Foundation::TimeSpan const& timeout); +} +#endif + +#include "winrt/Windows.Foundation.h" +#include "winrt/Windows.Foundation.Collections.h" +#include "winrt/Windows.Devices.Bluetooth.h" +#include "winrt/Windows.Devices.Bluetooth.GenericAttributeProfile.h" +#include "winrt/Windows.Devices.Bluetooth.Advertisement.h" +#include + +#include + +// namespace’·‚¢‚Ì‚ÅÈ—ªŒ^‚ð—pˆÓ‚µ‚Ü‚· + +namespace BlePlugin { + using WinRtGuid = winrt::guid; + using WinRtBleAdvertiseWatcher = winrt::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementWatcher; + using WinRtBleDevice = winrt::Windows::Devices::Bluetooth::BluetoothLEDevice; + using WinRtBleAdvertiseRecieveEventArg = winrt::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementReceivedEventArgs; + using WinRtBleAdvertiseFilter = winrt::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementFilter; + using WinRtBleGattService = winrt::Windows::Devices::Bluetooth::GenericAttributeProfile::GattDeviceService; + using WinRtBleGattServiceResult = winrt::Windows::Devices::Bluetooth::GenericAttributeProfile::GattDeviceServicesResult; + + using WinRtBleCharacteristicsResult = winrt::Windows::Devices::Bluetooth::GenericAttributeProfile::GattCharacteristicsResult; + using WinRtBleCharacteristic = winrt::Windows::Devices::Bluetooth::GenericAttributeProfile::GattCharacteristic; + using WinRtBleValueChangedEventArgs = winrt::Windows::Devices::Bluetooth::GenericAttributeProfile::GattValueChangedEventArgs; + + using WinRtGattReadResult = winrt::Windows::Devices::Bluetooth::GenericAttributeProfile::GattReadResult; + using WinRtGattWriteResult = winrt::Windows::Devices::Bluetooth::GenericAttributeProfile::GattWriteResult; + using WinRtGattCommunicateState = winrt::Windows::Devices::Bluetooth::GenericAttributeProfile::GattCommunicationStatus; + + template + using WinRtAsyncOperation = winrt::Windows::Foundation::IAsyncOperation; + + using WinRtIBuffer = winrt::Windows::Storage::Streams::IBuffer; + using WinRtBleConnectStatus = winrt::Windows::Devices::Bluetooth::BluetoothConnectionStatus; + + using WinRtCharacteristicConfigValue = winrt::Windows::Devices::Bluetooth::GenericAttributeProfile::GattClientCharacteristicConfigurationDescriptorValue; +} + diff --git a/bleplugin_projects/Windows/ReadMe.txt b/bleplugin_projects/Windows/ReadMe.txt new file mode 100644 index 0000000..840bb45 --- /dev/null +++ b/bleplugin_projects/Windows/ReadMe.txt @@ -0,0 +1,6 @@ +ã“ã®ãƒ—ロジェクトã¯BLE Pluginã®Dll生æˆç”¨ã®ãƒ—ロジェクトã§ã™ã€‚ +ビルドã—ãŸç’°å¢ƒã¯Visual Studio2019,Windows SDK+UWPã«ã¦ãƒ“ルドã—ã¾ã—ãŸã€‚ + +Debugビルドã§ã¯æ¤œè¨¼ã™ã‚‹ãŸã‚ã® exeファイル書ã出ã—を行ã„ã¾ã™ã€‚ +Releaseビルドã«ã™ã‚‹ã“ã¨ã§ã€DLL書ã出ã—を行ã„ã¾ã™ã€‚ + From a1efd6db4b8c334f2ab9882dba8a8d3db03edffc Mon Sep 17 00:00:00 2001 From: Yusuke Kurokawa Date: Tue, 5 Oct 2021 22:02:22 +0900 Subject: [PATCH 04/11] fix gitignore --- .gitignore | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 8f044b4..f9e9a03 100644 --- a/.gitignore +++ b/.gitignore @@ -71,5 +71,5 @@ crashlytics-build.properties /[Aa]ssets/[Ss]treamingAssets/aa/* #Windows Plugin builds -bleplugin_projects/x64/* -bleplugin_projects/BlePluginWin/x64/* \ No newline at end of file +bleplugin_projects/x64 +bleplugin_projects/BlePluginWin/x64 \ No newline at end of file From ec157714d9c253c80f777938663c6decd00d7743 Mon Sep 17 00:00:00 2001 From: Yusuke Kurokawa Date: Tue, 5 Oct 2021 22:03:42 +0900 Subject: [PATCH 05/11] fix gitignore --- .gitignore | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index f9e9a03..b629ccc 100644 --- a/.gitignore +++ b/.gitignore @@ -71,5 +71,5 @@ crashlytics-build.properties /[Aa]ssets/[Ss]treamingAssets/aa/* #Windows Plugin builds -bleplugin_projects/x64 -bleplugin_projects/BlePluginWin/x64 \ No newline at end of file +bleplugin_projects/Windows/x64 +bleplugin_projects/Windows/BlePluginWin/x64 \ No newline at end of file From c380eaa07feb62cdc45562839026b301629b988e Mon Sep 17 00:00:00 2001 From: Yusuke Kurokawa Date: Tue, 5 Oct 2021 23:00:08 +0900 Subject: [PATCH 06/11] add Windows plugn source and fix disconnect behaviour --- Assets/Plugins/Ble.cs | 32 ++ Assets/Plugins/x86_64.meta | 8 + Assets/Plugins/x86_64/BehaviourProxy.cs | 31 ++ Assets/Plugins/x86_64/BehaviourProxy.cs.meta | 11 + Assets/Plugins/x86_64/BlePluginWinows.dll | Bin 0 -> 345088 bytes .../Plugins/x86_64/BlePluginWinows.dll.meta | 63 +++ Assets/Plugins/x86_64/BleWin.cs | 384 ++++++++++++++++ Assets/Plugins/x86_64/BleWin.cs.meta | 11 + Assets/Plugins/x86_64/Data.meta | 8 + .../x86_64/Data/BleCharastericsKeyInfo.cs | 77 ++++ .../Data/BleCharastericsKeyInfo.cs.meta | 11 + .../x86_64/Data/BleDeviceRequestData.cs | 46 ++ .../x86_64/Data/BleDeviceRequestData.cs.meta | 11 + .../Plugins/x86_64/Data/BleDiscoverEvents.cs | 34 ++ .../x86_64/Data/BleDiscoverEvents.cs.meta | 11 + .../Plugins/x86_64/DeviceAddressDatabase.cs | 89 ++++ .../x86_64/DeviceAddressDatabase.cs.meta | 11 + Assets/Plugins/x86_64/DllInterface.cs | 417 ++++++++++++++++++ Assets/Plugins/x86_64/DllInterface.cs.meta | 11 + Assets/Plugins/x86_64/UuidDatabase.cs | 99 +++++ Assets/Plugins/x86_64/UuidDatabase.cs.meta | 11 + Assets/Plugins/x86_64/bleplugin-x86_64.asmdef | 16 + .../x86_64/bleplugin-x86_64.asmdef.meta | 7 + .../Windows/BlePluginWin/BleDeviceObject.cpp | 3 +- .../Windows/copyDllToProjectPlugin.bat | 3 + 25 files changed, 1403 insertions(+), 2 deletions(-) create mode 100644 Assets/Plugins/x86_64.meta create mode 100644 Assets/Plugins/x86_64/BehaviourProxy.cs create mode 100644 Assets/Plugins/x86_64/BehaviourProxy.cs.meta create mode 100644 Assets/Plugins/x86_64/BlePluginWinows.dll create mode 100644 Assets/Plugins/x86_64/BlePluginWinows.dll.meta create mode 100644 Assets/Plugins/x86_64/BleWin.cs create mode 100644 Assets/Plugins/x86_64/BleWin.cs.meta create mode 100644 Assets/Plugins/x86_64/Data.meta create mode 100644 Assets/Plugins/x86_64/Data/BleCharastericsKeyInfo.cs create mode 100644 Assets/Plugins/x86_64/Data/BleCharastericsKeyInfo.cs.meta create mode 100644 Assets/Plugins/x86_64/Data/BleDeviceRequestData.cs create mode 100644 Assets/Plugins/x86_64/Data/BleDeviceRequestData.cs.meta create mode 100644 Assets/Plugins/x86_64/Data/BleDiscoverEvents.cs create mode 100644 Assets/Plugins/x86_64/Data/BleDiscoverEvents.cs.meta create mode 100644 Assets/Plugins/x86_64/DeviceAddressDatabase.cs create mode 100644 Assets/Plugins/x86_64/DeviceAddressDatabase.cs.meta create mode 100644 Assets/Plugins/x86_64/DllInterface.cs create mode 100644 Assets/Plugins/x86_64/DllInterface.cs.meta create mode 100644 Assets/Plugins/x86_64/UuidDatabase.cs create mode 100644 Assets/Plugins/x86_64/UuidDatabase.cs.meta create mode 100644 Assets/Plugins/x86_64/bleplugin-x86_64.asmdef create mode 100644 Assets/Plugins/x86_64/bleplugin-x86_64.asmdef.meta create mode 100644 bleplugin_projects/Windows/copyDllToProjectPlugin.bat diff --git a/Assets/Plugins/Ble.cs b/Assets/Plugins/Ble.cs index 0d428d7..96a0ce2 100644 --- a/Assets/Plugins/Ble.cs +++ b/Assets/Plugins/Ble.cs @@ -12,6 +12,10 @@ #define UNITY_OSX #endif +#if UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN +#define UNITY_WIN +#endif + using UnityEngine; using System; using System.Runtime.InteropServices; @@ -31,6 +35,8 @@ public static void Initialize(Action initializedAction, Action errorActi toio.Android.BleAndroid.Initialize(initializedAction, errorAction); #elif UNITY_OSX toio.BlemacOS.Initialize(initializedAction, errorAction); +#elif UNITY_WIN + toio.Windows.BleWin.Initialize(initializedAction, errorAction); #endif } @@ -42,6 +48,8 @@ public static void Finalize(Action finalizedAction = null) toio.Android.BleAndroid.Finalize(finalizedAction); #elif UNITY_OSX toio.BlemacOS.Finalize(finalizedAction); +#elif UNITY_WIN + toio.Windows.BleWin.Finalize(finalizedAction); #endif } @@ -53,6 +61,8 @@ public static void EnableBluetooth(bool enable) toio.Android.BleAndroid.EnableBluetooth(enable); #elif UNITY_OSX toio.BlemacOS.EnableBluetooth(enable); +#elif UNITY_WIN + toio.Windows.BleWin.EnableBluetooth(enable); #endif } @@ -64,6 +74,8 @@ public static void StartScan(string[] serviceUUIDs, Action connect #elif UNITY_OSX toio.BlemacOS.ConnectToPeripheral(identifier, connectedPeripheralAction, discoveredServiceAction, discoveredCharacteristicAction, disconnectedPeripheralAction); +#elif UNITY_WIN + toio.Windows.BleWin.ConnectToPeripheral(identifier, connectedPeripheralAction, discoveredServiceAction, + discoveredCharacteristicAction, disconnectedPeripheralAction); #endif } @@ -100,6 +117,8 @@ public static void DisconnectPeripheral(string identifier, Action discon toio.Android.BleAndroid.DisconnectPeripheral(identifier, disconnectedPeripheralAction); #elif UNITY_OSX toio.BlemacOS.DisconnectPeripheral(identifier, disconnectedPeripheralAction); +#elif UNITY_WIN + toio.Windows.BleWin.DisconnectPeripheral(identifier, disconnectedPeripheralAction); #endif } @@ -111,6 +130,8 @@ public static void DisconnectAllPeripherals() toio.Android.BleAndroid.DisconnectAllPeripherals(); #elif UNITY_OSX toio.BlemacOS.DisconnectAllPeripherals(); +#elif UNITY_WIN + toio.Windows.BleWin.DisconnectAllPeripherals(); #endif } @@ -124,6 +145,9 @@ public static void ReadCharacteristic(string identifier, string serviceUUID, str #elif UNITY_OSX toio.BlemacOS.ReadCharacteristic(identifier, serviceUUID, characteristicUUID, didReadChracteristicAction); +#elif UNITY_WIN + toio.Windows.BleWin.ReadCharacteristic(identifier, serviceUUID, + characteristicUUID, didReadChracteristicAction); #endif } @@ -137,6 +161,9 @@ public static void WriteCharacteristic(string identifier, string serviceUUID, st #elif UNITY_OSX toio.BlemacOS.WriteCharacteristic(identifier, serviceUUID, characteristicUUID, data, length, withResponse, didWriteCharacteristicAction); +#elif UNITY_WIN + toio.Windows.BleWin.WriteCharacteristic(identifier, serviceUUID, characteristicUUID, + data, length, withResponse, didWriteCharacteristicAction); #endif } @@ -150,6 +177,9 @@ public static void SubscribeCharacteristic(string identifier, string serviceUUID #elif UNITY_OSX toio.BlemacOS.SubscribeCharacteristic(identifier, serviceUUID, characteristicUUID, notifiedCharacteristicAction); +#elif UNITY_WIN + toio.Windows.BleWin.SubscribeCharacteristic(identifier, serviceUUID, + characteristicUUID, notifiedCharacteristicAction); #endif } @@ -161,6 +191,8 @@ public static void UnSubscribeCharacteristic(string identifier, string serviceUU toio.Android.BleAndroid.UnSubscribeCharacteristic(identifier, serviceUUID, characteristicUUID, action); #elif UNITY_OSX toio.BlemacOS.UnSubscribeCharacteristic(identifier, serviceUUID, characteristicUUID, action); +#elif UNITY_WIN + toio.Windows.BleWin.UnSubscribeCharacteristic(identifier, serviceUUID, characteristicUUID, action); #endif } } diff --git a/Assets/Plugins/x86_64.meta b/Assets/Plugins/x86_64.meta new file mode 100644 index 0000000..30809c4 --- /dev/null +++ b/Assets/Plugins/x86_64.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8bd18c775f8f7f2429fb3a6937c27646 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/x86_64/BehaviourProxy.cs b/Assets/Plugins/x86_64/BehaviourProxy.cs new file mode 100644 index 0000000..5a82b74 --- /dev/null +++ b/Assets/Plugins/x86_64/BehaviourProxy.cs @@ -0,0 +1,31 @@ + +#if UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN + +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace toio.Windows +{ + internal class BehaviourProxy : MonoBehaviour + { + private System.Action onUpdate; + public static BehaviourProxy Create(System.Action updateFunc) + { + var gmo = new GameObject("BehaviourProxy"); + gmo.hideFlags = HideFlags.HideAndDontSave; + Object.DontDestroyOnLoad(gmo); + var proxy = gmo.AddComponent(); + proxy.onUpdate = updateFunc; + return proxy; + } + void Update() + { + if(onUpdate != null) { + onUpdate(); + } + } + } +} + +#endif \ No newline at end of file diff --git a/Assets/Plugins/x86_64/BehaviourProxy.cs.meta b/Assets/Plugins/x86_64/BehaviourProxy.cs.meta new file mode 100644 index 0000000..95c4c65 --- /dev/null +++ b/Assets/Plugins/x86_64/BehaviourProxy.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 16c0bb189d9dcce4e94105564694b86a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/x86_64/BlePluginWinows.dll b/Assets/Plugins/x86_64/BlePluginWinows.dll new file mode 100644 index 0000000000000000000000000000000000000000..5bafd4851269d0e8dde2480654036d20f76b440d GIT binary patch literal 345088 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 literal 0 HcmV?d00001 diff --git a/Assets/Plugins/x86_64/BlePluginWinows.dll.meta b/Assets/Plugins/x86_64/BlePluginWinows.dll.meta new file mode 100644 index 0000000..06a4f16 --- /dev/null +++ b/Assets/Plugins/x86_64/BlePluginWinows.dll.meta @@ -0,0 +1,63 @@ +fileFormatVersion: 2 +guid: 33224e7743118c4429b1f87bf0b99dd3 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + : Any + second: + enabled: 0 + settings: + Exclude Editor: 0 + Exclude Linux64: 0 + Exclude OSXUniversal: 0 + Exclude Win: 0 + Exclude Win64: 0 + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 1 + settings: + CPU: x86_64 + DefaultValueInitialized: true + OS: Windows + - first: + Standalone: Linux64 + second: + enabled: 1 + settings: + CPU: AnyCPU + - first: + Standalone: OSXUniversal + second: + enabled: 1 + settings: + CPU: x86_64 + - first: + Standalone: Win + second: + enabled: 1 + settings: + CPU: None + - first: + Standalone: Win64 + second: + enabled: 1 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/x86_64/BleWin.cs b/Assets/Plugins/x86_64/BleWin.cs new file mode 100644 index 0000000..40a9dd9 --- /dev/null +++ b/Assets/Plugins/x86_64/BleWin.cs @@ -0,0 +1,384 @@ + + +#if UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN + + +using UnityEngine; +using System; +using System.Runtime.InteropServices; +using System.Collections.Generic; +using toio.Windows.Data; + +namespace toio.Windows +{ + public class BleWin + { + private static Action s_discoverAction; + private static Dictionary s_deviceDiscoverEvents = new Dictionary(); + + private static List s_writeRequests = new List(); + private static List s_readRequests = new List(); + private static Dictionary s_notifyEvents = new Dictionary(); + + private static HashSet s_allreadyCallServiceBuffer = new HashSet(); + private static List s_removeIdxBuffer = new List(); + private static List s_removeKeyBuffer = new List(); + + public static void Initialize(Action initializedAction, Action errorAction = null) + { + // clear data + s_discoverAction = null; + s_deviceDiscoverEvents.Clear(); + s_writeRequests.Clear(); + s_readRequests.Clear(); + s_notifyEvents.Clear(); + + BehaviourProxy.Create(OnUpdate); + if (initializedAction != null) + { + initializedAction(); + } + } + + public static void Finalize(Action finalizedAction = null) + { + //Debug.Log("Finalize"); + DllInterface.FinalizePlugin(); + if(finalizedAction != null) { finalizedAction(); } + } + + public static void EnableBluetooth(bool enable) + { + } + + public static void StartScan(string[] serviceUUIDs, + Action discoveredAction = null) + { + s_discoverAction = discoveredAction; + DllInterface.ClearScanFilter(); + if (serviceUUIDs != null) + { + foreach (var uuid in serviceUUIDs) + { + var uuidHandle = UuidDatabase.GetUuid(uuid); + DllInterface.AddScanServiceUuid(uuidHandle); + } + } + DllInterface.StartScan(); + } + + public static void StopScan() + { + //Debug.Log("StopScan " ); + DllInterface.StopScan(); + } + + public static void ConnectToPeripheral(string identifier, + Action connectedPeripheralAction = null, + Action discoveredServiceAction = null, + Action discoveredCharacteristicAction = null, + Action disconnectedPeripheralAction = null) + { + //Debug.Log("Connect to peripheral " + identifier); + if (s_deviceDiscoverEvents.ContainsKey(identifier)) + { + return; + } + var addr = DeviceAddressDatabase.GetAddressValue(identifier); + DllInterface.ConnectDevice(addr); + var evt = new BleDiscoverEvents(connectedPeripheralAction, + discoveredServiceAction, + discoveredCharacteristicAction, + disconnectedPeripheralAction); + + s_deviceDiscoverEvents.Add(identifier, evt); + } + + public static void DisconnectPeripheral(string identifier, + Action disconnectedPeripheralAction = null) + { + //Debug.Log("DisconnectPeripheral " + identifier); + + var addr = DeviceAddressDatabase.GetAddressValue(identifier); + DllInterface.DisconnectDevice(addr); + } + + public static void DisconnectAllPeripherals() + { + DllInterface.DisconnectAllDevice(); + } + + public static void ReadCharacteristic(string identifier, + string serviceUUID, + string characteristicUUID, + Action didReadChracteristicAction) + { + //Debug.Log("ReadCharacteristic " + identifier); + var addr = DeviceAddressDatabase.GetAddressValue(identifier); + var serviceHandle = UuidDatabase.GetUuid(serviceUUID); + var characteristicHandle = UuidDatabase.GetUuid(characteristicUUID); + var charastricsItem = new BleCharastericsKeyInfo(identifier, serviceUUID, characteristicUUID); + + var readRequestHandle = DllInterface.ReadCharastristicRequest(addr, serviceHandle, characteristicHandle); + var requestData = new BleReadRequestData(charastricsItem, readRequestHandle, didReadChracteristicAction); + s_readRequests.Add(requestData); + } + + public static void WriteCharacteristic(string identifier, + string serviceUUID, string characteristicUUID, + byte[] data, int length, bool withResponse, + Action didWriteCharacteristicAction) + { + //Debug.Log("WriteCharacteristic " + identifier); + var addr = DeviceAddressDatabase.GetAddressValue(identifier); + + var serviceHandle = UuidDatabase.GetUuid(serviceUUID); + var characteristicHandle = UuidDatabase.GetUuid(characteristicUUID); + var writeRequest = DllInterface.WriteCharastristicRequest(addr, serviceHandle, characteristicHandle, data,0,length); + + if (withResponse && didWriteCharacteristicAction == null) + { + var charastricsItem = new BleCharastericsKeyInfo(identifier, serviceUUID, characteristicUUID); + var requestData = new BleWriteRequestData(charastricsItem, writeRequest, didWriteCharacteristicAction); + s_writeRequests.Add(requestData); + } + else { + DllInterface.ReleaseWriteRequest(addr, writeRequest); + } + } + + public static void SubscribeCharacteristic(string identifier, + string serviceUUID, string characteristicUUID, + Action notifiedCharacteristicAction) + { + Debug.Log("SubscribeCharacteristic " + identifier + ":" + serviceUUID + ":" + characteristicUUID); + var addr = DeviceAddressDatabase.GetAddressValue(identifier); + var serviceHandle = UuidDatabase.GetUuid(serviceUUID); + var characteristicHandle = UuidDatabase.GetUuid(characteristicUUID); + var charastricsItem = new BleCharastericsKeyInfo(identifier, serviceUUID, characteristicUUID); + + s_notifyEvents[charastricsItem] = new BleNotifyData(notifiedCharacteristicAction); + DllInterface.SetNotificationRequest(addr, serviceHandle,characteristicHandle , true); + } + + public static void UnSubscribeCharacteristic(string identifier, + string serviceUUID, string characteristicUUID, + Action action) + { + + Debug.Log("UnSubscribeCharacteristic " + identifier + ":" + serviceUUID + ":" + characteristicUUID); var addr = DeviceAddressDatabase.GetAddressValue(identifier); + var serviceHandle = UuidDatabase.GetUuid(serviceUUID); + var characteristicHandle = UuidDatabase.GetUuid(characteristicUUID); + var charastricsItem = new BleCharastericsKeyInfo(identifier, serviceUUID, characteristicUUID); + DllInterface.SetNotificationRequest(addr, serviceHandle, characteristicHandle, false); + s_notifyEvents.Remove(charastricsItem); + } + + private static void OnUpdate() + { + DllInterface.UpdateFromMainThread(); + UpdateScanDeviceEvents(); + UpdateDeviceConnectEvents(); + UpdateWriteRequests(); + UpdateReadRequests(); + UpdateNotification(); + UpdateDisconnectedDevice(); + } + + private static void UpdateScanDeviceEvents() + { + // update scan devices + int scanNum = DllInterface.ScanGetDeviceLength(); + // Debug.Log("UpdateScanDeviceEvents " + scanNum); + for (int i = 0; i < scanNum; ++i) + { + ulong addr = DllInterface.ScanGetDeviceAddr(i); + var identifier = DeviceAddressDatabase.GetAddressStr(addr); + //Debug.Log("UpdateScanDeviceEvents identifier " + identifier); + var name = "";// DllInterface.ScanGetDeviceName(i); + //Debug.Log("UpdateScanDeviceEvents name " + name); + var rssi = DllInterface.ScanGetDeviceRssi(i); + //Debug.Log("UpdateScanDeviceEvents rssi " + rssi); + if (s_discoverAction != null) + { + s_discoverAction(identifier, name, rssi, null); + } + } + } + + private static void UpdateDeviceConnectEvents() + { + s_allreadyCallServiceBuffer.Clear(); + // update connect Event + int deviceNum = DllInterface.GetConnectDeviceNum(); + //Debug.Log("UpdateDeviceConnectEvents " + deviceNum); + for (int i = 0; i < deviceNum; ++i) + { + var addr = DllInterface.GetConnectDeviceAddr(i); + string identifier = DeviceAddressDatabase.GetAddressStr(addr); + BleDiscoverEvents bleDiscoverEvents; + if( !s_deviceDiscoverEvents.TryGetValue(identifier,out bleDiscoverEvents)) + { + continue; + } + if (bleDiscoverEvents.callDiscoverEvent) + { + continue; + } + if (bleDiscoverEvents.connectedAct != null) + { + bleDiscoverEvents.connectedAct(identifier); + } + + var deviceHandle = DllInterface.GetConnectDevicePtr(i); + int chNum = DllInterface.GetDeviceCharastricsNum(deviceHandle); + for (int j = 0; j < chNum; ++j) + { + var serviceHandle = DllInterface.GetDeviceCharastricServiceUuid(deviceHandle, j); + var charaHandle = DllInterface.GetDeviceCharastricUuid(deviceHandle, j); + var serviceUuidStr = UuidDatabase.GetUuidStr(serviceHandle); + var charaUuidStr = UuidDatabase.GetUuidStr(charaHandle); + + if (!s_allreadyCallServiceBuffer.Contains(serviceUuidStr)) + { + if (bleDiscoverEvents.discoveredServiceAct != null) + { + bleDiscoverEvents.discoveredServiceAct(identifier, serviceUuidStr); + } + s_allreadyCallServiceBuffer.Add(serviceUuidStr); + } + if (bleDiscoverEvents.discoveredCharacteristicAct != null) + { + bleDiscoverEvents.discoveredCharacteristicAct(identifier, serviceUuidStr, charaUuidStr); + } + } + + bleDiscoverEvents.callDiscoverEvent = true; + } + } + + private static void UpdateWriteRequests() + { + s_removeIdxBuffer.Clear(); + int count = s_writeRequests.Count; + for ( int i = 0; i < count; ++i) + { + var request = s_writeRequests[i]; + if( DllInterface.IsWriteRequestComplete(request.handle)) + { + if (request.didWriteCharacteristicAction != null) + { + request.didWriteCharacteristicAction(request.charastericsInfo.serviceUUID, request.charastericsInfo.characteristicUUID); + } + s_removeIdxBuffer.Add(i); + }else if (DllInterface.IsWriteRequestError(request.handle)) + { + s_removeIdxBuffer.Add(i); + } + } + // remove done request + s_removeIdxBuffer.Reverse(); + foreach( var idx in s_removeIdxBuffer) + { + var request = s_writeRequests[idx]; + var addr = DeviceAddressDatabase.GetAddressValue( request.charastericsInfo.address); + DllInterface.ReleaseWriteRequest(addr,request.handle); + s_writeRequests.RemoveAt(idx); + } + } + private static void UpdateReadRequests() + { + s_removeIdxBuffer.Clear(); + int count = s_readRequests.Count; + for (int i = 0; i < count; ++i) + { + var request = s_readRequests[i]; + if (DllInterface.IsReadRequestComplete(request.handle)) + { + if (request.didReadChracteristicAction != null) + { + var data = DllInterface.GetReadRequestData(request.handle, 32); + request.didReadChracteristicAction(request.charastericsInfo.serviceUUID, request.charastericsInfo.characteristicUUID,data); + } + s_removeIdxBuffer.Add(i); + } + else if (DllInterface.IsReadRequestError(request.handle)) + { + s_removeIdxBuffer.Add(i); + } + + } + // remove done request + s_removeIdxBuffer.Reverse(); + foreach (var idx in s_removeIdxBuffer) + { + var request = s_readRequests[idx]; + var addr = DeviceAddressDatabase.GetAddressValue(request.charastericsInfo.address); + DllInterface.ReleaseReadRequest(addr, request.handle); + s_readRequests.RemoveAt(idx); + } + } + + private static void UpdateNotification() + { + int deviceNum = DllInterface.GetConnectDeviceNum(); + for(int i = 0; i < deviceNum; ++i) + { + ulong addr = DllInterface.GetConnectDeviceAddr(i); + string identifier = DeviceAddressDatabase.GetAddressStr(addr); + + int num = DllInterface.GetDeviceNotificateNum(addr); + //Debug.Log("UpdateNotification " + identifier + "::" +num + " " + i + "/" + deviceNum ); + for (int j = 0; j < num; ++j) + { + var data = DllInterface.GetDeviceNotificateData(addr, j); + var serviceHandle = DllInterface.GetDeviceNotificateServiceUuid(addr, j); + var charastricHandle = DllInterface.GetDeviceNotificateCharastricsUuid(addr, j); + string serviceUUID = UuidDatabase.GetUuidStr(serviceHandle); + string characteristicUUID = UuidDatabase.GetUuidStr(charastricHandle); + + var key = new BleCharastericsKeyInfo(identifier, serviceUUID, characteristicUUID); + BleNotifyData bleNotifyData; + if(s_notifyEvents.TryGetValue(key,out bleNotifyData)) + { + if (bleNotifyData.notifiedCharacteristicAction != null) + { + bleNotifyData.notifiedCharacteristicAction(serviceUUID, characteristicUUID, data); + } + } + } + } + } + + private static void UpdateDisconnectedDevice() + { + s_removeKeyBuffer.Clear(); + foreach (var kvs in s_deviceDiscoverEvents) + { + string identifier = kvs.Key; + var addr = DeviceAddressDatabase.GetAddressValue(identifier); + var discoverEvt = kvs.Value; + if (!discoverEvt.callDiscoverEvent) + { + continue; + } + if (DllInterface.IsDeviceConnected(addr)) + { + continue; + } + if (discoverEvt.disconnectedAct != null) + { + discoverEvt.disconnectedAct(identifier); + } + s_removeKeyBuffer.Add(identifier); + //Debug.Log("DisconnectDevice " + identifier); + } + foreach (var key in s_removeKeyBuffer) + { + s_deviceDiscoverEvents.Remove(key); + } + } + + } +} +#endif diff --git a/Assets/Plugins/x86_64/BleWin.cs.meta b/Assets/Plugins/x86_64/BleWin.cs.meta new file mode 100644 index 0000000..1f84297 --- /dev/null +++ b/Assets/Plugins/x86_64/BleWin.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 46739601156b51844bca08723c2218aa +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/x86_64/Data.meta b/Assets/Plugins/x86_64/Data.meta new file mode 100644 index 0000000..31bb050 --- /dev/null +++ b/Assets/Plugins/x86_64/Data.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 163e06647c6a88f4797d91ee8a3146fa +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/x86_64/Data/BleCharastericsKeyInfo.cs b/Assets/Plugins/x86_64/Data/BleCharastericsKeyInfo.cs new file mode 100644 index 0000000..917d8c1 --- /dev/null +++ b/Assets/Plugins/x86_64/Data/BleCharastericsKeyInfo.cs @@ -0,0 +1,77 @@ + + +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + + + +#if UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN +namespace toio.Windows.Data { + internal struct BleCharastericsKeyInfo : IComparer + { + public string address; + public string serviceUUID; + public string characteristicUUID; + + public BleCharastericsKeyInfo(string addr,string service, string ch) + { + this.address = addr.ToLower(); + this.characteristicUUID = ch.ToLower(); + this.serviceUUID = service.ToLower(); + } + + public bool IsSameAddress(string addr) + { + return (this.address == addr.ToLower()); + } + + + public int Compare(BleCharastericsKeyInfo x, BleCharastericsKeyInfo y) + { + int idParam = x.address.CompareTo(y.address); + if (idParam != 0) + { + return idParam; + } + int serviceParam = x.serviceUUID.CompareTo(y.serviceUUID); + if (serviceParam != 0) + { + return serviceParam; + } + int chParam = x.characteristicUUID.CompareTo(y.characteristicUUID); + return chParam; + } + public override int GetHashCode() + { + return address.GetHashCode() + serviceUUID.GetHashCode() + characteristicUUID.GetHashCode(); + } + + public static void GetServices(HashSet destServices , List list) + { + destServices.Clear(); + foreach (var info in list) + { + string serviceUuid = info.serviceUUID; + if (destServices.Contains(serviceUuid)) + { + destServices.Add(serviceUuid); + } + } + } + public static void GetInfoByService(List dest,string service, List src) + { + dest.Clear(); + foreach (var info in src) + { + if (service == info.serviceUUID) + { + dest.Add(info); + } + } + } + + } + +} +#endif \ No newline at end of file diff --git a/Assets/Plugins/x86_64/Data/BleCharastericsKeyInfo.cs.meta b/Assets/Plugins/x86_64/Data/BleCharastericsKeyInfo.cs.meta new file mode 100644 index 0000000..7fc8f19 --- /dev/null +++ b/Assets/Plugins/x86_64/Data/BleCharastericsKeyInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 788a2b6d33e95fb4393afedc7df486fd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/x86_64/Data/BleDeviceRequestData.cs b/Assets/Plugins/x86_64/Data/BleDeviceRequestData.cs new file mode 100644 index 0000000..e247437 --- /dev/null +++ b/Assets/Plugins/x86_64/Data/BleDeviceRequestData.cs @@ -0,0 +1,46 @@ + + +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using System; + + +#if UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN +namespace toio.Windows.Data { + internal struct BleWriteRequestData + { + public BleCharastericsKeyInfo charastericsInfo; + public WriteRequestHandler handle; + public Action didWriteCharacteristicAction; + + public BleWriteRequestData(BleCharastericsKeyInfo chInfo,WriteRequestHandler h, Action act) + { + this.charastericsInfo = chInfo; + this.handle = h; + this.didWriteCharacteristicAction = act; + } + } + internal struct BleReadRequestData + { + public BleCharastericsKeyInfo charastericsInfo; + public ReadRequestHandler handle; + public Action didReadChracteristicAction; + + public BleReadRequestData(BleCharastericsKeyInfo chInfo, ReadRequestHandler h, Action act) + { + this.charastericsInfo = chInfo; + this.handle = h; + this.didReadChracteristicAction = act; + } + } + internal struct BleNotifyData + { + public Action notifiedCharacteristicAction; + public BleNotifyData(Action act) + { + this.notifiedCharacteristicAction = act; + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Plugins/x86_64/Data/BleDeviceRequestData.cs.meta b/Assets/Plugins/x86_64/Data/BleDeviceRequestData.cs.meta new file mode 100644 index 0000000..753d70e --- /dev/null +++ b/Assets/Plugins/x86_64/Data/BleDeviceRequestData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 231f864a1a0e1d544be857e1dd2c8c98 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/x86_64/Data/BleDiscoverEvents.cs b/Assets/Plugins/x86_64/Data/BleDiscoverEvents.cs new file mode 100644 index 0000000..192b408 --- /dev/null +++ b/Assets/Plugins/x86_64/Data/BleDiscoverEvents.cs @@ -0,0 +1,34 @@ + + +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using System; + + +#if UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN +namespace toio.Windows.Data { + internal class BleDiscoverEvents + { + public Action connectedAct; + public Action discoveredServiceAct; + public Action discoveredCharacteristicAct; + public Action disconnectedAct; + + public bool callDiscoverEvent = false; + + public BleDiscoverEvents( + Action connectedAct, + Action discoveredServiceAct, + Action discoveredCharacteristicAct, + Action disconnectedAct + ){ + this.connectedAct = connectedAct; + this.discoveredServiceAct = discoveredServiceAct; + this.discoveredCharacteristicAct = discoveredCharacteristicAct; + this.disconnectedAct = disconnectedAct; + } + } + +} +#endif \ No newline at end of file diff --git a/Assets/Plugins/x86_64/Data/BleDiscoverEvents.cs.meta b/Assets/Plugins/x86_64/Data/BleDiscoverEvents.cs.meta new file mode 100644 index 0000000..eb785ec --- /dev/null +++ b/Assets/Plugins/x86_64/Data/BleDiscoverEvents.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 684392ae12473bc4988312eb79c2cdfd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/x86_64/DeviceAddressDatabase.cs b/Assets/Plugins/x86_64/DeviceAddressDatabase.cs new file mode 100644 index 0000000..e4ec414 --- /dev/null +++ b/Assets/Plugins/x86_64/DeviceAddressDatabase.cs @@ -0,0 +1,89 @@ + +#if UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN + +using System.Collections; +using System.Collections.Generic; +using System.Text; +using UnityEngine; + +namespace toio.Windows +{ + public class DeviceAddressDatabase + { + private static readonly char[] Digit = new char[] { + '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F' + }; + private static StringBuilder stringBuffer; + private static Dictionary addrDictByStr; + private static Dictionary strDictByAddr; + + static DeviceAddressDatabase() + { + addrDictByStr = new Dictionary(); + strDictByAddr = new Dictionary(); + } + + public static string GetAddressStr(ulong addr) + { + string str; + if (strDictByAddr.TryGetValue(addr, out str)) + { + return str; + } + str = ConvertToString(addr); + addrDictByStr.Add(str, addr); + strDictByAddr.Add(addr, str); + return str; + } + public static ulong GetAddressValue(string str) + { + ulong addr; + if(addrDictByStr.TryGetValue(str,out addr)){ + return addr; + } + addr = ConvertFromString(str); + addrDictByStr.Add(str, addr); + strDictByAddr.Add(addr, str); + return addr; + } + private static string ConvertToString(ulong addr) + { + if(stringBuffer == null) + { + stringBuffer = new StringBuilder(16); + } + stringBuffer.Clear(); + for (int i = 0; i < 16; ++i) + { + int bitShift = (15 - i) * 4; + int val = (int)((addr & (0x0fUL << bitShift)) >> bitShift); + stringBuffer.Append(Digit[val]); + } + return stringBuffer.ToString(); + } + private static ulong ConvertFromString(string str) + { + int max = str.Length; + if( max > 16) { max = 16; } + ulong addr = 0; + for (int i = 0; i < max; ++i) + { + int bitShift = ((max-1) - i) * 4; + int val = 0; + char ch = str[i]; + if( ch >= 'A') + { + val = (ch - 'A') + 10; + } + else + { + val = ch - '0'; + } + addr |= (ulong)val << bitShift; + } + return addr; + } + } +} + +#endif \ No newline at end of file diff --git a/Assets/Plugins/x86_64/DeviceAddressDatabase.cs.meta b/Assets/Plugins/x86_64/DeviceAddressDatabase.cs.meta new file mode 100644 index 0000000..c40a79b --- /dev/null +++ b/Assets/Plugins/x86_64/DeviceAddressDatabase.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 727097f0dcb494c489122f6ded6933d0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/x86_64/DllInterface.cs b/Assets/Plugins/x86_64/DllInterface.cs new file mode 100644 index 0000000..f58e230 --- /dev/null +++ b/Assets/Plugins/x86_64/DllInterface.cs @@ -0,0 +1,417 @@ +using System.Collections; +using System.Collections.Generic; +using System.Runtime.InteropServices; +using System; + + +#if UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN +namespace toio.Windows +{ + public struct UuidHandler + { + public IntPtr ptr; + public UuidHandler(IntPtr p) + { + ptr = p; + } + } + public struct BleDeviceHandler + { + public IntPtr ptr; + public BleDeviceHandler(IntPtr p) + { + ptr = p; + } + } + public struct ReadRequestHandler + { + public IntPtr ptr; + public ReadRequestHandler(IntPtr p) + { + ptr = p; + } + } + public struct WriteRequestHandler + { + public IntPtr ptr; + public WriteRequestHandler(IntPtr p) + { + ptr = p; + } + } + public struct UuidData + { + public uint data1; + public uint data2; + public uint data3; + public uint data4; + + public override string ToString() + { + return string.Format("{0:X8}-{1:X4}-{2:X4}-{3:X4}-{4:X4}{5:X8}", data1, + (data2>>16) &0xffff, + (data2 & 0xffff), + (data3 >> 16) & 0xffff, + (data3 & 0xffff),data4 ); + } + } + internal unsafe struct UuidBuffer + { + public fixed uint fixedBuffer[4]; + } + internal unsafe struct CharastricsBuffer + { + public const int BufferSize = 22; + public fixed byte fixedBuffer[BufferSize]; + } + + public class DllInterface + { + + const string pluginName = "BlePluginWinows"; + + [DllImport(pluginName)] + private static extern void _BlePluginFinalize(); + public static void FinalizePlugin() + { + _BlePluginFinalize(); + } + + + [DllImport(pluginName)] + private static extern IntPtr _BlePluginGetOrCreateUuidObject(uint d1, uint d2, uint d3, uint d4); + public static UuidHandler GetOrCreateUuidObject(uint d1, uint d2, uint d3, uint d4) + { + var ptr = _BlePluginGetOrCreateUuidObject(d1, d2, d3, d4); + return new UuidHandler(ptr); + } + + + [DllImport(pluginName)] + private static extern void _BlePluginConvertUuidUint128(IntPtr ptr,IntPtr outData); + public static unsafe UuidData ConvertUuidData(UuidHandler handler) + { + UuidData data = new UuidData(); + UuidBuffer uuidBuffer = new UuidBuffer(); + void* ptr = &uuidBuffer.fixedBuffer[0]; + _BlePluginConvertUuidUint128(handler.ptr, new IntPtr(ptr)); + + data.data1 = uuidBuffer.fixedBuffer[0]; + data.data2 = uuidBuffer.fixedBuffer[1]; + data.data3 = uuidBuffer.fixedBuffer[2]; + data.data4 = uuidBuffer.fixedBuffer[3]; + return data; + } + + [DllImport(pluginName)] + private static extern void _BlePluginUpdateWatcher(); + [DllImport(pluginName)] + private static extern void _BlePluginUpdateDevicdeManger(); + + public static void UpdateFromMainThread() + { + _BlePluginUpdateWatcher(); + _BlePluginUpdateDevicdeManger(); + } + + [DllImport(pluginName)] + public static extern void _BlePluginAddScanServiceUuid(IntPtr ptr); + public static void AddScanServiceUuid(UuidHandler uuid) + { + _BlePluginAddScanServiceUuid(uuid.ptr); + } + + [DllImport(pluginName)] + private static extern void _BlePluginStartScan(); + public static void StartScan() + { + _BlePluginStartScan(); + } + + [DllImport(pluginName)] + private static extern void _BlePluginStopScan(); + public static void StopScan() + { + _BlePluginStopScan(); + } + + [DllImport(pluginName)] + private static extern void _BlePluginClearScanFilter(); + public static void ClearScanFilter() + { + _BlePluginClearScanFilter(); + } + + // Scan Data + [DllImport(pluginName)] + private static extern int _BlePluginScanGetDeviceLength(); + public static int ScanGetDeviceLength() + { + return _BlePluginScanGetDeviceLength(); + } + + [DllImport(pluginName)] + private static extern ulong _BlePluginScanGetDeviceAddr(int idx); + public static ulong ScanGetDeviceAddr(int idx) + { + return _BlePluginScanGetDeviceAddr(idx); + } + + [DllImport(pluginName)] + private static extern string _BlePluginScanGetDeviceName(int idx); + public static string ScanGetDeviceName(int idx) + { + return _BlePluginScanGetDeviceName(idx); + } + [DllImport(pluginName)] + private static extern int _BlePluginScanGetDeviceRssi(int idx); + public static int ScanGetDeviceRssi(int idx) + { + return _BlePluginScanGetDeviceRssi(idx); + } + + // Connect Dissconnect + [DllImport(pluginName)] + private static extern IntPtr _BlePluginConnectDevice(ulong addr); + public static void ConnectDevice(ulong addr) + { + _BlePluginConnectDevice(addr); + } + + [DllImport(pluginName)] + private static extern void _BlePluginDisconnectDevice(ulong addr); + public static void DisconnectDevice(ulong addr) + { + _BlePluginDisconnectDevice(addr); + } + [DllImport(pluginName)] + private static extern void _BlePluginDisconnectAllDevice(); + public static void DisconnectAllDevice() + { + _BlePluginDisconnectAllDevice(); + } + + [DllImport(pluginName)] + private static extern bool _BlePluginIsDeviceConnectedByAddr(ulong addr); + public static bool IsDeviceConnected(ulong addr) + { + return _BlePluginIsDeviceConnectedByAddr(addr); + } + + [DllImport(pluginName)] + private static extern bool _BlePluginIsDeviceConnected(IntPtr devicePtr); + public static bool IsDeviceConnected(BleDeviceHandler handle) + { + return _BlePluginIsDeviceConnected(handle.ptr); + } + [DllImport(pluginName)] + private static extern ulong _BlePluginDeviceGetAddr(IntPtr devicePtr); + public ulong GetDeviceAddr(BleDeviceHandler handle) { + return _BlePluginDeviceGetAddr(handle.ptr); + } + + // GetDevice + [DllImport(pluginName)] + private static extern int _BlePluginGetConectDeviceNum(); + public static int GetConnectDeviceNum() + { + return _BlePluginGetConectDeviceNum(); + } + + [DllImport(pluginName)] + private static extern ulong _BlePluginGetConectDevicAddr(int idx); + public static ulong GetConnectDeviceAddr(int idx) + { + return _BlePluginGetConectDevicAddr(idx); + } + + [DllImport(pluginName)] + private static extern IntPtr _BlePluginGetConnectDevicePtr(int idx); + public static BleDeviceHandler GetConnectDevicePtr(int idx) + { + var ptr = _BlePluginGetConnectDevicePtr(idx); + var handle =new BleDeviceHandler(ptr); + return handle; + } + + [DllImport(pluginName)] + private static extern IntPtr _BlePluginGetDevicePtrByAddr(ulong addr); + public static BleDeviceHandler GetDeviceHandleByAddr(ulong addr) + { + var ptr = _BlePluginGetDevicePtrByAddr(addr); + var handle = new BleDeviceHandler(ptr); + return handle; + } + + [DllImport(pluginName)] + private static extern int _BlePluginDeviceCharastricsNum(IntPtr devicePtr); + public static int GetDeviceCharastricsNum(BleDeviceHandler handle) + { + return _BlePluginDeviceCharastricsNum(handle.ptr); + } + + [DllImport(pluginName)] + private static extern IntPtr _BlePluginDeviceCharastricUuid(IntPtr devicePtr, int idx); + public static UuidHandler GetDeviceCharastricUuid(BleDeviceHandler handle,int idx) + { + var ptr = _BlePluginDeviceCharastricUuid(handle.ptr, idx); + var uuid = new UuidHandler(ptr); + return uuid; + } + + [DllImport(pluginName)] + private static extern IntPtr _BlePluginDeviceCharastricServiceUuid(IntPtr devicePtr, int idx); + public static UuidHandler GetDeviceCharastricServiceUuid(BleDeviceHandler handle,int idx) + { + var ptr = _BlePluginDeviceCharastricServiceUuid(handle.ptr, idx); + var uuid = new UuidHandler(ptr); + return uuid; + + } + + + // Read/Write Request + [DllImport(pluginName)] + private static extern IntPtr _BlePluginReadCharacteristicRequest(ulong addr, IntPtr serviceUuid, IntPtr charaUuid); + public static ReadRequestHandler ReadCharastristicRequest(ulong addr,UuidHandler serviceUuid,UuidHandler charaUuid) + { + var ptr = _BlePluginReadCharacteristicRequest(addr, serviceUuid.ptr, charaUuid.ptr); + var handle = new ReadRequestHandler(ptr); + return handle; + } + [DllImport(pluginName)] + private static extern IntPtr _BlePluginWriteCharacteristicRequest(ulong addr, IntPtr serviceUuid, IntPtr charaUuid, IntPtr data, int size); + public static unsafe WriteRequestHandler WriteCharastristicRequest(ulong addr,UuidHandler serviceUuid,UuidHandler charaUuid, byte[] data, int idx,int size) + { + IntPtr resultPtr; + fixed (void* ptr = &data[idx]) + { + var dataPtr = new IntPtr(ptr); + resultPtr = _BlePluginWriteCharacteristicRequest(addr, serviceUuid.ptr, charaUuid.ptr, dataPtr, size); + } + var handle = new WriteRequestHandler(resultPtr); + return handle; + } + public static WriteRequestHandler WriteCharastristicRequest(ulong addr, UuidHandler serviceUuid, UuidHandler charaUuid, byte[] data) + { + return WriteCharastristicRequest(addr, serviceUuid, charaUuid, data, 0, data.Length); + } + + [DllImport(pluginName)] + private static extern bool _BlePluginIsReadRequestComplete(IntPtr ptr); + public static bool IsReadRequestComplete(ReadRequestHandler handle) + { + return _BlePluginIsReadRequestComplete(handle.ptr); + } + + [DllImport(pluginName)] + private static extern bool _BlePluginIsReadRequestError(IntPtr ptr); + public static bool IsReadRequestError(ReadRequestHandler handle) + { + return _BlePluginIsReadRequestError(handle.ptr); + } + + [DllImport(pluginName)] + private static extern int _BlePluginCopyReadRequestData(IntPtr ptr, IntPtr data, int maxSize); + public static unsafe byte[] GetReadRequestData(ReadRequestHandler handle,int maxSize) + { + byte[] retData = null; + var buffer = new CharastricsBuffer(); + void* ptr = &buffer.fixedBuffer[0]; + var writePtr = new IntPtr(ptr); + + int size = _BlePluginCopyReadRequestData(handle.ptr, writePtr, + CharastricsBuffer.BufferSize); + + retData = new byte[size]; + for(int i = 0; i < size; ++i) + { + retData[i] = buffer.fixedBuffer[i]; + } + return retData; + } + + [DllImport(pluginName)] + private static extern void _BlePluginReleaseReadRequest(ulong deviceaddr, IntPtr ptr); + public static void ReleaseReadRequest(ulong deviceAddr,ReadRequestHandler handle) + { + _BlePluginReleaseReadRequest(deviceAddr, handle.ptr); + } + + [DllImport(pluginName)] + private static extern bool _BlePluginIsWriteRequestComplete(IntPtr ptr); + public static bool IsWriteRequestComplete(WriteRequestHandler handle) + { + return _BlePluginIsWriteRequestComplete(handle.ptr); + } + + [DllImport(pluginName)] + private static extern bool _BlePluginIsWriteRequestError(IntPtr ptr); + public static bool IsWriteRequestError(WriteRequestHandler handle) + { + return _BlePluginIsWriteRequestError(handle.ptr); + } + + [DllImport(pluginName)] + private static extern void _BlePluginReleaseWriteRequest(ulong deviceaddr, IntPtr ptr); + + public static void ReleaseWriteRequest(ulong deviceAddr, WriteRequestHandler handle) + { + _BlePluginReleaseWriteRequest(deviceAddr, handle.ptr); + } + + // Notificate + [DllImport(pluginName)] + private static extern void _BlePluginSetNotificateRequest(ulong addr, IntPtr serviceUuid, IntPtr charaUuid, bool enable); + public static void SetNotificationRequest(ulong addr,UuidHandler serviceUuid,UuidHandler charaUuid,bool flag) + { + _BlePluginSetNotificateRequest(addr, serviceUuid.ptr, charaUuid.ptr, flag); + } + + + [DllImport(pluginName)] + private static extern int _BlePluginGetDeviceNotificateNum(ulong addr); + public static int GetDeviceNotificateNum(ulong addr) + { + return _BlePluginGetDeviceNotificateNum(addr); + } + + [DllImport(pluginName)] + private static extern int _BlePluginCopyDeviceNotificateData(ulong addr, int idx, IntPtr ptr, int maxSize); + + public static unsafe byte[] GetDeviceNotificateData(ulong addr, int idx) + { + byte[] retData = null; + var buffer = new CharastricsBuffer(); + void* ptr = &buffer.fixedBuffer[0]; + var writePtr = new IntPtr(ptr); + int size =_BlePluginCopyDeviceNotificateData(addr, idx, writePtr, CharastricsBuffer.BufferSize); + retData = new byte[size]; + for(int i = 0; i< size; ++i) + { + retData[i] = buffer.fixedBuffer[i]; + } + + return retData; + } + + [DllImport(pluginName)] + private static extern IntPtr _BlePluginGetDeviceNotificateServiceUuid(ulong addr, int idx); + public static UuidHandler GetDeviceNotificateServiceUuid(ulong addr,int idx) + { + var ptr = _BlePluginGetDeviceNotificateServiceUuid(addr,idx); + return new UuidHandler(ptr); + } + + [DllImport(pluginName)] + private static extern IntPtr _BlePluginGetDeviceNotificateCharastricsUuid(ulong addr, int idx); + public static UuidHandler GetDeviceNotificateCharastricsUuid(ulong addr, int idx) + { + var ptr = _BlePluginGetDeviceNotificateCharastricsUuid(addr, idx); + return new UuidHandler(ptr); + } + + + } +} +#endif \ No newline at end of file diff --git a/Assets/Plugins/x86_64/DllInterface.cs.meta b/Assets/Plugins/x86_64/DllInterface.cs.meta new file mode 100644 index 0000000..515aef1 --- /dev/null +++ b/Assets/Plugins/x86_64/DllInterface.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5337fff6ced611a469a4b48bb061c99c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/x86_64/UuidDatabase.cs b/Assets/Plugins/x86_64/UuidDatabase.cs new file mode 100644 index 0000000..1c5c327 --- /dev/null +++ b/Assets/Plugins/x86_64/UuidDatabase.cs @@ -0,0 +1,99 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +#if UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN +namespace toio.Windows +{ + public class UuidDatabase + { + private static Dictionary uuidDictByStr; + private static Dictionary uuidDictByHandle; + + static UuidDatabase() + { + uuidDictByStr = new Dictionary(); + uuidDictByHandle = new Dictionary(); + } + + public static UuidHandler GetUuid(string str) + { + uint d1, d2, d3, d4; + str = str.ToUpper(); + var handle = new UuidHandler(); + if(uuidDictByStr.TryGetValue(str,out handle)) + { + return handle; + } + ParseUuid(str, out d1, out d2, out d3, out d4); + handle = DllInterface.GetOrCreateUuidObject(d1, d2, d3, d4); + uuidDictByStr.Add(str, handle); + uuidDictByHandle.Add(handle,str); + return handle; + } + + public static string GetUuidStr(UuidHandler handle) + { + string str; + if (uuidDictByHandle.TryGetValue(handle, out str)) + { + return str; + } + var data = DllInterface.ConvertUuidData(handle); + str = data.ToString(); + uuidDictByStr.Add(str, handle); + uuidDictByHandle.Add(handle, str); + return str; + + } + + private static void ParseUuid(string str, + out uint d1, out uint d2, out uint d3, out uint d4) + { + d1 = d2 = d3 = d4 = 0; + int idx = 0; + idx = GetUintFromString(str, idx, out d1); + idx = GetUintFromString(str, idx, out d2); + idx = GetUintFromString(str, idx, out d3); + idx = GetUintFromString(str, idx, out d4); + } + + private static int GetUintFromString(string str, int idx, out uint data) + { + data = 0; + int length = str.Length; + int currentExecChar = 0; + for (; idx < length; ++idx) + { + char ch = str[idx]; + int val = 0; + if ('0' <= ch && ch <= '9') + { + val = ch - '0'; + } + else if ('A' <= ch && ch <= 'F') + { + val = (ch - 'A') + 10; + } + else if ('a' <= ch && ch <= 'f') + { + val = (ch - 'a') + 10; + } + else + { + continue; + } + data = data << 4; + data |= (uint)val; + + ++currentExecChar; + if (currentExecChar >= 8) + { + break; + } + } + return idx + 1; + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Plugins/x86_64/UuidDatabase.cs.meta b/Assets/Plugins/x86_64/UuidDatabase.cs.meta new file mode 100644 index 0000000..aa6c96d --- /dev/null +++ b/Assets/Plugins/x86_64/UuidDatabase.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: db5219d5a289ca54e9c696b60e1932b6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/x86_64/bleplugin-x86_64.asmdef b/Assets/Plugins/x86_64/bleplugin-x86_64.asmdef new file mode 100644 index 0000000..94a8c27 --- /dev/null +++ b/Assets/Plugins/x86_64/bleplugin-x86_64.asmdef @@ -0,0 +1,16 @@ +{ + "name": "bleplugin-x86_64", + "references": [], + "includePlatforms": [ + "Editor", + "WindowsStandalone64" + ], + "excludePlatforms": [], + "allowUnsafeCode": true, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Assets/Plugins/x86_64/bleplugin-x86_64.asmdef.meta b/Assets/Plugins/x86_64/bleplugin-x86_64.asmdef.meta new file mode 100644 index 0000000..602c763 --- /dev/null +++ b/Assets/Plugins/x86_64/bleplugin-x86_64.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 37c867e08014dc241a81d134efb0e6ef +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/bleplugin_projects/Windows/BlePluginWin/BleDeviceObject.cpp b/bleplugin_projects/Windows/BlePluginWin/BleDeviceObject.cpp index c9ae717..33db468 100644 --- a/bleplugin_projects/Windows/BlePluginWin/BleDeviceObject.cpp +++ b/bleplugin_projects/Windows/BlePluginWin/BleDeviceObject.cpp @@ -31,7 +31,6 @@ void BleDeviceObject::Disconnect() { m_device.Close(); m_device = WinRtBleDevice(nullptr); - OnDisconnect(); } void BleDeviceObject::Update() { @@ -242,4 +241,4 @@ void BleDeviceObject::OnDisconnect() { m_NotificateBuffer.clear(); m_NotificateResult.clear(); -} \ No newline at end of file +} diff --git a/bleplugin_projects/Windows/copyDllToProjectPlugin.bat b/bleplugin_projects/Windows/copyDllToProjectPlugin.bat new file mode 100644 index 0000000..f0194fd --- /dev/null +++ b/bleplugin_projects/Windows/copyDllToProjectPlugin.bat @@ -0,0 +1,3 @@ +chdir %~dp0 +copy x64\Release\BlePluginWinows.dll ..\..\Assets\Plugins\x86_64\ +pause; \ No newline at end of file From 6b875cf23cc0bca83f59169fcb3adee12af5a264 Mon Sep 17 00:00:00 2001 From: Yusuke Kurokawa Date: Wed, 6 Oct 2021 01:21:28 +0900 Subject: [PATCH 07/11] fix the crash at disconnect --- Assets/Plugins/x86_64/BlePluginWinows.dll | Bin 345088 -> 345088 bytes .../Windows/BlePluginWin/BleDeviceObject.cpp | 16 +++++++++------- .../Windows/BlePluginWin/BleDeviceObject.h | 6 +++--- .../Windows/BlePluginWin/bleTestConsole.cpp | 8 +++++--- 4 files changed, 17 insertions(+), 13 deletions(-) diff --git a/Assets/Plugins/x86_64/BlePluginWinows.dll b/Assets/Plugins/x86_64/BlePluginWinows.dll index 5bafd4851269d0e8dde2480654036d20f76b440d..d484976fa0742e6f08011dde5b794654fae14f2e 100644 GIT binary patch delta 13520 zcmeHti(gg67XQpXbCCB#c|Q+ufCC~NgcL;$%*P=gVWOg;VrilIKm{ce!F+*;qFWt& zWT<3VsOZrSr52`Mv1^HCSM91{nH`_ey{4ECe&0D~qvY@RAN;N#*L>HkS+i!%nwhot zo?Sn&Sb4CnhLz>LaBPDWb;RBjXit>CdlH@0?t%fp>$+EjcF#SpH zhVqh}fpU;M&mma)qe6b)K|?#pUqJMs+~g1(>d9EeKK8%p|VHSyo2)Cr-Xw81?8HHpY~9s5Lm1|NvIE)U`o{7<$ul)RKg}$TPLx@&@OQbb?&toIrcYSDdwU zu59BHK|hdVP)5ijT|xp`OKWSnh?O0J$<2S>7XzzfY}A;7Q>?t+Wiah2|Kg&hd9tl* z2z^!V>^h7Rxxn>BS}z}VEuhooB)8JYYhi?xi@7|`29vtzMUrcqT6)^N<fej|LzvR7QaD=tm&vpEQhlO;Q=ricnX-Ppk9&dL|yr3Saiz(_db-fJ4QLZ zN*PHlJ=yBIq&~l!>^j~($y-E7WB%%HTl5eey%@H629{*eF~d>Vufi0CIoQ$}%A7tV zjF=z2Cg17!C5@MNcM7F0@^_u|?q3g)$l%g}wy9-9ZHII|ky?7rY?3|Q6X{U-755$; zY8PV%n)}GB+>>m+n~AlbEH}D)*&KhOBIfh*ZFg1kpcG+@DV-LU&242znY3?+sZ z_@O&$wzKr-e>|Prb-zi3w9QkvSDI>TSaQ;3$=C82j}Tfe7kK#4l`{8;dhy{@SYCLn z96R8(qc@vwUcPxT{=4{-=Ac3F$vQFf_nlM(lg(*uZ7ppSVbPm&F<7asxnPZ_hTf8c zJ$?N*3|En|K^k*ej&QX_?9IhQoP;vWPre@QQGDMr`r|45fW>5Y={a zl~;CP&hN0c=v`ZkILJ0vZO%gdbDRd4`lore9OZpK`sT+t^YOhsoC6i7x8(P)BgU5Dll85-j6@H4!^%3v~ElxXyR@snqgUkB=^m%7txXh_b z3)ZMKP(?7^C2v77zSU4ta33o7k+wd1sDiB_=gfnk(Yu+lBKTZ3B*+|!x}vkFO(()? zr8ojs45fMZ4JCQ*s$wS%OS3~>BJ$w^;AN@;smv=wDzS-ci_k|i%kts_GOc-sC zXe)E71DHFzh>`E7mUb|dx}x0+Q!12q`}zk?5n4;`SMsw2h(QJ62MAIJ{?W1|u?`brv+H_hV6X`LmT{NTpeWcS5EYb9k zv;DjGI^H6@dm7E%s6LJ6UeQ+Ov>af5?AR8~r@?$r{&@`d+G?;U5{4JQ(ljQ5Z z!6Wnq#8;xwOFfMt@kM8lVs$kjXPjoM7SSPPw4|g>1a*- zJwwuHUG7l1EI=b3q5)p|{5jTCwdcAx07r2m#_RG97)oEkbL(Vog0QH;Lt}6mo=?~& zSuzdu4(x7y0A!0k$gRn)V$&%ZPM#A0=4ez z%&o193YutMPea)#Tg$_dCmAy0}^rqZXqosZ1@tP2S zKNvEU#Ge?LEuNM)C%3JF*-U?v-`9lGIQf`H>%IS)Wjs|LjGZT5~7g{Lo^6YWynj^O}-kU zLsoVQ^`gacSZF*B`{>Z9AfKzPt*NC0GLZ3GQcDER*CvzPDPrl8%@5^mp&?W+9}m^h zJ@TE9TzCcf|7c3m#refpv^w())G^g& zG1cvI&+tH}e(+a}*-M~2B0NZ593D>JlRpWMp-1H(!*_e;dJ&Sc=(oohv%xxMgPAnR zTOu^{vixO43LXqpCtfYWb%VMM>L|Pzi>IFTjiSNq^OM-&C$Pg8=v98BVAzdIrt_#Ij!Ic1;13#Bwy3TQZLyvaui}WJ+eE!FYkyPM*GVxky=_L2SmLV zuDt{s$&2sh>4)Hi%>Uuku|(%dR5z5f$2)s89ita`W z<@cg{OuX`=7`bdnqxl>-L)ie=w(&ZQ6ia(7EoFSlxRlKC<6awk6zOc?b!6DPDb_7n zh1rPAzFEu)xK`A~Lm!Dq)0Tr=xE$2w%`RRrZ+%IfIfCG2ror;Mi-)^2LYi8VVw-Xz zMZEap9IFq?`?|b956I>&@pPf=AJZj4P8Um=sm+E*$>YVFQ;G-~u!n+i3Pu90`H(x^ zqdtW*bxPthBwfb4_|v>_=RBrsNp_d>t{Y0nYYZjhp*lAieByJuUp=Rr2wmvS&46y2 z&<%14N=C5Sa?YA(`i>UkY3PsU=jbnRJ&?wP#8Tlyh zM>CwLkguoDk(?Tg6Gk*r z+F9;8DxQ91d~?(~MrX>8UW=!_Wqsxa`ipEoHjeH!_8L2q(lJJP+zd)@$f~RjG}-um zRyRshjb|r(A<-X=^27|4M0Xo+zvWJ)hewU7$*Gi9%0s5Cl^m+&U#6_VA)oX1dsJ(D z@b-Ttd9Ar|W3GDLVl_{0+8&GVPuHp;bd)@<>Ke_F`+vykdHK?Zne<(`=Z;sY&RDj? zU80?g+p2e|soI#fdyty?7&jXORnlKS8xMV2?hBnEXP$WCc`(=fi<9W7p6aPw0LukI~S2dkO=>?wI zfmTz!No`C01F38Z38(Ars6YQKmL8DqyvcL)G=_SbKG4(n4s<#HzB@X4|cLa4%(I0qG2KAu_`Nj;Yq1*UD0Soy>0a>QU8FaZXbutyt zrXw8bT+`)3y2pl|;47EX|Io91;WDcAck!^!Ezvys0uBeln`REuTBeq6I*XH5N8&|)WAZu({e9WBvrrijgS zoD)4~TDp^NP|6qi5bz?OBfyPU3HXJ7C*Z*PT6#({oB6l32yz{NTuWnVv8l^m zx*%4%e%Q3DiKca+-Azw^qcf=V`!3Ur>vW)vU*K*DA;GmsD!vIZMQ}j}pNL&tWjgaa ztqP{UndZ1j{p{&H(?LIpQmJJ=|H5C2p$+`DzjP6E`Z_@JqpM8U0;J;-ma#@7y={*< zdUuxoLto_%(UPBZXPQYDEqzG?@+OPna0OuYidRCKXx?088PLtdVx)z%$GNxKbl!=3 zs`F%lMQ8Suwzjd)+J3gSjWT@^E5XCf{D>YNCGtxG{7nz^lD|X;a?g0lOvmxoc1Lp+LOPOqROLdO`oNx26`9f9%snAgv@EMVzz=~6dbBxF9o9&^i_~4*mAxOBGzN z;KvFcQt)d9uPOLQL04trLKN(3LB4Vav!9%<$X-`)sxtXvrCz0Ay@KZzyrJL|1v@JJ zLKI9?aDaki_^?b>P+`|2)~Q-H5{kxpYkj|h>%aVa`}F7ZvlP9-3bxsKr1ZO^$R(wp zy;5(swigm_MKC~7$WZXIV&LWH9PoVJ0i}K3b9$AE-B}7QRj|#$Z!P+TgmhIpdbb%+ z(ENpU<~!QtO3z-3p^)bcEu$zKa3LaDNX9e2~ ztyK)~H^q%povul#3?)V4HML2>W(CuI(_ z)4a?HVoZEal3pr8&c4pb*}>MywzWC04)!utIGc^S>F_^hvZ!mj3Z3%L8Sw@xG9+(8sv%3p=!z^s$jqjh zudq?H!){XVJixVypH5?k)viH=jO43_F+UFri)!{;j08j9+H_Oo`jfW6q|DBUzm9>-G|{ z?`os>VU)1GggD{>QnQqiti32CPvYZZLtG|05|;!A;xfx2N3@?3?Po-LI&t%|C0^bt!k4$-?Y4%OHqE5zBkdWL=%Jz`lwJ>L!E9;qzv) zSM3i8o#QCZ@PEx@1MD4(QTIUM&%Mf*>VKkmSi(ExvPgT) zatO}MVJ;r;2(WiiLb>E{k!l20KekU@w@%{Ht8n)#0kp2|%CQ%Xw=q3$}MH zg1Tn`)U*wAjv-Q5Fzz8 zQ^){mGa)|qjGN{#C!76f%leFeJ%@#dGztD!q1=bKwR55cA{{Mbqyz6b7aJiRtZpod zY(9N13$ZBzo3(_m2X9|3+V-M2#J`%$X4z<0q77@5&jRfY;B~`LjN-57vvB)-QD2Cn zjIYUOpWF9Zg?fJ!X?)~6EXF=p)C*7)^Of(gaGNTySv&dX?;x0GMcXA5zwkSvZd;DJ z8wxKTG7t4$qAr%UKOZ>{er1dLOcbm6d-K>7`-^Suzw&$Y*qEr~)rx*97?w-AVd>rM zt*1{cM3!iui~@(@T{hIaPSlT}I02HJhmOMH4JG3wo;8KJJ6sj5V)WaqdF#8(C&qRS z1a2t2L6W04?!mKc^rWA35o^&d)Os{$y}$>|M|d(tpGhd*=5yvFe2YcB428_MpdM2r z>IYC91WC?EgbP}jbhD$xuCH|uGzy&yD4O^U^y%6n>QrXL79`nM6jG8b-H?cz3qum= zKwP?7lZXb*x=0i+@SX(-XS%45MKPIAFJMFMYeZdai39u}1uWd*qNx9h;t!eMFJN(= z-fNY^9|oo`2=SD<@IDJzSDP$UvnKI5;O#5G>$alU#rG{>-R#e|)vxgXEMRl&Gw>Uv zZUTyFd{!aaD@1)O3g{QIarR_A>UJnxxo;8MXKE~B6K&nDZn5U)T2~cua8r@1rv4>t zIJH?^iHuXiw=8Edfr58)WW+JSmN>p@Yt5aI8Gb-6O(0_kFISIUCAx^IOz07WQB za$Yz=MeqY|hBO}u#;0AhdkMY%C`$O4QnBeoeWsBtB~ehA0ASTY_RE z-?9P=wO`Z^Tk7AfVEa@>+Zq4Bg?ZRj;?davD&}$PS*O){#+zIik*H$UoT+3lRaR=kEq3F2dX~(JM@T>yzRe^t# zpAzyG$baty`A0(k%zEa|yR2rhs*H~qeURmdwKx48dIeoDw&Ah)>x@l*Zi zwUB3gthoP7zCy_BAh)>xOnytqy+2VFF7Xpanx6$dZ5>Nc6}2^1qOk$gwpdt?L|ldN9PlGLud7-;pUbB(e@v;gQ#BZ$^o@_u6%zG?NX?-xKv<*z_(YV+8&WXb-vXbIf%4X&- z)mT(}RWMsshPB(p4e+cU&Np(qjjU8%YnfN@CMa8nJhc(CO}6+eoK$J{F&=~ir#^3S z+%laOjA)IJD!JK0^xilAp` zXD{$8Mk=9~(N3=~WVO(1w#x9uhJRBbG(fSTo#GnEG?00>lO2LAM-0+Vb{Vot$i#<4 z+rOm^;B!=@v7IwtL#E4BAuT`CJKHb(1}C(|I>BO^=jtj#FH~ruAhF&68kt+ zZDSA< zeSyrh;T{|4NjICWII25PpESsO&81`?sCEe>$AI@hYdLjRkH^nE6P(qdbU$C>tR6@+ z_&3h#SZd233*lNG?4tJasa%GOvSLbT2_xYVHcrwtBjIu zD=E1Pz6#g`5y>w<@%8>ZT6$DMmNf!ip@OmeN zQ_p?e)uB#eq0Qe@a`*>I9C@lcto7nc+|`R{4!83Fxbrd(*sj5i$JO5`dD)Ch0Pur> zt~bP-PkO*wG=Bgs>F!D%=&26DB~Q54j4$=_R!R(b;ni{{FLi93@U}=Lkx@({8MsHu05*ZraCIT@ zk{Y*9<=}x?xS^=x)4Z@H%lT?AOstlF>TUlY|fjd#k5K?MY8@wU2tZ(_IXl943)TAPt}7qkbDlx0meV`$6AVW-fxgZz6WLV>kx${tiw!)Nksgec0Tw+0`Z69 z`T}Obkr@&$Y2yOWyAjRjGbOTPtVHVggaFvBf`rbOPr&z#=;aR5$%fe#Br|6-mOh}c#`p?(_N1J!|V0v?!&?ZL00*{K1d zoLmV%HX{5yB}hFm4Bu&_HXmVnMLEV_dS z1fD!Dk%_Q>>bS(0Y1O0SD$ybPq(s((GQrmYLvT$$5xf?-0VEvS47>nZ%iY4%tB}>V zhGB0XgO=_05=jLKt--*@pi}$|ntfe2W9R&UGyE@!B+P}!z`3C2OxOpa|W8BQ8lKnokQ?dxiHy_m(RXvHJxXEFTXTVANF{Qplr$*M5~q%Vz#@xH`n= zB4iiM*gZEeI{3}N^qV5f{u++WiF?NgfIsgNftP|qJP)-(-TO#Ie@f&FkeGWtaPU23 zZ^#8+0;Pd(0-kz^fPxqJ?IY|l@QuLhkFESIU}mdCY`5Ux00$BknGYQUu(L`-q~JdN!|iyfwFjk4v(_Me3uS;tr`Y$@z*H+ z&MM@bGdets#RaXnn2mK;kw@SK4gqO+Sfn~MPX7Uh^ucJpa0Q_hcm#j0oDBIf;0634 zcs}@xz*#{ma@ZES^IPkJ4 zOgx((j>5zfFtfWas7OdRM3G++qB8m2sK(^p3fnhHp#t29jx-}GmUx;u4BM*oH5R7Bi(H=26r)h9ar EAHztOF#rGn delta 13282 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 R6EtM;WQ1eyV^)rL`akY{alQZm diff --git a/bleplugin_projects/Windows/BlePluginWin/BleDeviceObject.cpp b/bleplugin_projects/Windows/BlePluginWin/BleDeviceObject.cpp index 33db468..49e2ca9 100644 --- a/bleplugin_projects/Windows/BlePluginWin/BleDeviceObject.cpp +++ b/bleplugin_projects/Windows/BlePluginWin/BleDeviceObject.cpp @@ -28,9 +28,10 @@ void BleDeviceObject::Disconnect() { for (auto it = m_services.begin(); it != m_services.end(); ++it) { it->Close(); } - m_device.Close(); - - m_device = WinRtBleDevice(nullptr); + if (m_device != nullptr) { + m_device.Close(); + } + this->ClearDeviceInfo(); } void BleDeviceObject::Update() { @@ -225,11 +226,11 @@ void BleDeviceObject::UpdateDisconectCheck() { return; } if( this->m_device.ConnectionStatus() != WinRtBleConnectStatus::Connected){ - OnDisconnect(); - } + ClearDeviceInfo(); + this->m_connectState = EConnectState::None; + } } -void BleDeviceObject::OnDisconnect() { - this->m_connectState = EConnectState::None; +void BleDeviceObject::ClearDeviceInfo() { m_services.clear(); m_charastrictics.clear(); @@ -241,4 +242,5 @@ void BleDeviceObject::OnDisconnect() { m_NotificateBuffer.clear(); m_NotificateResult.clear(); + m_device = WinRtBleDevice(nullptr); } diff --git a/bleplugin_projects/Windows/BlePluginWin/BleDeviceObject.h b/bleplugin_projects/Windows/BlePluginWin/BleDeviceObject.h index c270b53..3560789 100644 --- a/bleplugin_projects/Windows/BlePluginWin/BleDeviceObject.h +++ b/bleplugin_projects/Windows/BlePluginWin/BleDeviceObject.h @@ -5,7 +5,7 @@ namespace BlePlugin { class NotificateData { public: - // ãŒÀ‚Í 22bytec + // 上é™ã¯ 22byte… static const int MaxDataSize = 22; private: WinRtGuid service; @@ -124,6 +124,6 @@ namespace BlePlugin { void UpdateNotification(); void UpdateDisconectCheck(); - void OnDisconnect(); + void ClearDeviceInfo(); }; -} \ No newline at end of file +} diff --git a/bleplugin_projects/Windows/BlePluginWin/bleTestConsole.cpp b/bleplugin_projects/Windows/BlePluginWin/bleTestConsole.cpp index 7d93676..2eec708 100644 --- a/bleplugin_projects/Windows/BlePluginWin/bleTestConsole.cpp +++ b/bleplugin_projects/Windows/BlePluginWin/bleTestConsole.cpp @@ -1,4 +1,4 @@ -#if defined(_DEBUG) +#if defined(_DEBUG) #include "pch.h" #include #include "Utility.h" @@ -80,7 +80,7 @@ void TestRun(){ } } ButtonSetSubscrive(addr); - for (int i = 0; i < 50; ++i) { + for (int i = 0; i < 10; ++i) { _BlePluginUpdateDevicdeManger(); int deviceNum = _BlePluginGetConectDeviceNum(); std::cout << "ButtonCheck " << deviceNum << std::endl; @@ -98,7 +98,9 @@ int main() { while (true) { TestRun(); + _BlePluginDisconnectAllDevice(); _BlePluginFinalize(); + Sleep(3000); } } -#endif \ No newline at end of file +#endif From 8af9bfe8b99e867fb91ba1e3393c7cedf6d07efb Mon Sep 17 00:00:00 2001 From: Yusuke Kurokawa Date: Wed, 6 Oct 2021 01:29:07 +0900 Subject: [PATCH 08/11] comment out Debug.Log --- Assets/Plugins/x86_64/BleWin.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Assets/Plugins/x86_64/BleWin.cs b/Assets/Plugins/x86_64/BleWin.cs index 40a9dd9..59dbf2b 100644 --- a/Assets/Plugins/x86_64/BleWin.cs +++ b/Assets/Plugins/x86_64/BleWin.cs @@ -151,7 +151,7 @@ public static void SubscribeCharacteristic(string identifier, string serviceUUID, string characteristicUUID, Action notifiedCharacteristicAction) { - Debug.Log("SubscribeCharacteristic " + identifier + ":" + serviceUUID + ":" + characteristicUUID); + //Debug.Log("SubscribeCharacteristic " + identifier + ":" + serviceUUID + ":" + characteristicUUID); var addr = DeviceAddressDatabase.GetAddressValue(identifier); var serviceHandle = UuidDatabase.GetUuid(serviceUUID); var characteristicHandle = UuidDatabase.GetUuid(characteristicUUID); @@ -165,8 +165,8 @@ public static void UnSubscribeCharacteristic(string identifier, string serviceUUID, string characteristicUUID, Action action) { - - Debug.Log("UnSubscribeCharacteristic " + identifier + ":" + serviceUUID + ":" + characteristicUUID); var addr = DeviceAddressDatabase.GetAddressValue(identifier); + //Debug.Log("UnSubscribeCharacteristic " + identifier + ":" + serviceUUID + ":" + characteristicUUID); + var addr = DeviceAddressDatabase.GetAddressValue(identifier); var serviceHandle = UuidDatabase.GetUuid(serviceUUID); var characteristicHandle = UuidDatabase.GetUuid(characteristicUUID); var charastricsItem = new BleCharastericsKeyInfo(identifier, serviceUUID, characteristicUUID); From f8634ce10af741446ca7c24ed43d19730eb88b8e Mon Sep 17 00:00:00 2001 From: Yusuke Kurokawa Date: Mon, 11 Oct 2021 17:37:19 +0900 Subject: [PATCH 09/11] =?UTF-8?q?=E3=83=87=E3=83=90=E3=83=83=E3=82=B0?= =?UTF-8?q?=E9=83=A8=E5=88=86=E3=81=AE=E5=89=8A=E9=99=A4=E3=81=AA=E3=81=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/Plugins/x86_64/BlePluginWinows.dll | Bin 345088 -> 345088 bytes .../Windows/BlePluginWin/BleDeviceWatcher.cpp | 55 +++++++++++++----- .../Windows/BlePluginWin/BleDeviceWatcher.h | 6 +- .../Windows/BlePluginWin/bleTestConsole.cpp | 2 +- bleplugin_projects/Windows/BlePluginWin/pch.h | 6 +- 5 files changed, 51 insertions(+), 18 deletions(-) diff --git a/Assets/Plugins/x86_64/BlePluginWinows.dll b/Assets/Plugins/x86_64/BlePluginWinows.dll index d484976fa0742e6f08011dde5b794654fae14f2e..4128699ffe9a6042462e8b7181a0321efda22b1d 100644 GIT binary patch delta 79393 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 delta 79730 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

#mWBL`3oOus(#NgQt5LXaim$)?_j8IjGc83 z`|=jS_de0hz|v%CsX4|rFSF+EpG)gKzM^}im$QYx_QD^N{(_~y&oQm$xp@%>GugujXH~<_KZG3^G(RFrxNb4=6knE$2lML)Son)S#?zBcK?OT#m?K4gR@THz27lCFeSzR$#Ph)!@T{g ztaVV~A(4jC{UP#<3$g6-7I(eM>~8-fh^^xJ3^|b_ws-4YYi;mX@PKS+CtzG{@aGbu zuNNmlL(l|M=l4G>x=I{|QH8T@O2sD4O57=-#&3BttS`oPxH>MOzFc?JM6=2Nf_5(DAtqQNS}QE zxcy*#277<7q9hE?b}~;eCZY8LxGl#84FMkZZX^-Pb{y>4c zA#`Wo$nJ2j>bl>85Hbfu0$|F<^P-^{Bs3dIO^eVpBT-eWoLN;kZojsR_(Vpp3O@FA z7UEm}kU-{cYx#Yzvt&HCfBrgaJ#Q$u&Mg1Np65D>8*J_&v5NUktbaXS1g1EAdc$@5 zDsh%{5X7EF2px0Yjo_BGRlMX}9E&2c7W#&Jk?zj4R`MA;SOoJg=BszGcGeHD<2mc( zhKqynRxU5ty@Ne$YCaur`eZ(AtFmP|wJ|s)d{h<+^aws^CrftkeE^{ZJo+-yPb&id z00)nBSr(jej3*fLKRSqUim;d!>=v^4G7Kww9CChIs<&cd*@J(CsAgMp9~7@^i?T6hQD0$?G9_LvRkWGi#_t=r=iPZvFrt zxr>d!Q{of5SV{Pv4}`Q-yrH}sPK?H29t3NleAyc;VsyXj^8Mjg_UUD%rPyy7hadzW z6VbvuN|{CY_}2kpONixkQOo_ndgqA6PV0Jp_6^p`d=Dl*4)Z}#n3E5ElYMXU|0q;1 zL>S(63gdpeSyD^C6=GMuW)jvu#oKzl@!*fw9X}A2Av1C-U%#8pW|Knsx4T(4OCY$J zX7ynn{x*whQezjYctvb&oac(2kA9oAcD#*ZCQ9krIDDmHmneVld1>vm^X#`VnOMyC zzRh~s|0&+a$uw^SLC6E7qNkUgoATMcY*GkcoX@(ks1W{QK5N_Re$=Be>eZ?@5T<7s zG7f%bf>(uc!S8TS2;tx7vkA>_p$j=9c#q9&v#*VwjjM69^YKm< zt%PS=cP>F(m&$m*$7|kW?Ze_*Ko$A%BaUVjwDqr&zT1??zt6h3pI?c=yZ(l~NxV0N z0%*+u3#Y3b7rV{lPp0~Nc3^0QqLBi=eulU{9z)BXWxa_U^kfKemh~FkXa*`l@KTfH z%@n3KwE0Tsxg>9bAW#T$)3Rf}6{{ed^aM7ik(Pbgr)7A~1N zd}aX#?#KCo0_4o2&lIu|jU!R0aUwAG{%tLoP>4weOR<=HnrD8eV8cGf*q}x~q1njB zdI8=j{BjwT10L;(|Ap9ThpYUzfJ4EDuP6$GBk~X&=733`E)3{$W_1+)%{%##4_J)5 z0)l`|&%p>b<5@QYEe!bK^zQ*boLCsJ?lkP27X0VHcOEMmgc8uYxcHh6c)?GA_gg?x zF)k5aft+=ahtB9_En~UFES$rJ|1W;Vm^z{{*c)*O`7&0bNKZKU&J}O ziofz9>mJGBla*XQ6!{Ds=8}p@XG*RiLxb>-`QKkZWD)LzkOXYH2E!%Sr&<>Q9r^D5 z#;4Vi>z$4t`L=SOc^z0KRa1i{O)B%w*OF^7k-ID5<=e`gk?$Ff3x?xe!?7O@*f@0L z+lxC7)#cXw8bxW0?3#%=4`kOpoPWf+Vp`(ZM=U=4HxClsYbctUi2*GUwBwtOKs_!}fpI>J!uuX!v;029d@#Onjk9n0_9K`< z!UWq9782^j8xxpP*y1NbIO(}hU-v%gX|Hl?35&3V=b}@yS_65v5*F?L(IzVWiCRw= zsH6A#aepc7>mzl~U8r+e))Jwif2wws4Q9pJZ)nbUKvuOMv(}!gzQW_GrdihKp$Uyk zU|^tAh0pi=%X1RN9qL%&0Pio+HJZ1>`PVnj@FHjHqx@_MYu4nxZ}55{4f?H4ezk

nHD$>| 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 delta 97476 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

RVA!0637`FLEpdrxOJX0Q4!tWJ{c&l5 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 diff --git a/bleplugin_projects/Windows/BlePluginWin/BleDeviceManager.cpp b/bleplugin_projects/Windows/BlePluginWin/BleDeviceManager.cpp index a8f3fac..7ae9644 100644 --- a/bleplugin_projects/Windows/BlePluginWin/BleDeviceManager.cpp +++ b/bleplugin_projects/Windows/BlePluginWin/BleDeviceManager.cpp @@ -53,6 +53,14 @@ void BleDeviceManager::DisconnectAll() { void BleDeviceManager::ResetAll() { this->DisconnectAll(); m_connectDevices.clear(); + // clear all device memory + for (auto it = m_devices.begin(); it != m_devices.end(); ++it) { + BleDeviceObject* devicePtr = (*it); + if (devicePtr == nullptr) { + continue; + } + delete devicePtr; + } m_devices.clear(); } diff --git a/bleplugin_projects/Windows/BlePluginWin/BleDeviceObject.cpp b/bleplugin_projects/Windows/BlePluginWin/BleDeviceObject.cpp index 49e2ca9..b9b5fe7 100644 --- a/bleplugin_projects/Windows/BlePluginWin/BleDeviceObject.cpp +++ b/bleplugin_projects/Windows/BlePluginWin/BleDeviceObject.cpp @@ -110,13 +110,6 @@ void BleDeviceObject::SetupGattServices(const WinRtBleGattServiceResult& result) int size = services.Size(); for (int i = 0; i < size; ++i) { m_services.push_back( services.GetAt(i) ); - // Debug code - /* - auto uuid = services.GetAt(i).Uuid(); - std::cout << "ServiceId:"; - Utility::DebugGuid(uuid); - std::cout << std::endl; - */ } this->m_charastricsRequests.clear(); @@ -131,8 +124,6 @@ void BleDeviceObject::SetupGattServices(const WinRtBleGattServiceResult& result) WinRtBleCharacteristic* BleDeviceObject::GetCharastric(const WinRtGuid& serviceUuid, const WinRtGuid& charastricsUuid) { for (auto it = m_charastrictics.begin();it != m_charastrictics.end(); ++it) { - auto hoge = it->ReadValueAsync(); - auto val = hoge.get().Value(); if (it->Uuid() == charastricsUuid && it->Service().Uuid() == serviceUuid) { return &*it;

}6kRF2vQSqWFKA@+ZB8qq1#ZZx*@MV^!Do*|{ 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 diff --git a/bleplugin_projects/Windows/BlePluginWin/BleDeviceWatcher.cpp b/bleplugin_projects/Windows/BlePluginWin/BleDeviceWatcher.cpp index 344b5d4..5befc26 100644 --- a/bleplugin_projects/Windows/BlePluginWin/BleDeviceWatcher.cpp +++ b/bleplugin_projects/Windows/BlePluginWin/BleDeviceWatcher.cpp @@ -22,6 +22,8 @@ BleDeviceWatcher::DeviceInfo::DeviceInfo(const BleDeviceWatcher::DeviceInfo& src } + + const BleDeviceWatcher::DeviceInfo & BleDeviceWatcher::DeviceInfo::operator= (const BleDeviceWatcher::DeviceInfo &src) { @@ -33,8 +35,14 @@ const BleDeviceWatcher::DeviceInfo & } +void BleDeviceWatcher::DeviceInfo::Update(int _rssi) { + lastFound = clock(); + this->rssi = _rssi; +} + + -//@BleWatcher +// BleWatcher BleDeviceWatcher& BleDeviceWatcher::GetInstance() { return s_instance; } @@ -53,8 +61,15 @@ void BleDeviceWatcher::AddServiceUUID(uint32_t d1, uint32_t d2, uint32_t d3, uin } void BleDeviceWatcher::Start() { - m_watcher.Received(BleDeviceWatcher::ReceiveCallBack); - m_watcher.AdvertisementFilter(m_filer); + + // TODO + // https://docs.microsoft.com/en-us/uwp/api/windows.devices.bluetooth.advertisement.bluetoothlescanningmode?view=winrt-22000 + // Activeスキャンã™ã‚Œã°ã€ScanResponseã¨ã‹ã§ãƒ‡ãƒ¼ã‚¿ãŒå–れるã¯ãšã§ã™ãŒâ€¦ + // Filterを設定ã—ã¦ã„ã‚‹ã¨ã€ScanResponseãŒãƒ•ィルターã•ã‚Œã¦æ¥ã¾ã›ã‚“ã§ã—ãŸã€‚ + // ※nameã¨ManufactureData対応をãƒãƒ£ãƒ³ãƒˆã‚„ã‚‹ã¨ã—ãŸã‚‰è‡ªå‰ã§ Serviceã®UUIDã§ãƒ•ィルターã—ãªã„ã¨ã„ã‘ãªã•ãã†ã§ã™â€¦ + m_watcher.AdvertisementFilter(m_filer); + m_watcher.ScanningMode(WinRtBleScanMode::Passive); + m_watcher.Received(BleDeviceWatcher::ReceiveCallBack); m_watcher.Start(); } void BleDeviceWatcher::Stop() { @@ -83,7 +98,7 @@ const char* BleDeviceWatcher::GetName(int idx)const { if (idx < 0 || idx >= m_cacheData.size()) { return nullptr; } - return "";// m_cacheData.at(idx).name.c_str(); + return "";// m_cacheData.at(idx).name.c_str(); } uint64_t BleDeviceWatcher::GetAddr(int idx)const { if (idx < 0 || idx >= m_cacheData.size()) { @@ -123,20 +138,34 @@ void BleDeviceWatcher::OnReceive( uint64_t addr = args.BluetoothAddress(); auto advertisement = args.Advertisement(); - /* todo name And ManufactureData + +#if false + auto advertiseType = args.AdvertisementType(); + // toioã ã¨ã€ConnectableUndirectedã§ã¯ãƒ»ãƒ»ãƒ» + // Advertiseã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ 0x01㨠0x07ãŒæ¥ã‚‹ãŒãƒ»ãƒ»ãƒ»ã»ã‹ãŒæ¥ãªã„… + // ScanResponseã§Nameã¨ManufactureDataãŒè¿”ã£ã¦ãã¾ã—ãŸã€‚ + // ScanFilterã‚’ã—ãªã„ã¨ã„ã‘ãªã„ int dataSectionNum = advertisement.DataSections().Size(); for (int i = 0; i < dataSectionNum; ++i) { auto dataSection = advertisement.DataSections().GetAt(i); uint8_t dataType = dataSection.DataType(); - int sectionLength = dataSection.Data().Length(); + uint8_t* dataBody = dataSection.Data().data(); + int sectionLength = dataSection.Data().Length(); } + // name And ManufactureData + // toioã§ã¯ ScanResponseã§å…¥ã£ã¦ãるデータ int manufactureSize = advertisement.ManufacturerData().Size(); - */ - -// auto name = advertisement.LocalName().c_str(); - const char* name = ""; - int nameSize = advertisement.LocalName().size(); - DeviceInfo deviceInfo( name, addr, rssi); - m_DeviceMap[addr] = deviceInfo; + auto name = advertisement.LocalName().c_str(); + int nameSize = advertisement.LocalName().size(); +#endif + + auto findIt = m_DeviceMap.find(addr); + if (findIt == m_DeviceMap.end()) { + DeviceInfo deviceInfo("", addr, rssi); + m_DeviceMap.emplace(addr, deviceInfo); + } + else { + findIt->second.Update(rssi); + } } diff --git a/bleplugin_projects/Windows/BlePluginWin/BleDeviceWatcher.h b/bleplugin_projects/Windows/BlePluginWin/BleDeviceWatcher.h index 3d7a8c2..8d9812d 100644 --- a/bleplugin_projects/Windows/BlePluginWin/BleDeviceWatcher.h +++ b/bleplugin_projects/Windows/BlePluginWin/BleDeviceWatcher.h @@ -10,7 +10,7 @@ namespace BlePlugin { class BleDeviceWatcher { private: - // ƒfƒoƒCƒXî•ñ + // デãƒã‚¤ã‚¹æƒ…å ± struct DeviceInfo { static const int TimeoutSec = 1500; // std::string name; @@ -33,6 +33,8 @@ namespace BlePlugin { return ((current - this->lastFound) >= TimeoutSec); } + void Update(int _rssi); + }; // member std::map m_DeviceMap; @@ -77,4 +79,4 @@ namespace BlePlugin { }; -} \ No newline at end of file +} diff --git a/bleplugin_projects/Windows/BlePluginWin/bleTestConsole.cpp b/bleplugin_projects/Windows/BlePluginWin/bleTestConsole.cpp index 2eec708..f24f908 100644 --- a/bleplugin_projects/Windows/BlePluginWin/bleTestConsole.cpp +++ b/bleplugin_projects/Windows/BlePluginWin/bleTestConsole.cpp @@ -100,7 +100,7 @@ int main() TestRun(); _BlePluginDisconnectAllDevice(); _BlePluginFinalize(); - Sleep(3000); + Sleep(300); } } #endif diff --git a/bleplugin_projects/Windows/BlePluginWin/pch.h b/bleplugin_projects/Windows/BlePluginWin/pch.h index 86989a4..83f02a9 100644 --- a/bleplugin_projects/Windows/BlePluginWin/pch.h +++ b/bleplugin_projects/Windows/BlePluginWin/pch.h @@ -1,5 +1,5 @@ #pragma once -//@https://blog.okazuki.jp/entry/2018/10/16/144556 +// https://blog.okazuki.jp/entry/2018/10/16/144556 /* workaround */ #define USE_WORKAROUND 1 @@ -22,11 +22,13 @@ namespace winrt::impl #include -// namespace’·‚¢‚Ì‚ÅÈ—ªŒ^‚ð—pˆÓ‚µ‚Ü‚· +// namespaceé•·ã„ã®ã§çœç•¥åž‹ã‚’用æ„ã—ã¾ã™ namespace BlePlugin { using WinRtGuid = winrt::guid; using WinRtBleAdvertiseWatcher = winrt::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementWatcher; + using WinRtBleScanMode = winrt::Windows::Devices::Bluetooth::Advertisement::BluetoothLEScanningMode; + using WinRtBleDevice = winrt::Windows::Devices::Bluetooth::BluetoothLEDevice; using WinRtBleAdvertiseRecieveEventArg = winrt::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementReceivedEventArgs; using WinRtBleAdvertiseFilter = winrt::Windows::Devices::Bluetooth::Advertisement::BluetoothLEAdvertisementFilter; From dda7737f77d30d791e40917f8472834e7c3dacfb Mon Sep 17 00:00:00 2001 From: Yusuke Kurokawa Date: Tue, 12 Oct 2021 23:52:10 +0900 Subject: [PATCH 10/11] Check bluetooth adapter status at Initialize phase --- Assets/Plugins/x86_64/BehaviourProxy.cs | 17 +++- Assets/Plugins/x86_64/BlePluginWinows.dll | Bin 345088 -> 350208 bytes Assets/Plugins/x86_64/BleWin.cs | 59 +++++++++++- Assets/Plugins/x86_64/DllInterface.cs | 27 +++++- .../Windows/BlePluginWin/BleDeviceWatcher.cpp | 5 +- .../Windows/BlePluginWin/BlePluginWin.vcxproj | 2 + .../BlePluginWin/BlePluginWin.vcxproj.filters | 6 ++ .../BlePluginWin/BluetoothAdapterChecker.cpp | 90 ++++++++++++++++++ .../BlePluginWin/BluetoothAdapterChecker.h | 55 +++++++++++ .../Windows/BlePluginWin/UnityInterface.cpp | 10 ++ .../Windows/BlePluginWin/UnityInterface.h | 6 +- .../Windows/BlePluginWin/bleTestConsole.cpp | 14 +++ bleplugin_projects/Windows/BlePluginWin/pch.h | 4 + 13 files changed, 284 insertions(+), 11 deletions(-) create mode 100644 bleplugin_projects/Windows/BlePluginWin/BluetoothAdapterChecker.cpp create mode 100644 bleplugin_projects/Windows/BlePluginWin/BluetoothAdapterChecker.h diff --git a/Assets/Plugins/x86_64/BehaviourProxy.cs b/Assets/Plugins/x86_64/BehaviourProxy.cs index 5a82b74..7fd3937 100644 --- a/Assets/Plugins/x86_64/BehaviourProxy.cs +++ b/Assets/Plugins/x86_64/BehaviourProxy.cs @@ -1,4 +1,4 @@ - + #if UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN using System.Collections; @@ -10,17 +10,28 @@ namespace toio.Windows internal class BehaviourProxy : MonoBehaviour { private System.Action onUpdate; - public static BehaviourProxy Create(System.Action updateFunc) + private IEnumerator initalizeExecution; + + public static BehaviourProxy Create(IEnumerator initExec,System.Action updateFunc) { var gmo = new GameObject("BehaviourProxy"); gmo.hideFlags = HideFlags.HideAndDontSave; Object.DontDestroyOnLoad(gmo); var proxy = gmo.AddComponent(); + proxy.initalizeExecution = initExec; proxy.onUpdate = updateFunc; return proxy; } void Update() { + if(initalizeExecution != null) + { + if(!initalizeExecution.MoveNext()) + { + initalizeExecution = null; + } + return; + } if(onUpdate != null) { onUpdate(); } @@ -28,4 +39,4 @@ void Update() } } -#endif \ No newline at end of file +#endif diff --git a/Assets/Plugins/x86_64/BlePluginWinows.dll b/Assets/Plugins/x86_64/BlePluginWinows.dll index 4128699ffe9a6042462e8b7181a0321efda22b1d..925a04428a25e2df0210273a0fe6f24efacc5cb2 100644 GIT binary patch delta 106932 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 UCPh)8 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ðNHuxXLAXrA|ds!oAl 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 s_removeIdxBuffer = new List(); private static List s_removeKeyBuffer = new List(); + private static bool s_isInitialized = false; + public static void Initialize(Action initializedAction, Action errorAction = null) { // clear data @@ -32,16 +35,51 @@ public static void Initialize(Action initializedAction, Action errorActi s_writeRequests.Clear(); s_readRequests.Clear(); s_notifyEvents.Clear(); + s_isInitialized = false; + + BehaviourProxy.Create(InitAction(initializedAction,errorAction),OnUpdate); + } + private static IEnumerator InitAction(Action initializedAction, Action errorAction) + { + DllInterface.BleAdapterStatusRequest(); + DllInterface.EBluetoothStatus stat = DllInterface.EBluetoothStatus.None; - BehaviourProxy.Create(OnUpdate); - if (initializedAction != null) + while (stat == DllInterface.EBluetoothStatus.None) + { + stat = DllInterface.BleAdapterUpdate(); + yield return null; + } + switch (stat) { - initializedAction(); + case DllInterface.EBluetoothStatus.Fine: + s_isInitialized = true; + if (initializedAction != null){ + initializedAction.Invoke(); + } + break; + case DllInterface.EBluetoothStatus.NotSupportBle: + if (errorAction != null){ + errorAction.Invoke("Bluetooth Adapter not Support BLE Central."); + } + break; + case DllInterface.EBluetoothStatus.BluetoothDisable: + if (errorAction != null) + { + errorAction.Invoke("Bluetooth Adapter isn't enabled."); + } + break; + default: + if (errorAction != null) + { + errorAction.Invoke("UnknonwError"); + } + break; } } public static void Finalize(Action finalizedAction = null) { + if (!s_isInitialized) { return; } //Debug.Log("Finalize"); DllInterface.FinalizePlugin(); if(finalizedAction != null) { finalizedAction(); } @@ -54,6 +92,7 @@ public static void EnableBluetooth(bool enable) public static void StartScan(string[] serviceUUIDs, Action discoveredAction = null) { + if (!s_isInitialized) { return; } s_discoverAction = discoveredAction; DllInterface.ClearScanFilter(); if (serviceUUIDs != null) @@ -69,6 +108,7 @@ public static void StartScan(string[] serviceUUIDs, public static void StopScan() { + if (!s_isInitialized) { return; } //Debug.Log("StopScan " ); DllInterface.StopScan(); } @@ -79,6 +119,7 @@ public static void ConnectToPeripheral(string identifier, Action discoveredCharacteristicAction = null, Action disconnectedPeripheralAction = null) { + if (!s_isInitialized) { return; } //Debug.Log("Connect to peripheral " + identifier); if (s_deviceDiscoverEvents.ContainsKey(identifier)) { @@ -97,6 +138,7 @@ public static void ConnectToPeripheral(string identifier, public static void DisconnectPeripheral(string identifier, Action disconnectedPeripheralAction = null) { + if (!s_isInitialized) { return; } //Debug.Log("DisconnectPeripheral " + identifier); var addr = DeviceAddressDatabase.GetAddressValue(identifier); @@ -105,6 +147,7 @@ public static void DisconnectPeripheral(string identifier, public static void DisconnectAllPeripherals() { + if (!s_isInitialized) { return; } DllInterface.DisconnectAllDevice(); } @@ -113,6 +156,7 @@ public static void ReadCharacteristic(string identifier, string characteristicUUID, Action didReadChracteristicAction) { + if (!s_isInitialized) { return; } //Debug.Log("ReadCharacteristic " + identifier); var addr = DeviceAddressDatabase.GetAddressValue(identifier); var serviceHandle = UuidDatabase.GetUuid(serviceUUID); @@ -129,6 +173,7 @@ public static void WriteCharacteristic(string identifier, byte[] data, int length, bool withResponse, Action didWriteCharacteristicAction) { + if (!s_isInitialized) { return; } //Debug.Log("WriteCharacteristic " + identifier); var addr = DeviceAddressDatabase.GetAddressValue(identifier); @@ -165,6 +210,7 @@ public static void UnSubscribeCharacteristic(string identifier, string serviceUUID, string characteristicUUID, Action action) { + if (!s_isInitialized) { return; } //Debug.Log("UnSubscribeCharacteristic " + identifier + ":" + serviceUUID + ":" + characteristicUUID); var addr = DeviceAddressDatabase.GetAddressValue(identifier); var serviceHandle = UuidDatabase.GetUuid(serviceUUID); @@ -176,6 +222,7 @@ public static void UnSubscribeCharacteristic(string identifier, private static void OnUpdate() { + if (!s_isInitialized) { return; } DllInterface.UpdateFromMainThread(); UpdateScanDeviceEvents(); UpdateDeviceConnectEvents(); @@ -187,6 +234,7 @@ private static void OnUpdate() private static void UpdateScanDeviceEvents() { + if (!s_isInitialized) { return; } // update scan devices int scanNum = DllInterface.ScanGetDeviceLength(); // Debug.Log("UpdateScanDeviceEvents " + scanNum); @@ -208,6 +256,7 @@ private static void UpdateScanDeviceEvents() private static void UpdateDeviceConnectEvents() { + if (!s_isInitialized) { return; } s_allreadyCallServiceBuffer.Clear(); // update connect Event int deviceNum = DllInterface.GetConnectDeviceNum(); @@ -259,6 +308,7 @@ private static void UpdateDeviceConnectEvents() private static void UpdateWriteRequests() { + if (!s_isInitialized) { return; } s_removeIdxBuffer.Clear(); int count = s_writeRequests.Count; for ( int i = 0; i < count; ++i) @@ -288,6 +338,7 @@ private static void UpdateWriteRequests() } private static void UpdateReadRequests() { + if (!s_isInitialized) { return; } s_removeIdxBuffer.Clear(); int count = s_readRequests.Count; for (int i = 0; i < count; ++i) @@ -321,6 +372,7 @@ private static void UpdateReadRequests() private static void UpdateNotification() { + if (!s_isInitialized) { return; } int deviceNum = DllInterface.GetConnectDeviceNum(); for(int i = 0; i < deviceNum; ++i) { @@ -352,6 +404,7 @@ private static void UpdateNotification() private static void UpdateDisconnectedDevice() { + if (!s_isInitialized) { return; } s_removeKeyBuffer.Clear(); foreach (var kvs in s_deviceDiscoverEvents) { diff --git a/Assets/Plugins/x86_64/DllInterface.cs b/Assets/Plugins/x86_64/DllInterface.cs index f58e230..93a4b2b 100644 --- a/Assets/Plugins/x86_64/DllInterface.cs +++ b/Assets/Plugins/x86_64/DllInterface.cs @@ -67,9 +67,32 @@ internal unsafe struct CharastricsBuffer public class DllInterface { - const string pluginName = "BlePluginWinows"; + public enum EBluetoothStatus : int + { + None = -1, + Fine = 0, + NotSupportBle = 1, + BluetoothDisable = 2, + UnknownError = 99 + }; + + [DllImport(pluginName)] + private static extern void _BlePluginBleAdapterStatusRequest(); + public static void BleAdapterStatusRequest() { + _BlePluginBleAdapterStatusRequest(); + } + + [DllImport(pluginName)] + private static extern int _BlePluginBleAdapterUpdate(); + public static EBluetoothStatus BleAdapterUpdate() + { + int val = _BlePluginBleAdapterUpdate(); + EBluetoothStatus status = (EBluetoothStatus)val; + return status; + } + [DllImport(pluginName)] private static extern void _BlePluginFinalize(); public static void FinalizePlugin() @@ -414,4 +437,4 @@ public static UuidHandler GetDeviceNotificateCharastricsUuid(ulong addr, int idx } } -#endif \ No newline at end of file +#endif diff --git a/bleplugin_projects/Windows/BlePluginWin/BleDeviceWatcher.cpp b/bleplugin_projects/Windows/BlePluginWin/BleDeviceWatcher.cpp index 5befc26..89b5cd0 100644 --- a/bleplugin_projects/Windows/BlePluginWin/BleDeviceWatcher.cpp +++ b/bleplugin_projects/Windows/BlePluginWin/BleDeviceWatcher.cpp @@ -70,10 +70,11 @@ void BleDeviceWatcher::Start() { m_watcher.AdvertisementFilter(m_filer); m_watcher.ScanningMode(WinRtBleScanMode::Passive); m_watcher.Received(BleDeviceWatcher::ReceiveCallBack); - m_watcher.Start(); + m_watcher.Start(); + } void BleDeviceWatcher::Stop() { - m_watcher.Stop(); + m_watcher.Stop(); } void BleDeviceWatcher::UpdateCache() { diff --git a/bleplugin_projects/Windows/BlePluginWin/BlePluginWin.vcxproj b/bleplugin_projects/Windows/BlePluginWin/BlePluginWin.vcxproj index 813baf6..23bf9f7 100644 --- a/bleplugin_projects/Windows/BlePluginWin/BlePluginWin.vcxproj +++ b/bleplugin_projects/Windows/BlePluginWin/BlePluginWin.vcxproj @@ -124,6 +124,7 @@ + Create @@ -134,6 +135,7 @@ + diff --git a/bleplugin_projects/Windows/BlePluginWin/BlePluginWin.vcxproj.filters b/bleplugin_projects/Windows/BlePluginWin/BlePluginWin.vcxproj.filters index 5984ce1..6f02df5 100644 --- a/bleplugin_projects/Windows/BlePluginWin/BlePluginWin.vcxproj.filters +++ b/bleplugin_projects/Windows/BlePluginWin/BlePluginWin.vcxproj.filters @@ -36,6 +36,9 @@ ソース ファイル + + ソース ファイル + @@ -59,5 +62,8 @@ ヘッダー ファイル + + ヘッダー ファイル + \ No newline at end of file diff --git a/bleplugin_projects/Windows/BlePluginWin/BluetoothAdapterChecker.cpp b/bleplugin_projects/Windows/BlePluginWin/BluetoothAdapterChecker.cpp new file mode 100644 index 0000000..f4232e7 --- /dev/null +++ b/bleplugin_projects/Windows/BlePluginWin/BluetoothAdapterChecker.cpp @@ -0,0 +1,90 @@ +#include "BluetoothAdapterChecker.h" + +using namespace BlePlugin; +using namespace winrt::Windows::Foundation; +using namespace winrt::Windows::Devices::Radios; + +BluetoothAdapterChecker BluetoothAdapterChecker::s_instance; + + +BluetoothAdapterChecker::BluetoothAdapterChecker(): +bluetoothStatus(EBluetoothStatus::None), +status(ESearchStatus::None), +radio(nullptr), adapter(nullptr), +asyncBluetoothAdapter(), asyncRadio() +{ +} + +BluetoothAdapterChecker& BluetoothAdapterChecker::GetInstance() { + return s_instance; +} +void BluetoothAdapterChecker::Request() { + asyncBluetoothAdapter = winrt::Windows::Devices::Bluetooth::BluetoothAdapter::GetDefaultAsync(); + status = ESearchStatus::WaitingAdapter; + bluetoothStatus = EBluetoothStatus::None; +} +void BluetoothAdapterChecker::Update() { + switch (status) { + case ESearchStatus::WaitingAdapter: + UpdateWaitingAdapter(); + break; + case ESearchStatus::WaitingRadio: + UpdateWaitingRadio(); + break; + } +} + +void BluetoothAdapterChecker::UpdateWaitingAdapter() { + if (asyncBluetoothAdapter.Status() == AsyncStatus::Error) { + SetBluetoothStatus(EBluetoothStatus::UnknownError); + } + else if (asyncBluetoothAdapter.Status() == AsyncStatus::Completed) { + this->adapter = asyncBluetoothAdapter.get(); + if (this->adapter == nullptr) { + SetBluetoothStatus(EBluetoothStatus::UnknownError); + return; + } + if (!this->adapter.IsLowEnergySupported() || + !this->adapter.IsCentralRoleSupported()) { + SetBluetoothStatus(EBluetoothStatus::NotSupportBle); + return; + } + this->asyncRadio = this->adapter.GetRadioAsync(); + status = ESearchStatus::WaitingRadio; + } +} +void BluetoothAdapterChecker::UpdateWaitingRadio() { + if (asyncRadio.Status() == AsyncStatus::Error) { + SetBluetoothStatus(EBluetoothStatus::UnknownError); + } + else if (asyncRadio.Status() == AsyncStatus::Completed) { + this->radio = asyncRadio.get(); + if (this->radio == nullptr) { + SetBluetoothStatus(EBluetoothStatus::UnknownError); + return; + } + auto radioState = this->radio.State(); + if (radioState == RadioState::On) { + SetBluetoothStatus(EBluetoothStatus::Fine); + return; + } + else { + SetBluetoothStatus(EBluetoothStatus::BluetoothDisable); + } + } +} + +bool supportBle(){ + + + WinRtAsyncOperation res = winrt::Windows::Devices::Bluetooth::BluetoothAdapter::GetDefaultAsync(); + while (!res.Completed()) { + break; + } + winrt::Windows::Devices::Bluetooth::BluetoothAdapter adapter = res.get(); + bool enableBle = adapter.IsLowEnergySupported(); + auto radioSync = adapter.GetRadioAsync(); + winrt::Windows::Devices::Radios::Radio radio = radioSync.get(); + auto stat = radioSync.get().State(); + return true; +} diff --git a/bleplugin_projects/Windows/BlePluginWin/BluetoothAdapterChecker.h b/bleplugin_projects/Windows/BlePluginWin/BluetoothAdapterChecker.h new file mode 100644 index 0000000..9cda45b --- /dev/null +++ b/bleplugin_projects/Windows/BlePluginWin/BluetoothAdapterChecker.h @@ -0,0 +1,55 @@ +#pragma once + +#include "pch.h" +#include +#include + +namespace BlePlugin { + class BluetoothAdapterChecker { + public: + enum class EBluetoothStatus :int{ + None = -1, + Fine = 0, + NotSupportBle = 1, + BluetoothDisable = 2, + UnknownError = 99 + }; + private: + enum class ESearchStatus { + None, + WaitingAdapter, + WaitingRadio, + Complete + }; + static BluetoothAdapterChecker s_instance; + EBluetoothStatus bluetoothStatus; + ESearchStatus status; + + WinRtBluetoothAdapter adapter; + WinRtRadio radio; + + WinRtAsyncOperation asyncBluetoothAdapter; + WinRtAsyncOperation asyncRadio; + + BluetoothAdapterChecker(); + public: + static BluetoothAdapterChecker& GetInstance(); + void Request(); + void Update(); + inline bool IsRequestComplete()const { + return (this->bluetoothStatus != EBluetoothStatus::None); + } + EBluetoothStatus GetStatus()const { + return this->bluetoothStatus; + } + private: + + void UpdateWaitingAdapter(); + void UpdateWaitingRadio(); + + inline void SetBluetoothStatus(EBluetoothStatus stat) { + this->bluetoothStatus = stat; + this->status = ESearchStatus::Complete; + } + }; +} diff --git a/bleplugin_projects/Windows/BlePluginWin/UnityInterface.cpp b/bleplugin_projects/Windows/BlePluginWin/UnityInterface.cpp index 3284f90..f035c15 100644 --- a/bleplugin_projects/Windows/BlePluginWin/UnityInterface.cpp +++ b/bleplugin_projects/Windows/BlePluginWin/UnityInterface.cpp @@ -2,6 +2,7 @@ #include "BleDeviceObject.h" #include "BleDeviceWatcher.h" #include "BleDeviceManager.h" +#include "BluetoothAdapterChecker.h" #include "UUidManager.h" #include "Utility.h" #include @@ -27,6 +28,15 @@ BOOL APIENTRY DllMain(HMODULE hModule, return TRUE; } +DllExport void _BlePluginBleAdapterStatusRequest() { + BluetoothAdapterChecker &checker = BluetoothAdapterChecker::GetInstance(); + checker.Request(); +} +DllExport int _BlePluginBleAdapterUpdate() { + BluetoothAdapterChecker& checker = BluetoothAdapterChecker::GetInstance(); + checker.Update(); + return static_cast( checker.GetStatus() ); +} DllExport void _BlePluginFinalize() { BleDeviceWatcher& watcher = BleDeviceWatcher::GetInstance(); diff --git a/bleplugin_projects/Windows/BlePluginWin/UnityInterface.h b/bleplugin_projects/Windows/BlePluginWin/UnityInterface.h index 51871a0..7e93851 100644 --- a/bleplugin_projects/Windows/BlePluginWin/UnityInterface.h +++ b/bleplugin_projects/Windows/BlePluginWin/UnityInterface.h @@ -9,7 +9,11 @@ extern "C" { typedef void* WriteRequestHandle; typedef void* ReadRequestHandle; - DllExport void _BlePluginFinalize(); + DllExport void _BlePluginBleAdapterStatusRequest(); + DllExport int _BlePluginBleAdapterUpdate(); + + + DllExport void _BlePluginFinalize(); DllExport UuidHandle _BlePluginGetOrCreateUuidObject(uint32_t d1, uint32_t d2, uint32_t d3, uint32_t d4); diff --git a/bleplugin_projects/Windows/BlePluginWin/bleTestConsole.cpp b/bleplugin_projects/Windows/BlePluginWin/bleTestConsole.cpp index f24f908..4813024 100644 --- a/bleplugin_projects/Windows/BlePluginWin/bleTestConsole.cpp +++ b/bleplugin_projects/Windows/BlePluginWin/bleTestConsole.cpp @@ -96,6 +96,20 @@ void TestRun(){ int main() { + // init + _BlePluginBleAdapterStatusRequest(); + + int adapterStatus; + while (true) { + adapterStatus = _BlePluginBleAdapterUpdate(); + if (adapterStatus >= 0) { + break; + } + } + if (adapterStatus != 0) { + std::cout << "Bluetooth adapter Error " << adapterStatus << std::endl; + return 0; + } while (true) { TestRun(); _BlePluginDisconnectAllDevice(); diff --git a/bleplugin_projects/Windows/BlePluginWin/pch.h b/bleplugin_projects/Windows/BlePluginWin/pch.h index 83f02a9..b69011f 100644 --- a/bleplugin_projects/Windows/BlePluginWin/pch.h +++ b/bleplugin_projects/Windows/BlePluginWin/pch.h @@ -18,6 +18,7 @@ namespace winrt::impl #include "winrt/Windows.Devices.Bluetooth.h" #include "winrt/Windows.Devices.Bluetooth.GenericAttributeProfile.h" #include "winrt/Windows.Devices.Bluetooth.Advertisement.h" +#include "winrt/Windows.Devices.Radios.h" #include #include @@ -50,5 +51,8 @@ namespace BlePlugin { using WinRtBleConnectStatus = winrt::Windows::Devices::Bluetooth::BluetoothConnectionStatus; using WinRtCharacteristicConfigValue = winrt::Windows::Devices::Bluetooth::GenericAttributeProfile::GattClientCharacteristicConfigurationDescriptorValue; + + using WinRtBluetoothAdapter = winrt::Windows::Devices::Bluetooth::BluetoothAdapter; + using WinRtRadio = winrt::Windows::Devices::Radios::Radio; } From 608cee093361f68be7d43adf087e6618aafae955 Mon Sep 17 00:00:00 2001 From: Yusuke Kurokawa Date: Wed, 13 Oct 2021 00:35:53 +0900 Subject: [PATCH 11/11] fix leak code --- Assets/Plugins/x86_64/BlePluginWinows.dll | Bin 350208 -> 350208 bytes .../Windows/BlePluginWin/BleDeviceManager.cpp | 8 ++++++++ .../Windows/BlePluginWin/BleDeviceObject.cpp | 9 --------- 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/Assets/Plugins/x86_64/BlePluginWinows.dll b/Assets/Plugins/x86_64/BlePluginWinows.dll index 925a04428a25e2df0210273a0fe6f24efacc5cb2..f48d6e9f32072fface8c33384c8bc7849b9383ce 100644 GIT binary patch delta 97019 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