diff -r 000000000000 -r 6474c204b198 dom/bluetooth/BluetoothCommon.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dom/bluetooth/BluetoothCommon.h Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,163 @@ +/* -*- Mode: c++; c-basic-offset: 2; indent-tabs-mode: nil; tab-width: 40 -*- */ +/* vim: set ts=2 et sw=2 tw=80: */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#ifndef mozilla_dom_bluetooth_bluetoothcommon_h__ +#define mozilla_dom_bluetooth_bluetoothcommon_h__ + +#include "mozilla/Observer.h" +#include "nsPrintfCString.h" +#include "nsString.h" +#include "nsTArray.h" + +extern bool gBluetoothDebugFlag; + +#define SWITCH_BT_DEBUG(V) (gBluetoothDebugFlag = V) + +#undef BT_LOG +#if defined(MOZ_WIDGET_GONK) +#include + +/** + * Prints 'D'EBUG build logs, which show in DEBUG build only when + * developer setting 'Bluetooth output in adb' is enabled. + */ +#define BT_LOGD(msg, ...) \ + do { \ + if (gBluetoothDebugFlag) { \ + __android_log_print(ANDROID_LOG_INFO, "GeckoBluetooth", \ + "%s: " msg, __FUNCTION__, ##__VA_ARGS__); \ + } \ + } while(0) + +/** + * Prints 'R'ELEASE build logs, which show in both RELEASE and DEBUG builds. + */ +#define BT_LOGR(msg, ...) \ + __android_log_print(ANDROID_LOG_INFO, "GeckoBluetooth", \ + "%s: " msg, __FUNCTION__, ##__VA_ARGS__) \ + +/** + * Prints DEBUG build warnings, which show in DEBUG build only. + */ +#define BT_WARNING(args...) \ + NS_WARNING(nsPrintfCString(args).get()) \ + +#else +#define BT_LOGD(msg, ...) \ + do { \ + if (gBluetoothDebugFlag) { \ + printf("%s: " msg, __FUNCTION__, ##__VA_ARGS__); \ + } \ + } while(0) + +#define BT_LOGR(msg, ...) printf("%s: " msg, __FUNCTION__, ##__VA_ARGS__)) +#define BT_WARNING(msg, ...) printf("%s: " msg, __FUNCTION__, ##__VA_ARGS__)) +#endif + +/** + * Wrap literal name and value into a BluetoothNamedValue + * and append it to the array. + */ +#define BT_APPEND_NAMED_VALUE(array, name, value) \ + array.AppendElement(BluetoothNamedValue(NS_LITERAL_STRING(name), value)) + +/** + * Ensure success of system message broadcast with void return. + */ +#define BT_ENSURE_TRUE_VOID_BROADCAST_SYSMSG(type, parameters) \ + do { \ + if (!BroadcastSystemMessage(type, parameters)) { \ + BT_WARNING("Failed to broadcast [%s]", \ + NS_ConvertUTF16toUTF8(type).get()); \ + return; \ + } \ + } while(0) + +#define BEGIN_BLUETOOTH_NAMESPACE \ + namespace mozilla { namespace dom { namespace bluetooth { +#define END_BLUETOOTH_NAMESPACE \ + } /* namespace bluetooth */ } /* namespace dom */ } /* namespace mozilla */ +#define USING_BLUETOOTH_NAMESPACE \ + using namespace mozilla::dom::bluetooth; + +#define KEY_LOCAL_AGENT "/B2G/bluetooth/agent" +#define KEY_REMOTE_AGENT "/B2G/bluetooth/remote_device_agent" +#define KEY_MANAGER "/B2G/bluetooth/manager" +#define KEY_ADAPTER "/B2G/bluetooth/adapter" + +/** + * When the connection status of a Bluetooth profile is changed, we'll notify + * observers which register the following topics. + */ +#define BLUETOOTH_A2DP_STATUS_CHANGED_ID "bluetooth-a2dp-status-changed" +#define BLUETOOTH_HFP_STATUS_CHANGED_ID "bluetooth-hfp-status-changed" +#define BLUETOOTH_HID_STATUS_CHANGED_ID "bluetooth-hid-status-changed" +#define BLUETOOTH_SCO_STATUS_CHANGED_ID "bluetooth-sco-status-changed" + +/** + * When the connection status of a Bluetooth profile is changed, we'll + * dispatch one of the following events. + */ +#define A2DP_STATUS_CHANGED_ID "a2dpstatuschanged" +#define HFP_STATUS_CHANGED_ID "hfpstatuschanged" +#define SCO_STATUS_CHANGED_ID "scostatuschanged" + +/** + * When the pair status of a Bluetooth device is changed, we'll dispatch an + * event. + */ +#define PAIRED_STATUS_CHANGED_ID "pairedstatuschanged" + +/** + * When receiving a query about current play status from remote device, we'll + * dispatch an event. + */ +#define REQUEST_MEDIA_PLAYSTATUS_ID "requestmediaplaystatus" + +// Bluetooth address format: xx:xx:xx:xx:xx:xx (or xx_xx_xx_xx_xx_xx) +#define BLUETOOTH_ADDRESS_LENGTH 17 +#define BLUETOOTH_ADDRESS_NONE "00:00:00:00:00:00" +#define BLUETOOTH_ADDRESS_BYTES 6 + +// Bluetooth stack internal error, such as I/O error +#define ERR_INTERNAL_ERROR "InternalError" + +BEGIN_BLUETOOTH_NAMESPACE + +enum BluetoothSocketType { + RFCOMM = 1, + SCO = 2, + L2CAP = 3, + EL2CAP = 4 +}; + +class BluetoothSignal; +typedef mozilla::Observer BluetoothSignalObserver; + +// Enums for object types, currently used for shared function lookups +// (get/setproperty, etc...). Possibly discernable via dbus paths, but this +// method is future-proofed for platform independence. +enum BluetoothObjectType { + TYPE_MANAGER = 0, + TYPE_ADAPTER = 1, + TYPE_DEVICE = 2, + + TYPE_INVALID +}; + +enum ControlPlayStatus { + PLAYSTATUS_STOPPED = 0x00, + PLAYSTATUS_PLAYING = 0x01, + PLAYSTATUS_PAUSED = 0x02, + PLAYSTATUS_FWD_SEEK = 0x03, + PLAYSTATUS_REV_SEEK = 0x04, + PLAYSTATUS_UNKNOWN, + PLAYSTATUS_ERROR = 0xFF, +}; + +END_BLUETOOTH_NAMESPACE + +#endif // mozilla_dom_bluetooth_bluetoothcommon_h__