1*44bb45f3SMilanka Ringwald /* 2*44bb45f3SMilanka Ringwald * Copyright (C) 2014 BlueKitchen GmbH 3*44bb45f3SMilanka Ringwald * 4*44bb45f3SMilanka Ringwald * Redistribution and use in source and binary forms, with or without 5*44bb45f3SMilanka Ringwald * modification, are permitted provided that the following conditions 6*44bb45f3SMilanka Ringwald * are met: 7*44bb45f3SMilanka Ringwald * 8*44bb45f3SMilanka Ringwald * 1. Redistributions of source code must retain the above copyright 9*44bb45f3SMilanka Ringwald * notice, this list of conditions and the following disclaimer. 10*44bb45f3SMilanka Ringwald * 2. Redistributions in binary form must reproduce the above copyright 11*44bb45f3SMilanka Ringwald * notice, this list of conditions and the following disclaimer in the 12*44bb45f3SMilanka Ringwald * documentation and/or other materials provided with the distribution. 13*44bb45f3SMilanka Ringwald * 3. Neither the name of the copyright holders nor the names of 14*44bb45f3SMilanka Ringwald * contributors may be used to endorse or promote products derived 15*44bb45f3SMilanka Ringwald * from this software without specific prior written permission. 16*44bb45f3SMilanka Ringwald * 4. Any redistribution, use, or modification is done solely for 17*44bb45f3SMilanka Ringwald * personal benefit and not for any commercial purpose or for 18*44bb45f3SMilanka Ringwald * monetary gain. 19*44bb45f3SMilanka Ringwald * 20*44bb45f3SMilanka Ringwald * THIS SOFTWARE IS PROVIDED BY BLUEKITCHEN GMBH AND CONTRIBUTORS 21*44bb45f3SMilanka Ringwald * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 22*44bb45f3SMilanka Ringwald * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 23*44bb45f3SMilanka Ringwald * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL MATTHIAS 24*44bb45f3SMilanka Ringwald * RINGWALD OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 25*44bb45f3SMilanka Ringwald * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 26*44bb45f3SMilanka Ringwald * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 27*44bb45f3SMilanka Ringwald * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 28*44bb45f3SMilanka Ringwald * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 29*44bb45f3SMilanka Ringwald * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF 30*44bb45f3SMilanka Ringwald * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 31*44bb45f3SMilanka Ringwald * SUCH DAMAGE. 32*44bb45f3SMilanka Ringwald * 33*44bb45f3SMilanka Ringwald * Please inquire about commercial licensing options at 34*44bb45f3SMilanka Ringwald * [email protected] 35*44bb45f3SMilanka Ringwald * 36*44bb45f3SMilanka Ringwald */ 37*44bb45f3SMilanka Ringwald 38*44bb45f3SMilanka Ringwald #define BTSTACK_FILE__ "tx_power_service_server.c" 39*44bb45f3SMilanka Ringwald 40*44bb45f3SMilanka Ringwald 41*44bb45f3SMilanka Ringwald /** 42*44bb45f3SMilanka Ringwald * Implementation of the GATT TX Power Service Server 43*44bb45f3SMilanka Ringwald * To use with your application, add '#import <tx_power_service.gatt' to your .gatt file 44*44bb45f3SMilanka Ringwald */ 45*44bb45f3SMilanka Ringwald 46*44bb45f3SMilanka Ringwald #include "btstack_defines.h" 47*44bb45f3SMilanka Ringwald #include "ble/att_db.h" 48*44bb45f3SMilanka Ringwald #include "ble/att_server.h" 49*44bb45f3SMilanka Ringwald #include "btstack_util.h" 50*44bb45f3SMilanka Ringwald #include "bluetooth_gatt.h" 51*44bb45f3SMilanka Ringwald #include "btstack_debug.h" 52*44bb45f3SMilanka Ringwald 53*44bb45f3SMilanka Ringwald 54*44bb45f3SMilanka Ringwald #include "ble/gatt-service/tx_power_service_server.h" 55*44bb45f3SMilanka Ringwald 56*44bb45f3SMilanka Ringwald static att_service_handler_t tx_power_service_handler; 57*44bb45f3SMilanka Ringwald 58*44bb45f3SMilanka Ringwald static int8_t tx_power_level_value; 59*44bb45f3SMilanka Ringwald static uint16_t tx_power_level_value_handle; 60*44bb45f3SMilanka Ringwald 61*44bb45f3SMilanka Ringwald 62*44bb45f3SMilanka Ringwald static uint16_t tx_power_service_read_callback(hci_con_handle_t con_handle, uint16_t attribute_handle, uint16_t offset, uint8_t * buffer, uint16_t buffer_size){ 63*44bb45f3SMilanka Ringwald UNUSED(con_handle); 64*44bb45f3SMilanka Ringwald 65*44bb45f3SMilanka Ringwald if (attribute_handle == tx_power_level_value_handle){ 66*44bb45f3SMilanka Ringwald return att_read_callback_handle_byte((uint8_t)tx_power_level_value, offset, buffer, buffer_size); 67*44bb45f3SMilanka Ringwald } 68*44bb45f3SMilanka Ringwald return 0; 69*44bb45f3SMilanka Ringwald } 70*44bb45f3SMilanka Ringwald 71*44bb45f3SMilanka Ringwald void tx_power_service_server_init(int8_t tx_power_level){ 72*44bb45f3SMilanka Ringwald tx_power_level_value = tx_power_level; 73*44bb45f3SMilanka Ringwald 74*44bb45f3SMilanka Ringwald // get service handle range 75*44bb45f3SMilanka Ringwald uint16_t start_handle = 0; 76*44bb45f3SMilanka Ringwald uint16_t end_handle = 0xfff; 77*44bb45f3SMilanka Ringwald bool service_found = gatt_server_get_handle_range_for_service_with_uuid16(ORG_BLUETOOTH_SERVICE_TX_POWER, &start_handle, &end_handle); 78*44bb45f3SMilanka Ringwald btstack_assert(service_found); 79*44bb45f3SMilanka Ringwald UNUSED(service_found); 80*44bb45f3SMilanka Ringwald 81*44bb45f3SMilanka Ringwald // get characteristic value handle and client configuration handle 82*44bb45f3SMilanka Ringwald tx_power_level_value_handle = gatt_server_get_value_handle_for_characteristic_with_uuid16(start_handle, end_handle, ORG_BLUETOOTH_CHARACTERISTIC_TX_POWER_LEVEL); 83*44bb45f3SMilanka Ringwald 84*44bb45f3SMilanka Ringwald // register service with ATT Server 85*44bb45f3SMilanka Ringwald tx_power_service_handler.start_handle = start_handle; 86*44bb45f3SMilanka Ringwald tx_power_service_handler.end_handle = end_handle; 87*44bb45f3SMilanka Ringwald tx_power_service_handler.read_callback = &tx_power_service_read_callback; 88*44bb45f3SMilanka Ringwald tx_power_service_handler.write_callback = NULL; 89*44bb45f3SMilanka Ringwald att_server_register_service_handler(&tx_power_service_handler); 90*44bb45f3SMilanka Ringwald } 91*44bb45f3SMilanka Ringwald 92*44bb45f3SMilanka Ringwald void tx_power_service_server_set_level(int8_t tx_power_level){ 93*44bb45f3SMilanka Ringwald tx_power_level_value = tx_power_level; 94*44bb45f3SMilanka Ringwald } 95