diff options
author | Matt Ranostay <matt.ranostay@konsulko.com> | 2018-10-30 19:41:53 -0700 |
---|---|---|
committer | Matt Ranostay <matt.ranostay@konsulko.com> | 2018-11-12 03:58:47 -0800 |
commit | 93f9937300ce2ae1f45d3362d6c1a3180e0743a8 (patch) | |
tree | 49983702697c8f0437b7fcff22b0255d3ced0e13 /binding-bluetooth/bluetooth-manager.c | |
parent | 45d4198af0c314cdcd3d489429953a5b93de988b (diff) |
binding: bluetooth: initial commit of binding rewrite
Bug-AGL: SPEC-1630
Change-Id: I33cfec70283fa29f47b76f9e6be3e8e6cd6a2f54
Signed-off-by: Matt Ranostay <matt.ranostay@konsulko.com>
Diffstat (limited to 'binding-bluetooth/bluetooth-manager.c')
-rw-r--r-- | binding-bluetooth/bluetooth-manager.c | 1981 |
1 files changed, 0 insertions, 1981 deletions
diff --git a/binding-bluetooth/bluetooth-manager.c b/binding-bluetooth/bluetooth-manager.c deleted file mode 100644 index fd80f10..0000000 --- a/binding-bluetooth/bluetooth-manager.c +++ /dev/null @@ -1,1981 +0,0 @@ -/* Copyright 2016 ALPS ELECTRIC CO., LTD. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <unistd.h> -#include <pthread.h> -#include <fcntl.h> -#include <glib.h> -#include <gio/gio.h> -#include <glib/gstdio.h> -#include <glib-object.h> -#include <syslog.h> -#include <linux/rfkill.h> -#include <sys/socket.h> -#include <sys/time.h> - -#include "bluetooth-manager.h" -#include "bluez-client.h" -#include "bluetooth-agent.h" - -static Client cli = { 0 }; -static Binding_RegisterCallback_t g_RegisterCallback = { 0 }; -static stBluetoothManage BluetoothManage = { 0 }; -static FILE *logfp= NULL; - -/* ------ LOCAL FUNCTIONS --------- */ -void BluetoothManage_InitFlag_Set(gboolean value) -{ - g_mutex_lock(&(BluetoothManage.m)); - BluetoothManage.inited = value; - g_mutex_unlock(&(BluetoothManage.m)); -} - -gboolean BluetoothManage_InitFlag_Get(void) -{ - gboolean inited; - - g_mutex_lock(&(BluetoothManage.m)); - inited = BluetoothManage.inited; - g_mutex_unlock(&(BluetoothManage.m)); - - return inited; -} - -void devices_list_lock(void) -{ - g_mutex_lock(&(BluetoothManage.m)); -} - -void devices_list_unlock(void) -{ - g_mutex_unlock(&(BluetoothManage.m)); -} - -gchar *bt_priority_path() -{ - gchar *path = g_build_filename(g_get_user_config_dir(), "bluetooth", NULL); - gchar *file; - - g_mkdir(path, 0664); - - file = g_build_filename(path, "priorities.lst", NULL); - g_free(path); - - return file; -} - -void bt_remove_priority(gchar *bdaddr) -{ - LOGD("\n"); - FILE *fp; - GSList *item, *tmp; - gchar *path; - - LOGD("bd_addr: %s\n", bdaddr); - - devices_list_lock(); - - item = g_slist_find_custom(BluetoothManage.priorities, bdaddr, g_strcmp0); - if (item == NULL) - { - devices_list_unlock(); - return; - } - g_free(item->data); - tmp = BluetoothManage.priorities = g_slist_remove_link(BluetoothManage.priorities, item); - - path = bt_priority_path(); - fp = g_fopen(path, "w"); - g_free(path); - - if (fp == NULL) - { - devices_list_unlock(); - return; - } - - while (tmp && tmp->data) - { - fputs(tmp->data, fp); - fputs("\n", fp); - tmp = tmp->next; - } - - fclose(fp); - - devices_list_unlock(); -} - -void bt_save_priority(gchar *bdaddr) -{ - LOGD("\n"); - FILE *fp; - gchar *path; - - LOGD("bd_addr: %s\n", bdaddr); - - devices_list_lock(); - - if (g_slist_find(BluetoothManage.priorities, bdaddr)) - { - devices_list_unlock(); - return; - } - - path = bt_priority_path(); - fp = g_fopen(path, "a+"); - g_free(path); - - if (fp == NULL) - { - devices_list_unlock(); - return; - } - - fputs(bdaddr, fp); - fputs("\n", fp); - fclose(fp); - - BluetoothManage.priorities = g_slist_append(BluetoothManage.priorities, g_strdup(bdaddr)); - - devices_list_unlock(); -} - -GSList *bt_priority_list() -{ - LOGD("\n"); - FILE *fp; - GSList *list = NULL; - gchar *path; - gchar bdaddr[18]; - - devices_list_lock(); - - path = bt_priority_path(); - - fp = g_fopen(path, "r"); - g_free(path); - - if (fp == NULL) - { - devices_list_unlock(); - return NULL; - } - - while (fscanf(fp, "%17s\n", &bdaddr) == 1) - { - LOGD("Found priority device %s\n", bdaddr); - list = g_slist_append(list, g_strdup(bdaddr)); - } - - devices_list_unlock(); - - return list; -} - -int device_priority_list(void *(object_cb)(void *, gchar *), void *ptr) -{ - GSList *tmp; - - devices_list_lock(); - - tmp = BluetoothManage.priorities; - - while (tmp) - { - object_cb(ptr, tmp->data); - tmp = tmp->next; - } - - devices_list_unlock(); - - return 0; -} - -static int device_path_cmp(struct btd_device * device, const gchar* pPath ) -{ - return !g_str_has_prefix (pPath, device->path); -} - -/* - * search device by path - * Returns the first found btd_device or NULL if it is not found - */ -struct btd_device *devices_list_find_device_by_path(const gchar* pPath) -{ - GSList * temp; - - temp = g_slist_find_custom (BluetoothManage.device, pPath, - (GCompareFunc)device_path_cmp); - - if (temp) { - return temp->data; - } - - return NULL; - -} - - -static int device_bdaddr_cmp(struct btd_device * device, const gchar* pBDaddr ) -{ - return g_strcmp0 (device->bdaddr, pBDaddr); -} - -/* - * search device by path - * Returns the first found btd_device or NULL if it is not found - */ -struct btd_device *devices_list_find_device_by_bdaddr(const gchar* pBDaddr) -{ - GSList * temp; - - temp = g_slist_find_custom (BluetoothManage.device, pBDaddr, - (GCompareFunc)device_bdaddr_cmp); - - if (temp) { - return temp->data; - } - - return NULL; - -} - - -/* - * make a copy of each element - * And, to entirely free the new btd_device, you could do: device_free - */ -struct btd_device *device_copy(struct btd_device* device) -{ - struct btd_device * temp; - - if (NULL == device) { - return NULL; - } - - temp = g_malloc0(sizeof(struct btd_device)); - temp->path = g_strdup(device->path); - temp->bdaddr = g_strdup(device->bdaddr); - temp->name = g_strdup(device->name); - temp->paired = device->paired; - temp->trusted = device->trusted; - temp->connected = device->connected; - temp->avconnected = device->avconnected; - temp->hfpconnected = device->hfpconnected; - temp->uuids = g_list_copy_deep(device->uuids, g_strdup, NULL); - - return temp; -} - -/* - * Frees all of the memory - */ -void device_free(struct btd_device* device) -{ - - if (NULL == device) { - return ; - } - D_PRINTF("device %p\n",device); - if (device->path) { - D_PRINTF("path:%s\n",device->path); - g_free(device->path); - device->path = NULL; - } - if (device->bdaddr) { - D_PRINTF("bdaddr:%s\n",device->bdaddr); - g_free(device->bdaddr); - device->bdaddr = NULL; - } - if (device->name) { - D_PRINTF("name:%s\n",device->name); - g_free(device->name); - device->name = NULL; - } - - if (device->avrcp_title) { - D_PRINTF("avrcp_title:%s\n",device->avrcp_title); - g_free(device->avrcp_title); - device->avrcp_title = NULL; - } - - if (device->avrcp_artist) { - D_PRINTF("avrcp_artist:%s\n",device->avrcp_artist); - g_free(device->avrcp_artist); - device->avrcp_artist = NULL; - } - - if (device->avrcp_status) { - D_PRINTF("avrcp_status:%s\n",device->avrcp_status); - g_free(device->avrcp_status); - device->avrcp_status = NULL; - } - - if (device->transport_state) { - D_PRINTF("transport_state:%s\n",device->transport_state); - g_free(device->transport_state); - device->transport_state = NULL; - } - - if (device->uuids) { - D_PRINTF("uuids: xxx\n"); - g_list_free_full(device->uuids, g_free); - device->uuids = NULL; - } - - g_free(device); -} - -void device_print(struct btd_device *BDdevice) -{ - g_print("device %p\n",BDdevice); - g_print("bdaddr\t\t:%s\n",BDdevice->bdaddr); - g_print("name\t\t:%s\n",BDdevice->name); - g_print("trusted\t\t:%d\n",BDdevice->trusted); - g_print("paired\t\t:%d\n",BDdevice->paired); - - g_print("connected\t:%d\n",BDdevice->connected); - g_print("AVPconnected\t:%d\n",BDdevice->avconnected); - g_print("HFPconnected\t:%d\n",BDdevice->hfpconnected); -} - -/* - * remove all the devices - */ -void devices_list_cleanup() -{ - LOGD("\n"); - GSList * temp = BluetoothManage.device; - while (temp) { - struct btd_device *BDdevice = temp->data; - temp = temp->next; - - BluetoothManage.device = g_slist_remove_all(BluetoothManage.device, - BDdevice); - - device_free(BDdevice); - } -} - -/* - * Print all the devices - */ -void devices_list_print() -{ - LOGD("\n"); - GSList * temp = BluetoothManage.device; - while (temp) { - struct btd_device *BDdevice = temp->data; - temp = temp->next; - g_print("----------------------------------------\n"); - device_print(BDdevice); - } - g_print("----------------------------------------\n"); -} - -/* - * update device from Interfcace org.bluez.MediaControl1 properties - */ -static int device_update_from_MediaControl1(struct btd_device *device, - GVariant *value) -{ - GVariantIter iter; - const gchar *key; - GVariant *subValue; - - if ((NULL==device) || (NULL==value)) - { - return -1; - } - - g_variant_iter_init (&iter, value); - while (g_variant_iter_next (&iter, "{&sv}", &key, &subValue)) - { - //gchar *s = g_variant_print (subValue, TRUE); - //g_print (" %s -> %s\n", key, s); - //g_free (s); - - gboolean value_b = FALSE;//b gboolean - //gchar value_c = 0; - //guchar value_y = 0;//y guchar - //gint16 value_n = 0;//n gint16 - //guint16 value_q = 0;//q guint16 - //gint32 value_i = 0;//i gint32 - //guint32 value_u = 0;//u guint32 - //gint64 value_x = 0;//x gint64 - //guint64 value_t = 0;//t guint64 - //gint32 value_h = 0;//h gint32 - //gdouble value_d = 0.0;//d gdouble - gchar *str;//d gdouble - - if (0==g_strcmp0(key,"Connected")) { - g_variant_get(subValue, "b", &value_b ); - D_PRINTF("Connected %d\n",value_b); - device->avconnected = value_b; - }else if (0==g_strcmp0(key,"Player")) { - g_variant_get(subValue, "o", &str ); - D_PRINTF("Player Object %s\n",str); - } - } - - return 0; -} - -/* - * update device from Interface org.bluez.MediaTransport1 properties - */ -static int device_update_from_MediaTransport1(struct btd_device *device, - GVariant *value) -{ - GVariantIter iter; - const gchar *key; - GVariant *subValue; - - if ((NULL==device) || (NULL==value)) - { - return -1; - } - - g_variant_iter_init (&iter, value); - while (g_variant_iter_next (&iter, "{&sv}", &key, &subValue)) - { - //gchar *s = g_variant_print (subValue, TRUE); - //g_print (" %s -> %s\n", key, s); - //g_free (s); - - //gboolean value_b = FALSE;//b gboolean - //gchar value_c = 0; - //guchar value_y = 0;//y guchar - //gint16 value_n = 0;//n gint16 - guint16 value_q = 0;//q guint16 - //gint32 value_i = 0;//i gint32 - //guint32 value_u = 0;//u guint32 - //gint64 value_x = 0;//x gint64 - //guint64 value_t = 0;//t guint64 - //gint32 value_h = 0;//h gint32 - //gdouble value_d = 0.0;//d gdouble - gchar *str;//d gdouble - - if (0==g_strcmp0(key,"State")) { - g_variant_get(subValue, "s", &str); - D_PRINTF("State %s\n", str); - if (device->transport_state) - free(device->transport_state); - device->transport_state = g_strdup(str); - } else if (0==g_strcmp0(key,"Volume")) { - g_variant_get(subValue, "q", &value_q); - D_PRINTF("Volume %d\n", value_q); - device->transport_volume = value_q; - } - } - - return 0; -} - - -static int device_update_from_Track(struct btd_device *device, - GVariant *value) -{ - GVariantIter iter; - const gchar *key; - GVariant *subValue; - - if ((NULL==device) || (NULL==value)) - { - return -1; - } - - g_variant_iter_init (&iter, value); - while (g_variant_iter_next (&iter, "{&sv}", &key, &subValue)) - { - //gchar *s = g_variant_print (subValue, TRUE); - //g_print (" %s -> %s\n", key, s); - //g_free (s); - - gboolean value_b = FALSE;//b gboolean - //gchar value_c = 0; - //guchar value_y = 0;//y guchar - //gint16 value_n = 0;//n gint16 - //guint16 value_q = 0;//q guint16 - //gint32 value_i = 0;//i gint32 - guint32 value_u = 0;//u guint32 - //gint64 value_x = 0;//x gint64 - //guint64 value_t = 0;//t guint64 - //gint32 value_h = 0;//h gint32 - //gdouble value_d = 0.0;//d gdouble - gchar *str;//d gdouble - - if (0==g_strcmp0(key,"Title")) { - g_variant_get(subValue, "s", &str); - D_PRINTF("Title %s\n", str); - if (device->avrcp_title) - free(device->avrcp_title); - device->avrcp_title = g_strdup(str); - } else if (0==g_strcmp0(key,"Artist")) { - g_variant_get(subValue, "s", &str); - D_PRINTF("Artist %s\n", str); - if (device->avrcp_artist) - free(device->avrcp_artist); - device->avrcp_artist = g_strdup(str); - } else if (0==g_strcmp0(key,"Duration")) { - g_variant_get(subValue, "u", &value_u); - D_PRINTF("Duration %u\n", value_u); - device->avrcp_duration = value_u; - } - } - - return 0; -} - -/* - * update device from Interface org.bluez.MediaPlayer1 properties - */ -static int device_update_from_MediaPlayer1(struct btd_device *device, - GVariant *value) -{ - GVariantIter iter; - const gchar *key; - GVariant *subValue; - - if ((NULL==device) || (NULL==value)) - { - return -1; - } - - g_variant_iter_init (&iter, value); - while (g_variant_iter_next (&iter, "{&sv}", &key, &subValue)) - { - //gchar *s = g_variant_print (subValue, TRUE); - //g_print (" %s -> %s\n", key, s); - //g_free (s); - - gboolean value_b = FALSE;//b gboolean - //gchar value_c = 0; - //guchar value_y = 0;//y guchar - //gint16 value_n = 0;//n gint16 - //guint16 value_q = 0;//q guint16 - //gint32 value_i = 0;//i gint32 - guint32 value_u = 0;//u guint32 - //gint64 value_x = 0;//x gint64 - //guint64 value_t = 0;//t guint64 - //gint32 value_h = 0;//h gint32 - //gdouble value_d = 0.0;//d gdouble - gchar *str;//d gdouble - - if (0==g_strcmp0(key,"Status")) { - g_variant_get(subValue, "s", &str); - D_PRINTF("Status %s\n", str); - if (device->avrcp_status) - free(device->avrcp_status); - device->avrcp_status = g_strdup(str); - } else if (0==g_strcmp0(key,"Position")) { - g_variant_get(subValue, "u", &value_u); - D_PRINTF("Position %d\n", value_u); - device->avrcp_position = value_u; - } else if (0==g_strcmp0(key,"Track")) { - device_update_from_Track(device, subValue); - } - } - - return 0; -} - -/* - * update device from Interfcace org.bluez.Device1 properties - */ -static int device_update_from_Device1(struct btd_device *device, - GVariant *value) -{ - if ((NULL==device) || (NULL==value)) - { - return -1; - } - - GVariantIter iter; - const gchar *key; - GVariant *subValue; - - g_variant_iter_init (&iter, value); - while (g_variant_iter_next (&iter, "{&sv}", &key, &subValue)) - { - //gchar *s = g_variant_print (subValue, TRUE); - //g_print (" %s -> %s\n", key, s); - //g_free (s); - - gboolean value_b = FALSE;//b gboolean - //gchar value_c = 0; - //guchar value_y = 0;//y guchar - //gint16 value_n = 0;//n gint16 - //guint16 value_q = 0;//q guint16 - //gint32 value_i = 0;//i gint32 - //guint32 value_u = 0;//u guint32 - //gint64 value_x = 0;//x gint64 - //guint64 value_t = 0;//t guint64 - //gint32 value_h = 0;//h gint32 - //gdouble value_d = 0.0;//d gdouble - gchar *str;//d gdouble - - if (0==g_strcmp0(key,"Address")) { - g_variant_get(subValue, "s", &str ); - D_PRINTF("Address %s\n",str); - - if (device->bdaddr) - g_free (device->bdaddr); - - device->bdaddr = g_strdup(str); - - g_free (str); - str = NULL; - - }else if (0==g_strcmp0(key,"Name")) { - g_variant_get(subValue, "s", &str ); - D_PRINTF("Name %s\n",str); - - if (device->name) - g_free (device->name); - - device->name = g_strdup(str); - - g_free (str); - str = NULL; - - }else if (0==g_strcmp0(key,"Paired")) { - g_variant_get(subValue, "b", &value_b ); - D_PRINTF("Paired %d\n",value_b); - device->paired = value_b; - }else if (0==g_strcmp0(key,"Trusted")) { - g_variant_get(subValue, "b", &value_b ); - D_PRINTF("Trusted %d\n",value_b); - device->trusted = value_b; - }else if (0==g_strcmp0(key,"Connected")) { - g_variant_get(subValue, "b", &value_b ); - D_PRINTF("Connected %d\n",value_b); - device->connected = value_b; - } - } - - return 0; - -} -#if 0 -/* - * update device from Interfcace org.bluez.MediaControl1 properties - */ -static int bluez_mediacontrol1_properties_update(struct bt_device *device, - GVariant *value) -{ - GVariantIter iter; - const gchar *key; - GVariant *subValue; - - if ((NULL==device) || (NULL==value)) - { - return -1; - } - - g_variant_iter_init (&iter, value); - while (g_variant_iter_next (&iter, "{&sv}", &key, &subValue)) - { - //gchar *s = g_variant_print (subValue, TRUE); - //g_print (" %s -> %s\n", key, s); - //g_free (s); - - gboolean value_b = FALSE;//b gboolean - //gchar value_c = 0; - //guchar value_y = 0;//y guchar - gint16 value_n = 0;//n gint16 - //guint16 value_q = 0;//q guint16 - //gint32 value_i = 0;//i gint32 - //guint32 value_u = 0;//u guint32 - //gint64 value_x = 0;//x gint64 - //guint64 value_t = 0;//t guint64 - //gint32 value_h = 0;//h gint32 - //gdouble value_d = 0.0;//d gdouble - gchar *str;//d gdouble - - if (0==g_strcmp0(key,"Connected")) { - g_variant_get(subValue, "b", &value_b ); - D_PRINTF("Connected %d\n",value_b); - device->avconnected = value_b; - - }else if (0==g_strcmp0(key,"Player")) { - g_variant_get(subValue, "o", &str ); - D_PRINTF("Player Object %s\n",str); - - } - } - - return 0; - -} -#endif - -/* - * make a copy of each element - */ -struct btd_device *device_copy_from_bluez(struct bt_device* device) -{ - struct btd_device * temp; - - if (NULL == device) { - return NULL; - } - - temp = g_malloc0(sizeof(struct btd_device)); - temp->path = g_strdup(device->path); - temp->bdaddr = g_strdup(device->bdaddr); - temp->name = g_strdup(device->name); - temp->paired = device->paired; - temp->trusted = device->trusted; - temp->connected = device->connected; - temp->avconnected = device->avconnected; - temp->uuids = g_list_copy_deep(device->uuids, g_strdup, NULL); - - return temp; -} - -/* - * Force Update the device list - * Call <method>GetManagedObjects - * Returns: 0 - success or other errors - */ -int devices_list_update(void) -{ - LOGD("\n"); - - GSList* list; - GSList* tmp; - list = GetBluezDevicesList(); - - if (NULL == list) - { - return -1; - } - - tmp = list; - - devices_list_lock(); - - devices_list_cleanup(); - - while(tmp) - { - struct bt_device *BDdevice = tmp->data; - tmp = tmp->next; - - struct btd_device * new_device = device_copy_from_bluez(BDdevice); - - if (new_device) - { - //BluetoothManage.device = g_slist_prepend(BluetoothManage.device, new_device); - BluetoothManage.device = - g_slist_append(BluetoothManage.device, new_device); - } - - } - - FreeBluezDevicesList(list); - - devices_list_unlock(); - - - return 0; -} - - -/* - * notify::name-owner callback function - */ -static void bluez_device_added_cb(struct bt_device *device) -{ - LOGD("\n"); - - struct btd_device * new_device; - - if (NULL == device) - { - return; - } - - new_device = device_copy_from_bluez(device); - - devices_list_lock(); - - //BluetoothManage.device = g_slist_prepend(BluetoothManage.device, new_device); - BluetoothManage.device = g_slist_append(BluetoothManage.device,new_device); - if (NULL != g_RegisterCallback.binding_device_added) - { - g_RegisterCallback.binding_device_added(new_device); - } - - devices_list_unlock(); - -} - -/* - * object-removed callback function - */ -static void bluez_device_removed_cb (const gchar *path) -{ - struct btd_device *device; - - LOGD("%s\n",path); - - devices_list_lock(); - - device = devices_list_find_device_by_path(path); - - if (device) { - BluetoothManage.device = g_slist_remove_all(BluetoothManage.device, - device); - - if (NULL != g_RegisterCallback.binding_device_removed) - { - g_RegisterCallback.binding_device_removed(device); - } - - device_free(device); - } - - devices_list_unlock(); - -} - -/* - * BLUEZ interface-proxy-properties-changed callback function - */ -static void -bluez_device_properties_changed_cb (const gchar *pObjecPath, - const gchar *pInterface, - GVariant *properties) -{ - - struct btd_device *device; - -#if 0 - gchar *s; - g_print ("Path:%s, Interface:%s\n",pObjecPath, pInterface); - g_print ("type '%s'\n", g_variant_get_type_string (properties)); - s = g_variant_print (properties, TRUE); - g_print (" %s\n", s); - g_free (s); -#endif - - LOGD("%s\n",pObjecPath); - - devices_list_lock(); - - device = devices_list_find_device_by_path(pObjecPath); - - if (0 == g_strcmp0(pInterface, DEVICE_INTERFACE)) { - - device_update_from_Device1(device, properties); - - } else if (0 == g_strcmp0(pInterface, MEDIA_CONTROL1_INTERFACE)) { - - device_update_from_MediaControl1(device, properties); - - } else if (0 == g_strcmp0(pInterface, MEDIA_PLAYER1_INTERFACE)) { - - device_update_from_MediaPlayer1(device, properties); - - } else if (0 == g_strcmp0(pInterface, MEDIA_TRANSPORT1_INTERFACE)) { - - device_update_from_MediaTransport1(device, properties); - - } - - if (g_RegisterCallback.binding_device_properties_changed) - g_RegisterCallback.binding_device_properties_changed(device); - - devices_list_unlock(); - -} - -gboolean agent_requset_confirm( const gchar *device_path, - guint passkey, - const gchar **error) -{ - gboolean ret = FALSE; - - const gchar *myerror = ERROR_BLUEZ_REJECT; - - LOGD("-%s,%d\n",device_path,passkey); - - if (NULL != g_RegisterCallback.binding_request_confirmation) - { - - devices_list_lock(); - struct btd_device *device = devices_list_find_device_by_path(device_path); - gchar *device_bdaddr = NULL; - - if (device) - { - device_bdaddr = g_strdup(device->bdaddr); - } - devices_list_unlock(); - - if (device_bdaddr) - ret = g_RegisterCallback.binding_request_confirmation(device_bdaddr, passkey); - } - - if (TRUE == ret) - { - LOGD("return TRUE\n"); - return TRUE; - }else{ - *error = myerror; - LOGD("return FALSE\n"); - return FALSE; - } -} - - -/* - * register callback function - * Returns: 0 - success or other errors - */ -static int bt_manager_app_init(void) -{ - GError *error = NULL; - int ret; - - cli.system_conn = g_bus_get_sync(G_BUS_TYPE_SYSTEM, NULL, &error); - if (error) { - LOGE("Create System GDBusconnection fail\n"); - LOGE("Error:%s\n", error->message); - g_error_free(error); - return -1; - } - - cli.session_conn = g_bus_get_sync(G_BUS_TYPE_SESSION, NULL, &error); - if (error) { - LOGE("Create Session GDBusconnection fail\n"); - LOGE("Error:%s\n", error->message); - g_error_free(error); - g_object_unref(cli.system_conn); - return -1; - } - - Bluez_RegisterCallback_t Bluez_API_Callback; - Bluez_API_Callback.device_added = bluez_device_added_cb; - Bluez_API_Callback.device_removed = bluez_device_removed_cb; - Bluez_API_Callback.device_properties_changed = bluez_device_properties_changed_cb; - BluezDeviceAPIRegister(&Bluez_API_Callback); - - Agent_RegisterCallback_t AgentRegCallback; - AgentRegCallback.agent_RequestConfirmation = agent_requset_confirm; - agent_API_register(&AgentRegCallback); - - BluetoothManage.priorities = bt_priority_list(); - - ret = BluezManagerInit(); - if (0 != ret ) - { - LOGE("BluezManagerInit fail\n"); - return -1; - } - - ret = agent_register(""); - if (0 != ret ) - { - LOGE("agent_register fail\n"); - - BluezManagerQuit(); - return -1; - } - - return 0; -} - -int hci_interface_enable(int hdev) -{ - int ctl = socket(AF_BLUETOOTH, SOCK_RAW, BTPROTO_HCI); - int ret; - - if (ctl < 0) - return ctl; - - ret = ioctl(ctl, HCIDEVUP, hdev); - - close(ctl); - - return ret; -} - -gboolean bluetooth_rfkill_event(GIOChannel *chan, GIOCondition cond, gpointer data) -{ - LOGD("\n"); - struct rfkill_event event; - gchar *name, buf[8]; - int fd, len; - - fd = g_io_channel_unix_get_fd(chan); - len = read(fd, &event, sizeof(struct rfkill_event)); - - if (len != sizeof(struct rfkill_event)) - return TRUE; - - if (event.type != RFKILL_TYPE_BLUETOOTH) - return TRUE; - - if (event.op == RFKILL_OP_DEL) - return TRUE; - - name = g_strdup_printf("/sys/class/rfkill/rfkill%u/soft", event.idx); - - fd = g_open(name, O_WRONLY); - write(fd, "0", 1); - g_close(fd, NULL); - - g_free(name); - - memset(&buf, 0, sizeof(buf)); - - name = g_strdup_printf("/sys/class/rfkill/rfkill%u/name", event.idx); - fd = g_open(name, O_RDONLY); - len = read(fd, &buf, sizeof(buf) - 1); - - if (len > 0) - { - int idx = 0; - sscanf(buf, "hci%d", &idx); - - /* - * 50 millisecond delay to allow time for rfkill to unblock before - * attempting to bring up HCI interface - */ - g_usleep(50000); - - LOGD ("Enabling hci%d interface\n", idx); - hci_interface_enable(idx); - } - - g_free(name); - - return TRUE; -} - - -/* Create RFKILL monitor to soft unblock bluetooth devices - * - * Returns: 0 - success or other errors - */ -int BluetoothMonitorInit() -{ - int fd = g_open("/dev/rfkill", O_RDWR); - GIOChannel *chan = NULL; - - if (fd < 0) - { - LOGE("Cannot open /dev/rfkill"); - return -1; - } - - chan = g_io_channel_unix_new(fd); - g_io_channel_set_close_on_unref(chan, TRUE); - - BluetoothManage.watch = g_io_add_watch(chan, G_IO_IN, bluetooth_rfkill_event, NULL); - - g_io_channel_unref(chan); - - return 0; -} - -gboolean bt_autoconnect(gpointer ptr) -{ - LOGD("\n"); - gboolean ret = TRUE; - GSList *list, *tmp; - - devices_list_lock(); - - list = GetBluezDevicesList(); - tmp = list; - - while (tmp) - { - struct bt_device *BDdevice = tmp->data; - tmp = tmp->next; - - if (BDdevice->connected) - { - g_slist_free_full(list, g_free); - devices_list_unlock(); - return FALSE; - } - } - - g_slist_free_full(list, g_free); - devices_list_unlock(); - - tmp = BluetoothManage.priorities; - - if (tmp == NULL) - { - return TRUE; - } - - while (tmp) - { - LOGD("Autoconnect to %s\n", tmp->data); - ret = device_connect(tmp->data, NULL) ? TRUE : FALSE; - tmp = tmp->next; - - if (ret == FALSE) - break; - } - - return ret; -} - -/* - * Bluetooth Manager Thread - * register callback function and create a new GMainLoop structure - */ -static void *bt_event_loop_thread() -{ - int ret = 0; - - cli.clientloop = g_main_loop_new(NULL, FALSE); - - ret = bt_manager_app_init(); - - if (0 == ret){ - - devices_list_update(); - - BluetoothManage_InitFlag_Set(TRUE); - BluetoothMonitorInit(); - - BluetoothManage.autoconnect = g_timeout_add_seconds(5, bt_autoconnect, NULL); - - LOGD("g_main_loop_run\n"); - g_main_loop_run(cli.clientloop); - - } - - g_main_loop_unref(cli.clientloop); - - LOGD("Exit\n"); -} - -/* - * print log message - */ -void DebugTraceSendMsg(int level, gchar* message) -{ - - if (logfp) - { - struct timeval tv; - struct tm tm; - char s[32] = {0}; - - gettimeofday(&tv, NULL); - localtime_r(&tv.tv_sec, &tm); - strftime(s, sizeof(s), "%Y-%m-%d %H:%M:%S", &tm); - fprintf(logfp, "[%s.%6.6d] ", s, (int)(tv.tv_usec)); - - switch (level) - { - case DT_LEVEL_ERROR: - fprintf(logfp,"[E]"); - break; - - case DT_LEVEL_WARNING: - fprintf(logfp,"[W]"); - break; - - case DT_LEVEL_NOTICE: - fprintf(logfp,"[N]"); - break; - - case DT_LEVEL_INFO: - fprintf(logfp,"[I]"); - break; - - case DT_LEVEL_DEBUG: - fprintf(logfp,"[D]"); - break; - - default: - fprintf(logfp,"[-]"); - break; - } - - fprintf(logfp,"%s\n",message); - fflush(logfp); - } -#ifdef LOCAL_PRINT_DEBUG - switch (level) - { - case DT_LEVEL_ERROR: - g_print("[E]"); - break; - - case DT_LEVEL_WARNING: - g_print("[W]"); - break; - - case DT_LEVEL_NOTICE: - g_print("[N]"); - break; - - case DT_LEVEL_INFO: - g_print("[I]"); - break; - - case DT_LEVEL_DEBUG: - g_print("[D]"); - break; - - default: - g_print("[-]"); - break; - } - - g_print("%s",message); -#endif - - if (message) { - g_free(message); - } - -} - - - -/* ------ PUBLIC PLUGIN FUNCTIONS --------- */ - -/* - * Set the Bluez Adapter Property "Powered" value - * If success return 0, else return -1; - */ -int adapter_set_powered(gboolean powervalue) -{ - LOGD("value:%d\n",powervalue); - - GError *error = NULL; - GVariant *value; - - if (FALSE == BluetoothManage_InitFlag_Get()) { - LOGD("BluetoothManage Not Init\n"); - return -1; - } - - value = g_dbus_connection_call_sync(cli.system_conn, BLUEZ_SERVICE, - ADAPTER_PATH, FREEDESKTOP_PROPERTIES, - "Set", g_variant_new("(ssv)", ADAPTER_INTERFACE, - "Powered", g_variant_new("b", powervalue)), - NULL, G_DBUS_CALL_FLAGS_NONE, DBUS_REPLY_TIMEOUT, - NULL, &error); - - if (NULL == value) { - LOGW ("Error getting object manager client: %s", error->message); - g_error_free(error); - return -1; - } - - g_variant_unref(value); - return 0; -} - -/* - * Get the Bluez Adapter Property "Powered" value - * If success return 0, else return -1; - */ -int adapter_get_powered(gboolean *powervalue) { - LOGD("\n"); - - GError *error = NULL; - GVariant *value = NULL; - GVariant *subValue = NULL; - - if (FALSE == BluetoothManage_InitFlag_Get()) { - LOGD("BluetoothManage Not Init\n"); - return -1; - } - - if (NULL == powervalue) { - LOGD("powervalue is NULL\n"); - return -1; - } - - value = g_dbus_connection_call_sync(cli.system_conn, BLUEZ_SERVICE, - ADAPTER_PATH, FREEDESKTOP_PROPERTIES, "Get", - g_variant_new("(ss)", ADAPTER_INTERFACE, "Powered"), - NULL, G_DBUS_CALL_FLAGS_NONE, DBUS_REPLY_TIMEOUT, - NULL, &error); - - if (NULL == value) { - LOGW ("Error getting object manager client: %s\n", error->message); - g_error_free(error); - return -1; - } - - g_variant_get(value, "(v)", &subValue); - g_variant_get(subValue, "b", powervalue); - g_variant_unref(subValue); - - g_variant_unref(value); - - LOGD("get ret :%d\n",*powervalue); - return 0; -} - -/* - * Set the Bluez Adapter Property value - * Only support boolean property now.(Discoverable, Pairable, Powered) - * If success return 0, else return -1; - */ -int adapter_set_property(const gchar* property, gboolean setvalue) -{ - LOGD("property:%s,value:%d\n",property, setvalue); - - GError *error = NULL; - GVariant *value; - - if (FALSE == BluetoothManage_InitFlag_Get()) { - LOGW("BluetoothManage Not Init\n"); - return -1; - } - - if ((0!=g_strcmp0 (property, "Discoverable"))&& - (0!=g_strcmp0 (property, "Pairable"))&& - (0!=g_strcmp0 (property, "Powered"))) - { - LOGD("Invalid value\n"); - return -1; - } - value = g_dbus_connection_call_sync(cli.system_conn, BLUEZ_SERVICE, - ADAPTER_PATH, FREEDESKTOP_PROPERTIES, - "Set", g_variant_new("(ssv)", ADAPTER_INTERFACE, - property, g_variant_new("b", setvalue)), - NULL, G_DBUS_CALL_FLAGS_NONE, DBUS_REPLY_TIMEOUT, - NULL, &error); - - if (NULL == value) { - LOGW ("Error : %s", error->message); - g_error_free(error); - return -1; - } - - g_variant_unref(value); - - return 0; -} - - -/* - * Call the Bluez Adapter Method "StartDiscovery" - * If success return 0, else return -1; - */ -int adapter_start_discovery() -{ - LOGD("\n"); - - GError *error = NULL; - GVariant *value = NULL; - - if (FALSE == BluetoothManage_InitFlag_Get()) { - LOGW("BluetoothManage Not Init\n"); - return -1; - } - - if (BluetoothManage.autoconnect > 0) { - LOGW("Canceling autoconnection for discovery mode\n"); - g_source_remove(BluetoothManage.autoconnect); - } - - value = g_dbus_connection_call_sync(cli.system_conn, BLUEZ_SERVICE, - ADAPTER_PATH, ADAPTER_INTERFACE, "StartDiscovery", - NULL, NULL, G_DBUS_CALL_FLAGS_NONE, - DBUS_REPLY_TIMEOUT, NULL, &error); - - if (NULL == value) { - LOGW ("Error getting object manager client: %s\n", error->message); - g_error_free(error); - return -1; - } - - g_variant_unref(value); - return 0; -} - -/* - * Call the Bluez Adapter Method "StopDiscovery" - * If success return 0, else return -1; - */ -int adapter_stop_discovery() -{ - LOGD("\n"); - - GError *error = NULL; - GVariant *value = NULL; - - if (FALSE == BluetoothManage_InitFlag_Get()) { - LOGW("BluetoothManage Not Init\n"); - return -1; - } - - value = g_dbus_connection_call_sync(cli.system_conn, BLUEZ_SERVICE, - ADAPTER_PATH, ADAPTER_INTERFACE, "StopDiscovery", - NULL, NULL, G_DBUS_CALL_FLAGS_NONE, - DBUS_REPLY_TIMEOUT, NULL, &error); - - if (NULL == value) { - LOGW ("Error getting object manager client: %s\n", error->message); - g_error_free(error); - return -1; - } - - g_variant_unref(value); - - return 0; -} - -/* - * Call the Bluez Adapter Method "RemoveDevice" - * If success return 0, else return -1; - */ -int adapter_remove_device(const gchar* bdaddr) -{ - LOGD("\n%s\n",bdaddr); - - struct btd_device * device; - gchar *path; - GError *error = NULL; - GVariant *value; - - - if (FALSE == BluetoothManage_InitFlag_Get()) { - LOGW("BluetoothManage Not Init\n"); - return -1; - } - - devices_list_lock(); - device = devices_list_find_device_by_bdaddr(bdaddr); - - if (NULL == device) { - devices_list_unlock(); - LOGD("not find device\n"); - return -1; - } - path = g_strdup(device->path); - devices_list_unlock(); - - value = g_dbus_connection_call_sync(cli.system_conn, BLUEZ_SERVICE, - ADAPTER_PATH, ADAPTER_INTERFACE, "RemoveDevice", - g_variant_new("(o)", path), NULL, - G_DBUS_CALL_FLAGS_NONE, DBUS_REPLY_TIMEOUT, NULL, &error); - - bt_remove_priority(bdaddr); - - g_free(path); - - if (NULL == value) { - LOGW ("Error getting object manager client: %s", error->message); - g_error_free(error); - return -1; - } - - g_variant_unref(value); - return 0; - -} - - -/* - * Get the copy of device list. - */ -GSList* adapter_get_devices_list() -{ - GSList* tmp; - devices_list_lock(); - tmp = g_slist_copy_deep (BluetoothManage.device, - (GCopyFunc)device_copy, NULL); - devices_list_unlock(); - return tmp; -} - -/* - * free device list. - */ -void adapter_devices_list_free(GSList* list) -{ - if (NULL != list) - g_slist_free_full(list,(GDestroyNotify)device_free); - -} - -/* - * device_pair callback - */ -void device_pair_done_cb(GDBusConnection *source_object, - GAsyncResult *res, - gpointer user_data) -{ - LOGD("\n"); - gchar *bdaddr = user_data; - - if (g_task_had_error(G_TASK(res)) == FALSE) - { - bt_save_priority(bdaddr); - } - g_free(bdaddr); - - g_dbus_connection_call_finish (source_object, res, NULL); - -} - -/* - * send pairing command - * If success return 0, else return -1; - */ -int device_pair(const gchar * bdaddr) -{ - LOGD("\n%s\n",bdaddr); - - struct btd_device * device; - gchar *path; - GError *error = NULL; - GVariant *value; - - - if (FALSE == BluetoothManage_InitFlag_Get()) { - LOGD("BluetoothManage Not Init\n"); - return -1; - } - - devices_list_lock(); - device = devices_list_find_device_by_bdaddr(bdaddr); - - if (NULL == device) { - devices_list_unlock(); - LOGD("not find device\n"); - return -1; - } - path = g_strdup(device->path); - devices_list_unlock(); - -#if 0 - value = g_dbus_connection_call_sync(cli.system_conn, BLUEZ_SERVICE, - path, DEVICE_INTERFACE, "Pair", - NULL, NULL, G_DBUS_CALL_FLAGS_NONE, - DBUS_REPLY_TIMEOUT, NULL, &error); - - g_free(path); - - if (NULL == value) { - LOGW ("Error getting object manager client: %s", error->message); - g_error_free(error); - return -1; - } - - g_variant_unref(value); -#else - - g_dbus_connection_call(cli.system_conn, BLUEZ_SERVICE, - path, DEVICE_INTERFACE, "Pair", - NULL, NULL, G_DBUS_CALL_FLAGS_NONE, - DBUS_REPLY_TIMEOUT, NULL, - (GAsyncReadyCallback)device_pair_done_cb, g_strdup(bdaddr)); - - g_free(path); -#endif - return 0; - -} - -/* - * send cancel pairing command - * If success return 0, else return -1; - */ -int device_cancelPairing(const gchar * bdaddr) -{ - LOGD("\n%s\n",bdaddr); - - struct btd_device * device; - gchar *path; - GError *error = NULL; - GVariant *value; - - - if (FALSE == BluetoothManage_InitFlag_Get()) { - LOGD("BluetoothManage Not Init\n"); - return -1; - } - - devices_list_lock(); - device = devices_list_find_device_by_bdaddr(bdaddr); - - if (NULL == device) { - devices_list_unlock(); - LOGD("not find device\n"); - return -1; - } - path = g_strdup(device->path); - devices_list_unlock(); - - value = g_dbus_connection_call_sync(cli.system_conn, BLUEZ_SERVICE, - path, DEVICE_INTERFACE, "CancelPairing", - NULL, NULL, G_DBUS_CALL_FLAGS_NONE, - DBUS_REPLY_TIMEOUT, NULL, &error); - - g_free(path); - - if (NULL == value) { - LOGW ("Error getting object manager client: %s", error->message); - g_error_free(error); - return -1; - } - - g_variant_unref(value); - return 0; - -} -/* - * send connect command - * If success return 0, else return -1; - */ -int device_connect(const gchar * bdaddr, const gchar * uuid) -{ - LOGD("\n%s\n",bdaddr); - - struct btd_device * device; - gchar *path; - GError *error = NULL; - GVariant *value; - - - if (FALSE == BluetoothManage_InitFlag_Get()) { - LOGD("BluetoothManage Not Init\n"); - return -1; - } - - devices_list_lock(); - device = devices_list_find_device_by_bdaddr(bdaddr); - - if (NULL == device) { - devices_list_unlock(); - LOGD("not find device\n"); - return -1; - } - path = g_strdup(device->path); - devices_list_unlock(); - - value = g_dbus_connection_call_sync(cli.system_conn, BLUEZ_SERVICE, - path, DEVICE_INTERFACE, uuid ? "ConnectProfile" : "Connect", - uuid ? g_variant_new("(s)", uuid) : NULL, - NULL, G_DBUS_CALL_FLAGS_NONE, - DBUS_REPLY_TIMEOUT, NULL, &error); - - g_free(path); - - if (NULL == value) { - LOGW ("Error getting object manager client: %s", error->message); - g_error_free(error); - return -1; - } - - g_variant_unref(value); - return 0; - -} - -/* - * send disconnect command - * If success return 0, else return -1; - */ -int device_disconnect(const gchar* bdaddr, const gchar *uuid) -{ - LOGD("\n%s\n",bdaddr); - - struct btd_device * device; - gchar *path; - GError *error = NULL; - GVariant *value; - - - if (FALSE == BluetoothManage_InitFlag_Get()) { - LOGD("BluetoothManage Not Init\n"); - return -1; - } - - devices_list_lock(); - device = devices_list_find_device_by_bdaddr(bdaddr); - - if (NULL == device) { - devices_list_unlock(); - LOGD("not find device\n"); - return -1; - } - path = g_strdup(device->path); - devices_list_unlock(); - - value = g_dbus_connection_call_sync(cli.system_conn, BLUEZ_SERVICE, - path, DEVICE_INTERFACE, uuid ? "DisconnectProfile" : "Disconnect", - uuid ? g_variant_new("(s)", uuid) : NULL, - NULL, G_DBUS_CALL_FLAGS_NONE, - DBUS_REPLY_TIMEOUT, NULL, &error); - - g_free(path); - - if (NULL == value) { - LOGW ("Error getting object manager client: %s", error->message); - g_error_free(error); - return -1; - } - - g_variant_unref(value); - return 0; -} - -/* - * set remote device property - * If success return 0, else return -1; - */ -int device_set_property(const char * bdaddr, const char *property_name, - const char *property_value) -{ - LOGD("\n%s-%s-%s\n",bdaddr,property_name,property_value); - - GError *error = NULL; - GVariant *ret; - struct btd_device * device; - gchar *path; - gboolean value; - - if (FALSE == BluetoothManage_InitFlag_Get()) { - LOGD("BluetoothManage Not Init\n"); - return -1; - } - - //Only support set "Trusted" - if (strcmp(property_name, "Trusted")) { - LOGD("Not support property name\n"); - return -1; - } - - if (atoi(property_value) == 1 || !strcasecmp(property_value, "true")) { - value = TRUE; - } else if (atoi(property_value) == 0 - || !strcasecmp(property_value, "false")) { - value = FALSE; - } else { - LOGD("Not support property value\n"); - return -1; - } - - devices_list_lock(); - device = devices_list_find_device_by_bdaddr(bdaddr); - - if (NULL == device) { - devices_list_unlock(); - LOGD("not find device\n"); - return -1; - } - path = g_strdup(device->path); - devices_list_unlock(); - - ret = g_dbus_connection_call_sync(cli.system_conn, BLUEZ_SERVICE, - path, FREEDESKTOP_PROPERTIES, "Set", - g_variant_new("(ssv)", DEVICE_INTERFACE, property_name, - g_variant_new("b", value)), NULL, G_DBUS_CALL_FLAGS_NONE, - DBUS_REPLY_TIMEOUT, NULL, &error); - - g_free(path); - - if (NULL == ret) { - LOGW ("Error getting object manager client: %s", error->message); - g_error_free(error); - return -1; - } - - g_variant_unref(ret); - return 0; -} - -/* - * call remote device avrcp method - * Only support controls (Play, Pause, Stop, Previous, Next) - * If success return 0, else return -1; - */ -int device_call_avrcp_method(const gchar* bdaddr, const gchar* method) -{ - LOGD("device:%s,value:%d\n", bdaddr, method); - - struct btd_device * device; - GError *error = NULL; - GVariant *value; - gchar *path; - - if (FALSE == BluetoothManage_InitFlag_Get()) { - LOGW("BluetoothManage Not Init\n"); - return -1; - } - - if ((0!=g_strcmp0 (method, "Play"))&& - (0!=g_strcmp0 (method, "Pause"))&& - (0!=g_strcmp0 (method, "Stop"))&& - (0!=g_strcmp0 (method, "Previous"))&& - (0!=g_strcmp0 (method, "Next"))) - { - LOGD("Invalid method\n"); - return -1; - } - - devices_list_lock(); - device = devices_list_find_device_by_bdaddr(bdaddr); - - if (NULL == device) { - devices_list_unlock(); - LOGD("not find device\n"); - return -1; - } - path = g_strdup(device->path); - devices_list_unlock(); - - value = g_dbus_connection_call_sync(cli.system_conn, BLUEZ_SERVICE, - path, MEDIA_CONTROL1_INTERFACE, - method, NULL, NULL, - G_DBUS_CALL_FLAGS_NONE, DBUS_REPLY_TIMEOUT, - NULL, &error); - - g_free(path); - - if (NULL == value) { - LOGW ("Error : %s", error->message); - g_error_free(error); - return -1; - } - - g_variant_unref(value); - - return 0; -} - - -/* - * Stops the GMainLoop - */ -int BluetoothManagerQuit() -{ - LOGD("\n"); - - if (FALSE == BluetoothManage.inited ) - { - LOGD("BluetoothManage Not init\n"); - return -1; - } - - if(cli.clientloop){ - g_main_loop_quit(cli.clientloop); - } - - BluezManagerQuit(); - stop_agent(); - - devices_list_lock(); - devices_list_cleanup(); - devices_list_unlock(); - - - g_mutex_clear (&(BluetoothManage.m)); - - g_object_unref(cli.system_conn); - g_object_unref(cli.session_conn); - - if (logfp) - fclose(logfp); - logfp = NULL; - - BluetoothManage.inited = FALSE; - - return 0; -} - -/* - * Create Bluetooth Manager Thread - * Note: bluetooth-api shall do BluetoothManageInit() first before call other APIs. - * bluetooth-api shall register callback function - * Returns: 0 - success or other errors - */ -int BluetoothManagerInit() { - pthread_t thread_id; - - LOGD("\n"); - - if (TRUE == BluetoothManage.inited ) - { - LOGW("BluetoothManage already init\n"); - return -1; - } - - logfp = fopen("/var/log/BluetoothManager.log", "a+"); - - if (NULL == logfp) - { - openlog("BluetoothManager", LOG_CONS | LOG_PID, LOG_USER); - syslog(LOG_WARNING, "BluetoothManager create log file fail\n"); - closelog(); - } - - g_mutex_init(&(BluetoothManage.m)); - - pthread_create(&thread_id, NULL, bt_event_loop_thread, NULL); - //pthread_setname_np(thread_id, "BT_Manager"); - - return 0; -} - -/* - * Register Bluetooth Manager Callback function - */ -void BindingAPIRegister(const Binding_RegisterCallback_t* pstRegisterCallback) -{ - if (NULL != pstRegisterCallback) - { - if (NULL != pstRegisterCallback->binding_device_added) - { - g_RegisterCallback.binding_device_added = - pstRegisterCallback->binding_device_added; - } - - if (NULL != pstRegisterCallback->binding_device_removed) - { - g_RegisterCallback.binding_device_removed = - pstRegisterCallback->binding_device_removed; - } - - if (NULL != pstRegisterCallback->binding_device_properties_changed) - { - g_RegisterCallback.binding_device_properties_changed = - pstRegisterCallback->binding_device_properties_changed; - } - - if (NULL != pstRegisterCallback->binding_request_confirmation) - { - g_RegisterCallback.binding_request_confirmation = - pstRegisterCallback->binding_request_confirmation; - } - } -} |