From c3053cacff7e687f2a43c30da2fa53d20f084ec1 Mon Sep 17 00:00:00 2001 From: Oliver Ruiz Dorantes Date: Tue, 21 Apr 2009 20:04:24 +0000 Subject: [PATCH] - Add candidate interface for addons with custom configuration for LocalDevices. - Add example implementation for Devices which need issue a Reset Command git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30300 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- headers/os/bluetooth/LocalDeviceAddOn.h | 32 ++++++ src/add-ons/bluetooth/Jamfile | 3 + .../bluetooth/ResetLocalDevice/Jamfile | 8 ++ .../ResetLocalDevice/ResetLocalDevice.cpp | 105 ++++++++++++++++++ .../ResetLocalDevice/ResetLocalDevice.h | 26 +++++ 5 files changed, 174 insertions(+) create mode 100644 headers/os/bluetooth/LocalDeviceAddOn.h create mode 100644 src/add-ons/bluetooth/Jamfile create mode 100644 src/add-ons/bluetooth/ResetLocalDevice/Jamfile create mode 100644 src/add-ons/bluetooth/ResetLocalDevice/ResetLocalDevice.cpp create mode 100644 src/add-ons/bluetooth/ResetLocalDevice/ResetLocalDevice.h diff --git a/headers/os/bluetooth/LocalDeviceAddOn.h b/headers/os/bluetooth/LocalDeviceAddOn.h new file mode 100644 index 0000000000..fc1a0425ce --- /dev/null +++ b/headers/os/bluetooth/LocalDeviceAddOn.h @@ -0,0 +1,32 @@ +#ifndef LOCAL_DEVICE_ADDON_H +#define LOCAL_DEVICE_ADDON_H + +#include +#include + +class LocalDeviceAddOn { + +public: + + LocalDeviceAddOn(); + virtual const char* GetName()=0; + + virtual status_t InitCheck(LocalDevice* lDevice)=0; + + virtual const char* GetActionDescription()=0; + virtual status_t TakeAction(LocalDevice* lDevice)=0; + + virtual const char* GetActionOnRemoteDescription()=0; + virtual status_t TakeActionOnRemote(LocalDevice* lDevice, RemoteDevice* rDevice)=0; + + virtual const char* GetOverridenPropertiesDescription()=0; + virtual BMessage* OverridenProperties(LocalDevice* lDevice, const char* property)=0; + +}; + +#define INSTANTIATE_LOCAL_DEVICE_ADDON(addon) LocalDeviceAddOn* InstantiateLocalDeviceAddOn(){return new addon();} +#define EXPORT_LOCAL_DEVICE_ADDON extern "C" __declspec(dllexport) LocalDeviceAddOn* InstantiateLocalDeviceAddOn(); + + + +#endif diff --git a/src/add-ons/bluetooth/Jamfile b/src/add-ons/bluetooth/Jamfile new file mode 100644 index 0000000000..15fc0ecb66 --- /dev/null +++ b/src/add-ons/bluetooth/Jamfile @@ -0,0 +1,3 @@ +SubDir HAIKU_TOP src add-ons bluetooth ; + +SubInclude HAIKU_TOP src add-ons bluetooth ResetLocalDevice ; diff --git a/src/add-ons/bluetooth/ResetLocalDevice/Jamfile b/src/add-ons/bluetooth/ResetLocalDevice/Jamfile new file mode 100644 index 0000000000..2a5c05a768 --- /dev/null +++ b/src/add-ons/bluetooth/ResetLocalDevice/Jamfile @@ -0,0 +1,8 @@ +SubDir HAIKU_TOP src add-ons bluetooth ResetLocalDevice ; + +UsePrivateHeaders bluetooth ; + +Addon ClassicBe : + ResetLocalDevice.cpp + : be +; diff --git a/src/add-ons/bluetooth/ResetLocalDevice/ResetLocalDevice.cpp b/src/add-ons/bluetooth/ResetLocalDevice/ResetLocalDevice.cpp new file mode 100644 index 0000000000..43c8e7f567 --- /dev/null +++ b/src/add-ons/bluetooth/ResetLocalDevice/ResetLocalDevice.cpp @@ -0,0 +1,105 @@ +#include "ResetLocalDevice.h" + +#include + +#include +#include +#include + +#include +#include + + + +ResetLocalDeviceAddOn::ResetLocalDeviceAddOn() +{ + +} + + +const char* +ResetLocalDeviceAddOn::GetName() +{ + return "Reset LocalDevice"; +} + + +status_t +ResetLocalDeviceAddOn::InitCheck(LocalDevice* lDevice) +{ + // you can perform a Reset in all Devices + fCheck = B_OK; + return fCheck; +} + + +const char* +ResetLocalDeviceAddOn::GetActionDescription() +{ + return "Perform a Reset command to the LocalDevice"; +} + + +status_t +ResetLocalDeviceAddOn::TakeAction(LocalDevice* lDevice) +{ + int8 bt_status = BT_ERROR; + + BMessenger* fMessenger = new BMessenger(BLUETOOTH_SIGNATURE); + + if (fMessenger == NULL || !fMessenger->IsValid()) + return B_ERROR; + + BluetoothCommand<> Reset(OGF_CONTROL_BASEBAND, OCF_RESET); + + BMessage request(BT_MSG_HANDLE_SIMPLE_REQUEST); + BMessage reply; + + request.AddInt32("hci_id", lDevice->GetID()); + request.AddData("raw command", B_ANY_TYPE, Reset.Data(), Reset.Size()); + request.AddInt16("eventExpected", HCI_EVENT_CMD_COMPLETE); + request.AddInt16("opcodeExpected", PACK_OPCODE(OGF_CONTROL_BASEBAND, OCF_RESET)); + + if (fMessenger->SendMessage(&request, &reply) == B_OK) + reply.FindInt8("status", &bt_status); + + return bt_status; +} + + +const char* +ResetLocalDeviceAddOn::GetActionOnRemoteDescription() +{ + return NULL; +} + + +status_t +ResetLocalDeviceAddOn::TakeActionOnRemote(LocalDevice* lDevice, RemoteDevice* rDevice) +{ + return B_NOT_SUPPORTED; +} + + +const char* +ResetLocalDeviceAddOn::GetOverridenPropertiesDescription() +{ + // Example usage: + //return "Replace the max count of SCO packets"; + return NULL; +} + + +BMessage* +ResetLocalDeviceAddOn::OverridenProperties(LocalDevice* lDevice, const char* property) +{ + // Example usage: + //BMessage* newProperties = new BMessage(); + //newProperties->AddInt8("max_sco", 10); + //return newProperties; + + return NULL; +} + +INSTANTIATE_LOCAL_DEVICE_ADDON(ResetLocalDeviceAddOn); +EXPORT_LOCAL_DEVICE_ADDON; diff --git a/src/add-ons/bluetooth/ResetLocalDevice/ResetLocalDevice.h b/src/add-ons/bluetooth/ResetLocalDevice/ResetLocalDevice.h new file mode 100644 index 0000000000..a84f6eb757 --- /dev/null +++ b/src/add-ons/bluetooth/ResetLocalDevice/ResetLocalDevice.h @@ -0,0 +1,26 @@ +#ifndef RESET_LOCAL_DEVICE_ADDON_H +#define RESET_LOCAL_DEVICE_ADDON_H + +#include + +class ResetLocalDeviceAddOn : public LocalDeviceAddOn { + +public: + ResetLocalDeviceAddOn(); + + const char* GetName(); + status_t InitCheck(LocalDevice* lDevice); + + const char* GetActionDescription(); + status_t TakeAction(LocalDevice* lDevice); + + const char* GetActionOnRemoteDescription(); + status_t TakeActionOnRemote(LocalDevice* lDevice, RemoteDevice* rDevice); + + const char* GetOverridenPropertiesDescription(); + BMessage* OverridenProperties(LocalDevice* lDevice, const char* property); +private: + status_t fCheck; +}; + +#endif // RESET_LOCAL_DEVICE_ADDON_H