Line data Source code
1 : /*
2 : *
3 : * Copyright (c) 2020 Project CHIP Authors
4 : *
5 : * Licensed under the Apache License, Version 2.0 (the "License");
6 : * you may not use this file except in compliance with the License.
7 : * You may obtain a copy of the License at
8 : *
9 : * http://www.apache.org/licenses/LICENSE-2.0
10 : *
11 : * Unless required by applicable law or agreed to in writing, software
12 : * distributed under the License is distributed on an "AS IS" BASIS,
13 : * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 : * See the License for the specific language governing permissions and
15 : * limitations under the License.
16 : */
17 :
18 : /**
19 : * @file
20 : * This file defines the interface for application to delegate Ble connection to
21 : * to BleLayer.
22 : */
23 :
24 : #pragma once
25 :
26 : #ifndef _CHIP_BLE_BLE_H
27 : #error "Please include <ble/Ble.h> instead!"
28 : #endif
29 :
30 : #include <lib/support/DLLUtil.h>
31 : #include <lib/support/SetupDiscriminator.h>
32 : #include <lib/support/Span.h>
33 :
34 : #include "BleConfig.h"
35 : #include "BleError.h"
36 :
37 : namespace chip {
38 : namespace Ble {
39 : class BleLayer;
40 : } // namespace Ble
41 : } // namespace chip
42 :
43 : namespace chip {
44 : namespace Ble {
45 :
46 : // Platform-agnostic BLE interface
47 : class DLL_EXPORT BleConnectionDelegate
48 : {
49 : public:
50 172 : virtual ~BleConnectionDelegate() {}
51 :
52 : // Public function pointers:
53 : typedef void (*OnConnectionCompleteFunct)(void * appState, BLE_CONNECTION_OBJECT connObj);
54 : OnConnectionCompleteFunct OnConnectionComplete;
55 :
56 : // A callback indicating that a connection was established to a device with (long) discriminator
57 : // matchedDiscriminator.
58 : typedef void (*OnConnectionByDiscriminatorsCompleteFunct)(void * appState, uint16_t matchedLongDiscriminator,
59 : BLE_CONNECTION_OBJECT connObj);
60 :
61 : typedef void (*OnConnectionErrorFunct)(void * appState, CHIP_ERROR err);
62 : OnConnectionErrorFunct OnConnectionError;
63 :
64 : // Call this function to delegate the connection steps required to get a BLE_CONNECTION_OBJECT
65 : // out of a peripheral that matches the given discriminator.
66 : virtual void NewConnection(BleLayer * bleLayer, void * appState, const SetupDiscriminator & connDiscriminator) = 0;
67 :
68 : // Call this function to delegate the connection steps required to get a connected BLE_CONNECTION_OBJECT
69 : // out of a disconnected BLE_CONNECTION_OBJECT.
70 : virtual void NewConnection(BleLayer * bleLayer, void * appState, BLE_CONNECTION_OBJECT connObj) = 0;
71 :
72 : // Call this function to stop the connection
73 : virtual CHIP_ERROR CancelConnection() = 0;
74 :
75 : // Call this function to delegate the connection steps required to get a BLE_CONNECTION_OBJECT
76 : // out of a peripheral that matches any of the given discriminators.
77 : //
78 : // The provided onConnectionComplete callback may be called multiple times, if multiple
79 : // connections are created.
80 : //
81 : // If the onConnectionError callback is called, that indicates that there will be no more
82 : // onConnectionComplete callbacks until the next NewConnection call.
83 : //
84 : // Calling CancelConnection will ensure no more calls to onConnectionComplete or
85 : // onConnectionError until the next NewConnection call.
86 : //
87 : // The implementation must not assume that the memory backing the "discriminators" argument will
88 : // outlive this call returning.
89 : //
90 0 : virtual CHIP_ERROR NewConnection(BleLayer * bleLayer, void * appState, const Span<const SetupDiscriminator> & discriminators,
91 : OnConnectionByDiscriminatorsCompleteFunct onConnectionComplete,
92 : OnConnectionErrorFunct onConnectionError)
93 : {
94 : // Should this handle the case when "discriminators" has length 1 automatically by
95 : // delegating to the NewConnection overload that takes a single SetupDiscriminator? It adds
96 : // some unavoidable codesize and storage for the discriminator to do that. Probably better
97 : // to have the API consumers handle that.
98 0 : return CHIP_ERROR_NOT_IMPLEMENTED;
99 : }
100 : };
101 :
102 : } /* namespace Ble */
103 : } /* namespace chip */
|