aboutsummaryrefslogtreecommitdiffstats
path: root/src/tinyb/BluetoothGattCharacteristic.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/tinyb/BluetoothGattCharacteristic.cpp')
-rw-r--r--src/tinyb/BluetoothGattCharacteristic.cpp325
1 files changed, 0 insertions, 325 deletions
diff --git a/src/tinyb/BluetoothGattCharacteristic.cpp b/src/tinyb/BluetoothGattCharacteristic.cpp
deleted file mode 100644
index b051cba6..00000000
--- a/src/tinyb/BluetoothGattCharacteristic.cpp
+++ /dev/null
@@ -1,325 +0,0 @@
-/*
- * Author: Petre Eftime <[email protected]>
- * Copyright (c) 2015 Intel Corporation.
- *
- * Permission is hereby granted, free of charge, to any person obtaining
- * a copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sublicense, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
- * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-#include "orgbluez-dbus.h"
-#include "tinyb_utils.hpp"
-#include "BluetoothNotificationHandler.hpp"
-#include "BluetoothGattCharacteristic.hpp"
-#include "BluetoothGattService.hpp"
-#include "BluetoothGattDescriptor.hpp"
-#include "BluetoothException.hpp"
-
-using namespace tinyb;
-
-void BluetoothNotificationHandler::on_properties_changed_characteristic(GDBusProxy *proxy, GVariant *changed_properties, GStrv invalidated_properties, gpointer userdata) {
- (void) proxy;
- (void) invalidated_properties;
- auto c = static_cast<BluetoothGattCharacteristic*>(userdata);
-
- if(g_variant_n_children(changed_properties) > 0) {
- GVariantIter *iter = NULL;
-
- GVariant *value;
- const gchar *key;
- g_variant_get(changed_properties, "a{sv}", &iter);
- while (iter != nullptr && g_variant_iter_loop(iter, "{&sv}", &key, &value)) {
- auto value_callback = c->value_changed_callback;
- if (value_callback != nullptr && g_ascii_strncasecmp(key, "value", 5) == 0) {
- std::vector<unsigned char> new_value = from_iter_to_vector(value);
- value_callback(new_value);
- }
- }
- g_variant_iter_free (iter);
- }
-}
-
-std::string BluetoothGattCharacteristic::get_class_name() const
-{
- return std::string("BluetoothGattCharacteristic");
-}
-
-std::string BluetoothGattCharacteristic::get_java_class() const
-{
- return std::string(JAVA_DBUS_PACKAGE "/DBusGattCharacteristic");
-}
-
-std::string BluetoothGattCharacteristic::get_object_path() const
-{
- return std::string(g_dbus_proxy_get_object_path(G_DBUS_PROXY(object)));
-}
-
-BluetoothType BluetoothGattCharacteristic::get_bluetooth_type() const
-{
- return BluetoothType::GATT_CHARACTERISTIC;
-}
-
-BluetoothGattCharacteristic::BluetoothGattCharacteristic(GattCharacteristic1 *object_)
-{
- this->object = object_;
- g_object_ref(object_);
-
- g_signal_connect(G_DBUS_PROXY(object_), "g-properties-changed",
- G_CALLBACK(BluetoothNotificationHandler::on_properties_changed_characteristic), this);
-}
-
-BluetoothGattCharacteristic::BluetoothGattCharacteristic(const BluetoothGattCharacteristic &object_)
-{
- BluetoothGattCharacteristic(object_.object);
-
-}
-
-BluetoothGattCharacteristic::~BluetoothGattCharacteristic()
-{
- g_signal_handlers_disconnect_by_data(object, this);
- g_object_unref(object);
-}
-
-BluetoothGattCharacteristic *BluetoothGattCharacteristic::clone() const
-{
- return new BluetoothGattCharacteristic(object);
-}
-
-std::unique_ptr<BluetoothGattCharacteristic> BluetoothGattCharacteristic::make(
- Object *object, BluetoothType type, std::string *name,
- std::string *identifier, BluetoothObject *parent)
-{
- GattCharacteristic1 *characteristic;
- if((type == BluetoothType::NONE || type == BluetoothType::GATT_CHARACTERISTIC) &&
- (characteristic = object_get_gatt_characteristic1(object)) != NULL) {
-
- std::unique_ptr<BluetoothGattCharacteristic> p(
- new BluetoothGattCharacteristic(characteristic));
- g_object_unref(characteristic);
-
- if ((name == nullptr) &&
- (identifier == nullptr || *identifier == p->get_uuid()) &&
- (parent == nullptr || *parent == p->get_service()))
- return p;
- }
-
- return std::unique_ptr<BluetoothGattCharacteristic>();
-}
-
-/* D-Bus method calls: */
-std::vector<unsigned char> BluetoothGattCharacteristic::read_value (uint16_t offset)
-{
- GError *error = NULL;
- GVariant *result_variant;
-
- GVariantDict dict;
- g_variant_dict_init(&dict, NULL);
-
- if (offset != 0)
- g_variant_dict_insert_value(&dict, "offset", g_variant_new_uint16(offset));
-
- GVariant *variant = g_variant_dict_end(&dict);
-
- gatt_characteristic1_call_read_value_sync(
- object,
- variant,
- &result_variant,
- NULL,
- &error
- );
-
- handle_error(error);
-
- GBytes *result_gbytes = g_variant_get_data_as_bytes(result_variant);
- std::vector<unsigned char> result = from_gbytes_to_vector(result_gbytes);
-
- /* free the gbytes array */
- g_bytes_unref(result_gbytes);
-
- return result;
-}
-
-bool BluetoothGattCharacteristic::write_value (
- const std::vector<unsigned char> &arg_value, uint16_t offset)
-{
- GError *error = NULL;
- bool result = true;
-
- gboolean trusted = true;
- GBytes *arg_value_gbytes = from_vector_to_gbytes(arg_value);
- GVariant *value = g_variant_new_from_bytes(
- G_VARIANT_TYPE_BYTESTRING, arg_value_gbytes, trusted);
-
- GVariantDict dict;
- g_variant_dict_init(&dict, NULL);
-
- if (offset != 0)
- g_variant_dict_insert_value(&dict, "offset", g_variant_new_uint16(offset));
-
- GVariant *variant = g_variant_dict_end(&dict);
-
- result = gatt_characteristic1_call_write_value_sync(
- object,
- value,
- variant,
- NULL,
- &error
- );
-
- /* freeing the GBytes allocated inside from_vector_to_gbytes function */
- g_bytes_unref(arg_value_gbytes);
-
- handle_error(error);
-
- return result;
-}
-
-bool BluetoothGattCharacteristic::enable_value_notifications(
- std::function<void(BluetoothGattCharacteristic &, std::vector<unsigned char> &,void *)> callback,
- void *userdata)
-{
- value_changed_callback = std::bind(callback, std::ref(*this), std::placeholders::_1, userdata);
- start_notify();
- return true;
-}
-
-bool BluetoothGattCharacteristic::enable_value_notifications(
- std::function<void(std::vector<unsigned char> &)> callback)
-{
- value_changed_callback = callback;
- start_notify();
- return true;
-}
-
-bool BluetoothGattCharacteristic::disable_value_notifications()
-{
- stop_notify();
- value_changed_callback = nullptr;
- return true;
-}
-
-
-bool BluetoothGattCharacteristic::start_notify ()
-{
- GError *error = NULL;
- bool result;
- result = gatt_characteristic1_call_start_notify_sync(
- object,
- NULL,
- &error
- );
-
- handle_error(error);
- return result;
-}
-
-bool BluetoothGattCharacteristic::stop_notify ()
-{
- GError *error = NULL;
- bool result;
- result = gatt_characteristic1_call_stop_notify_sync(
- object,
- NULL,
- &error
- );
- handle_error(error);
- return result;
-}
-
-/* D-Bus property accessors: */
-std::string BluetoothGattCharacteristic::get_uuid ()
-{
- return std::string(gatt_characteristic1_get_uuid (object));
-}
-
-BluetoothGattService BluetoothGattCharacteristic::get_service ()
-{
- GError *error = NULL;
-
- GattService1 *service = gatt_service1_proxy_new_for_bus_sync(
- G_BUS_TYPE_SYSTEM,
- G_DBUS_PROXY_FLAGS_NONE,
- "org.bluez",
- gatt_characteristic1_get_service (object),
- NULL,
- &error);
-
- if (service == nullptr) {
- std::string error_msg("Error occured while instantiating service: ");
- error_msg += error->message;
- g_error_free(error);
- throw BluetoothException(error_msg);
- }
-
- auto res = BluetoothGattService(service);
- g_object_unref(service);
- return res;
-}
-
-std::vector<unsigned char> BluetoothGattCharacteristic::get_value ()
-{
- GVariant *value_variant = gatt_characteristic1_get_value (object);
- GBytes *value_gbytes = g_variant_get_data_as_bytes(value_variant);
- std::vector<unsigned char> result;
-
- try {
- result = from_gbytes_to_vector(value_gbytes);
- } catch (std::exception &e) {
- g_bytes_unref(value_gbytes);
- throw e;
- }
-
- g_bytes_unref(value_gbytes);
-
- return result;
-}
-
-bool BluetoothGattCharacteristic::get_notifying ()
-{
- return gatt_characteristic1_get_notifying (object);
-}
-
-std::vector<std::string> BluetoothGattCharacteristic::get_flags ()
-{
- const char * const *flags_c = gatt_characteristic1_get_flags (object);
- std::vector<std::string> flags;
- for (int i = 0; flags_c[i] != NULL ;i++)
- flags.push_back(std::string(flags_c[i]));
- return flags;
-
-}
-
-std::vector<std::unique_ptr<BluetoothGattDescriptor>> BluetoothGattCharacteristic::get_descriptors ()
-{
- std::vector<std::unique_ptr<BluetoothGattDescriptor>> vector;
- GList *l, *objects = g_dbus_object_manager_get_objects(gdbus_manager);
-
- for (l = objects; l != NULL; l = l->next) {
- Object *object2 = OBJECT(l->data);
-
- auto p = BluetoothGattDescriptor::make(object2,
- BluetoothType::GATT_DESCRIPTOR, NULL, NULL, this);
- if (p != nullptr)
- vector.push_back(std::move(p));
- }
- g_list_free_full(objects, g_object_unref);
-
- return vector;
-}
-
-