1 /* 2 * Copyright (c) 2025 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef SOFTBUS_ADAPTER_BLE_GATT_SERVER_STRUCT_H 17 #define SOFTBUS_ADAPTER_BLE_GATT_SERVER_STRUCT_H 18 19 #include "common_list.h" 20 #include "stdbool.h" 21 #include "stdint.h" 22 #include "softbus_adapter_bt_common_struct.h" 23 #include "softbus_def.h" 24 25 #ifdef __cplusplus 26 #if __cplusplus 27 extern "C" { 28 #endif 29 #endif 30 31 typedef enum { 32 SOFTBUS_GATT_SUCCESS = 0x00, 33 SOFTBUS_GATT_INVALID_HANDLE = 0x01, 34 SOFTBUS_GATT_READ_NOT_PERMITTED = 0x02, 35 SOFTBUS_GATT_WRITE_NOT_PERMITTED = 0x03, 36 SOFTBUS_GATT_INVALID_PDU = 0x04, 37 SOFTBUS_GATT_INSUFFICIENT_AUTHENTICATION = 0x05, 38 SOFTBUS_GATT_REQUEST_NOT_SUPPORTED = 0x06, 39 SOFTBUS_GATT_INVALID_OFFSET = 0x07, 40 SOFTBUS_GATT_INSUFFICIENT_AUTHORIZATION = 0x08, 41 SOFTBUS_GATT_PREPARE_QUEUE_FULL = 0x09, 42 SOFTBUS_GATT_ATTRIBUTE_NOT_FOUND = 0x0A, 43 SOFTBUS_GATT_ATTRIBUTE_NOT_LONG = 0x0B, 44 SOFTBUS_GATT_INSUFFICIENT_ENCRYPTION_KEY_SIZE = 0x0C, 45 SOFTBUS_GATT_INVALID_ATTRIBUTE_VALUE_LENGTH = 0x0D, 46 SOFTBUS_GATT_UNLIKELY_ERROR = 0x0E, 47 SOFTBUS_GATT_INSUFFICIENT_ENCRYPTION = 0x0F, 48 SOFTBUS_GATT_UNSUPPORTED_GROUP_TYPE = 0x10, 49 SOFTBUS_GATT_INSUFFICIENT_RESOURCES = 0x11, 50 SOFTBUS_GATT_DATABASE_OUT_OF_SYNC = 0x12, 51 SOFTBUS_GATT_VALUE_NOT_ALLOWED = 0x13, 52 } SoftBusGattStatus; 53 54 typedef enum { 55 SOFTBUS_GATT_CHARACTER_PROPERTY_BIT_BROADCAST = 0x01, 56 SOFTBUS_GATT_CHARACTER_PROPERTY_BIT_READ = 0x02, 57 SOFTBUS_GATT_CHARACTER_PROPERTY_BIT_WRITE_NO_RSP = 0x04, 58 SOFTBUS_GATT_CHARACTER_PROPERTY_BIT_WRITE = 0x08, 59 SOFTBUS_GATT_CHARACTER_PROPERTY_BIT_NOTIFY = 0x10, 60 SOFTBUS_GATT_CHARACTER_PROPERTY_BIT_INDICATE = 0x20, 61 SOFTBUS_GATT_CHARACTER_PROPERTY_BIT_SIGNED_WRITE = 0x40, 62 SOFTBUS_GATT_CHARACTER_PROPERTY_BIT_EXTENDED_PROPERTY = 0x80 63 } SoftBusGattCharaProperty; 64 65 typedef enum { 66 SOFTBUS_GATT_PERMISSION_READ = 0x01, 67 SOFTBUS_GATT_PERMISSION_READ_ENCRYPTED = 0x02, 68 SOFTBUS_GATT_PERMISSION_READ_ENCRYPTED_MITM = 0x04, 69 SOFTBUS_GATT_PERMISSION_WRITE = 0x10, 70 SOFTBUS_GATT_PERMISSION_WRITE_ENCRYPTED = 0x20, 71 SOFTBUS_GATT_PERMISSION_WRITE_ENCRYPTED_MITM = 0x40, 72 SOFTBUS_GATT_PERMISSION_WRITE_SIGNED = 0x80, 73 SOFTBUS_GATT_PERMISSION_WRITE_SIGNED_MITM = 0x100 74 } SoftBusGattAttrPermission; 75 76 typedef struct { 77 bool isLong; 78 int connId; 79 int transId; 80 int attrHandle; 81 int offset; 82 SoftBusBtAddr *btAddr; 83 } SoftBusGattReadRequest; 84 85 typedef struct { 86 bool needRsp; 87 bool isPrep; 88 int connId; 89 int transId; 90 int attrHandle; 91 int offset; 92 int length; 93 unsigned char *value; 94 SoftBusBtAddr *btAddr; 95 } SoftBusGattWriteRequest; 96 97 98 typedef struct { 99 void (*serviceAddCallback)(int status, SoftBusBtUuid *uuid, int srvcHandle); 100 void (*characteristicAddCallback)(int status, SoftBusBtUuid *uuid, int srvcHandle, int characteristicHandle); 101 void (*descriptorAddCallback)(int status, SoftBusBtUuid *uuid, int srvcHandle, int descriptorHandle); 102 void (*serviceStartCallback)(int status, int srvcHandle); 103 void (*serviceStopCallback)(int status, int srvcHandle); 104 void (*serviceDeleteCallback)(int status, int srvcHandle); 105 void (*connectServerCallback)(int connId, const SoftBusBtAddr *btAddr); 106 void (*disconnectServerCallback)(int connId, const SoftBusBtAddr *btAddr); 107 void (*requestReadCallback)(SoftBusGattReadRequest readCbPara); 108 void (*requestWriteCallback)(SoftBusGattWriteRequest writeCbPara); 109 void (*responseConfirmationCallback)(int status, int handle); 110 void (*notifySentCallback)(int connId, int status); 111 void (*mtuChangeCallback)(int connId, int mtu); 112 bool (*isConcernedAttrHandle)(int srvcHandle, int attrHandle); 113 } SoftBusGattsCallback; 114 115 typedef struct { 116 int connectId; 117 int transId; 118 int status; 119 int attrHandle; 120 int offset; 121 int valueLen; 122 char *value; 123 } SoftBusGattsResponse; 124 125 typedef struct { 126 int connectId; 127 int attrHandle; 128 int confirm; 129 int valueLen; 130 char *value; 131 } SoftBusGattsNotify; 132 133 typedef struct { 134 ListNode node; 135 int32_t connId; 136 SoftBusBtAddr btAddr; 137 int32_t mtu; 138 int32_t handle; // the id of start server 139 bool notifyConnected; 140 } ServerConnection; 141 142 typedef struct { 143 SoftBusGattsCallback callback; 144 ListNode node; 145 SoftBusBtUuid serviceUuid; 146 int32_t handle; // the id of start server 147 } ServerService; 148 149 typedef struct { 150 ListNode services; 151 ListNode connections; // as server connected 152 SoftBusMutex lock; 153 } SoftBusGattsManager; 154 155 #ifdef __cplusplus 156 #if __cplusplus 157 } 158 #endif /* __cplusplus */ 159 #endif /* __cplusplus */ 160 #endif 161