/* -*- 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/. */ include protocol PBlob; include protocol PBluetoothRequest; include protocol PContent; include BluetoothTypes; include "mozilla/dom/bluetooth/ipc/BluetoothMessageUtils.h"; using mozilla::dom::bluetooth::BluetoothObjectType; namespace mozilla { namespace dom { namespace bluetooth { /** * Bluetooth request types. */ struct DefaultAdapterPathRequest { }; struct SetPropertyRequest { BluetoothObjectType type; nsString path; BluetoothNamedValue value; }; struct GetPropertyRequest { BluetoothObjectType type; nsString path; }; struct StartDiscoveryRequest { nsString path; }; struct StopDiscoveryRequest { nsString path; }; struct PairRequest { nsString path; nsString address; uint32_t timeoutMS; }; struct UnpairRequest { nsString path; nsString address; }; struct SetPinCodeRequest { nsString path; nsString pincode; }; struct SetPasskeyRequest { nsString path; uint32_t passkey; }; struct ConfirmPairingConfirmationRequest { nsString path; }; struct DenyPairingConfirmationRequest { nsString path; }; struct ConfirmAuthorizationRequest { nsString path; }; struct DenyAuthorizationRequest { nsString path; }; struct DevicePropertiesRequest { nsString[] addresses; }; struct ConnectRequest { nsString address; nsString adapterPath; uint16_t profileId; }; struct DisconnectRequest { uint16_t profileId; }; struct SendFileRequest { nsString devicePath; PBlob blob; }; struct StopSendingFileRequest { nsString devicePath; }; struct ConfirmReceivingFileRequest { nsString devicePath; }; struct DenyReceivingFileRequest { nsString devicePath; }; union Request { DefaultAdapterPathRequest; SetPropertyRequest; GetPropertyRequest; StartDiscoveryRequest; StopDiscoveryRequest; PairRequest; UnpairRequest; SetPinCodeRequest; SetPasskeyRequest; ConfirmPairingConfirmationRequest; DenyPairingConfirmationRequest; ConfirmAuthorizationRequest; DenyAuthorizationRequest; DevicePropertiesRequest; ConnectRequest; DisconnectRequest; SendFileRequest; StopSendingFileRequest; ConfirmReceivingFileRequest; DenyReceivingFileRequest; }; protocol PBluetooth { manager PContent; manages PBluetoothRequest; /** * The potential exists for a racy shutdown so the following sequence of * messages is used to shutdown safely: * * 1. [BeginShutdown] (Parent -> Child [Optional]) * 2. StopNotifying (Child -> Parent) * 3. NotificationsStopped (Parent -> Child) * 4. __delete__() (Child -> Parent) */ child: /** * Sent when a settings change has enabled or disabled the bluetooth firmware. */ Enabled(bool enabled); /** * Sent when a bluetooth signal is broadcasted to child processes. */ Notify(BluetoothSignal signal); /** * Sent when the parent process is about to be shut down. See shutdown note * above. */ BeginShutdown(); /** * Sent to inform the child process that it will no longer receive any * messages from the parent. See shutdown note above. */ NotificationsStopped(); parent: /** * Sent when the child no longer needs to use bluetooth. See shutdown note * above. */ __delete__(); /** * Sent when the child needs to receive signals related to the given node. */ RegisterSignalHandler(nsString node); /** * Sent when the child no longer needs to receive signals related to the given * node. */ UnregisterSignalHandler(nsString node); /** * Sent when the child no longer needs to receive any messages from the * parent. See shutdown note above. */ StopNotifying(); /** * Sent when the child makes an asynchronous request to the parent. */ PBluetoothRequest(Request request); /** * FIXME: Bug 547703. * * This is the state machine we want: * * start state NOTIFYING: * send Enabled goto NOTIFYING; * send Notify goto NOTIFYING; * recv RegisterSignalHandler goto NOTIFYING; * recv UnregisterSignalHandler goto NOTIFYING; * send BeginShutdown goto PARENT_DONE; * recv StopNotifying goto CHILD_DONE; * * state PARENT_DONE: * recv RegisterSignalHandler goto PARENT_DONE; * recv UnregisterSignalHandler goto PARENT_DONE; * recv StopNotifying goto CHILD_DONE; * * state CHILD_DONE: * send Enabled goto CHILD_DONE; * send Notify goto CHILD_DONE; * send BeginShutdown goto CHILD_DONE; * send NotificationsStopped goto DONE; * * state DONE: * recv __delete__; */ }; } // namespace bluetooth } // namespace dom } // namespace mozilla