Bluetooth® Low Energy Custom Service Implementationww1.microchip.com/.../ATBTLC1000-Bluetooth-Low...Bluetooth® Low Energy Custom Service Implementation ... default in ASF projects

Post on 22-Apr-2020

17 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

Transcript

ATBTLC1000 Bluetoothreg Low Energy Custom Service Implementation

Introduction

This document demonstrates how to use the ATBTLC1000 Bluetoothreg Low Energy SoC by building acustom specific profile using the Microchip BluSDK This document includes the following topics

bull Technical overview of the ATBTLC1000 board from hardware architecture to software designbull Description of the required process for developing the Bluetooth Low Energy peripheral application

with the ATBTLC1000bull Handling of Bluetooth Low Energy custom services and characteristics

Note  The custom service implementation procedure uses the ATBTLC1000ZR-XSTK kit Thisprocedure is also applicable for other supported platforms as mentioned in BluSDK Release Notes

Figure 1 Bluetooth Low Energy System Solution with ATBTLC1000

copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 1

Table of Contents

Introduction1

1 Getting Started 411 Software Prerequisites 412 Software Setup413 ATBTLC1000 Embedded Firmware 514 ATBTLC1000 Host Software API 515 Hardware Prerequisites716 Hardware Setup 9

2 Creating the Project and Initializing 1221 Creating Project from ASF 1222 Configuring ASF for ATBTLC1000-ZR 1523 Compiling and Testing the Project16

3 Establishing Connection with Central Device 1831 Configuring and Starting the Advertisement Process1932 Managing GAP events 25

4 SettingHandling of Pre-Defined Service 3041 Adding Device Info Service Component from ASF Wizard to Project 3142 Configuring and Loading Device Information Service 33

5 Setting up and Handling Custom Service3751 Configuring and Loading the Custom Environment Service3852 Updating the Temperature Characteristic43

6 Appendix A Software Solution - Pre-Defined Svc 47

7 Appendix B Software Solution - Custom Service 49

8 Document Revision History 53

The Microchip Web Site 54

Customer Change Notification Service54

Customer Support 54

Microchip Devices Code Protection Feature 54

Legal Notice55

Trademarks 55

Quality Management System Certified by DNV56

ATBTLC1000

copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 2

Worldwide Sales and Service57

ATBTLC1000

copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 3

1 Getting StartedThis chapter describes the basic software and hardware requirements and setup

11 Software Prerequisites

111 Installation Steps of Atmel Studio 71 Download and install the Atmel Studio software2 Install the Advanced Software Framework (ASF) package

Note  The software for ATBTLC1000-ZR is supported with ASF 3351 and above

Note  For more information on the previous releases refer to the Atmel Studio Release Notes availableon the Microchip web page

12 Software Setup

121 Installation of Microchip SmartConnect application on a Mobile device1 Open the Apple Storereg (iPhoneiOS) or Google Playtrade Store (Android) on the mobile device2 Search for ldquoMicrochip SmartConnectrdquo3 Click Install to install application on the device The Microchip SmartConnect application is now

installed on the mobile deviceFigure 1-1 Microchip SmartConnect Dashboard

ATBTLC1000Getting Started

copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 4

13 ATBTLC1000 Embedded FirmwareThe management of Bluetooth Low Energy communication is based on the network stack stored inATBTLC1000 ROM This stack requires parameters such as GAP parameters and attributes to befunctional which are pushed from Host controller into ATBTLC1000 internal SRAM using GenericTransport Layer (GTL)

The ROM coded firmware embeds the layers of Bluetooth Low Energy stack that runs on top of theinternal hardcoded peripheral drivers and RTOS scheduler

bull Generic Access Profile (GAP)GAP controls the Bluetooth Low Energy connection advertising makes the device visible to theoutside world and determines how two devices interact with each other GAP defines two mainroles for the Bluetooth Low Energy device Central and Peripheral

bull Generic Attribute Profile (GATT) and Attribute Protocol (ATT)GATT defines how the Bluetooth Low Energy device transfers the data The GATT process isbased on services and characteristics stored in Attribute Protocol (ATT) ATT is a simple lookuptable stored in device SRAM

bull Security Manager (SM)The Security Manager defines the procedure for pairing authentication and encryption betweenBLE devices This layer is mainly used if security is requested on that particular connection

bull Logical Link Control and Adaptation Protocol (L2CAP)L2CAP supports high-level protocol multiplexing packet segmentationreassembly and conveyingthe quality of service information L2CAP permits applications to transmit and receive the datapackets with channel flow control and retransmission

bull Direct test mode (DTM)DTM allows testing of the radios Physical Layer (PHY) by transmitting and receiving the test packetsequences This is often used in compliance and production line testing without the need of goingthrough the complete Bluetooth Low Energy Protocol Stack

14 ATBTLC1000 Host Software APIThe ATBTLC1000 is provided with a dedicated Host software API layer The purpose of this API layer isto provide an easy and reliable solution to add Bluetooth Low Energy capabilities to any user applicationThe API provides a set of high level Bluetooth function with abstraction of the transport protocol usedbetween the host MCU and the ATBTLC1000

ATBTLC1000Getting Started

copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 5

Figure 1-2 Host Software API

Figure 1-3 BluSDK File Architecture

The API operation relies on a request-response mechanism The specific requests are sent toATBTLC1000 through dedicated API function call The event messages are then returned by theATBTLC1000 on request processing or on specific Bluetooth Low Energy events These event messagesare to be handled by the host device according to the user application requirements The following figureillustrates a typical Bluetooth Low Energy peripheral application flowchart

ATBTLC1000Getting Started

copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 6

Figure 1-4 Bluetooth Low Energy Peripheral Application Flowchart

WARNING The user application must be non-blocking to ensure that the Bluetooth Low Energy events arehandled in time

15 Hardware PrerequisitesThis document uses the ATBTLC1000ZR-XSTK kit The ATBTLC1000ZR-XSTK kit is comprised of theSAM L21 Xplained Pro (XPRO) and ATBTLC1000ZR XPRO extension board The following sectionsprovide an overview of these kits and their features

151 SMARTtrade SAM L21 Xplained ProThe SMARTtrade SAM L21 Xplained Pro evaluation kit is used to evaluate the ATSAML21J18Bmicrocontroller This kit includes an on-board embedded debugger to program and debugATSAML21J18B The kit also contains an on-board current measurement circuitry which enables theuser to measure current profile over time without any external tools The connection with any XplainedPro modules or external component is possible through available external connectors which makes theboard perfect for prototyping the low-power applications

ATBTLC1000Getting Started

copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 7

Figure 1-5 SAM L21 Xplained Pro Module

152 ATBTLC1000ZR Xplained Pro Extension boardThe ATBTLC1000ZR Xplained Pro extension evaluation kit is Bluetooth Low Energy SoC ATBTLC1000-ZR110CA module This extension is plugged to any of the supported host MCU Xplained Pro evaluationboards to quickly add Bluetooth Low Energy connectivity to the platform This kit provides easy access tothe features of the ATBTLC1000-ZR110CA Bluetooth Low Energy module and illustrates how to integratethe device in a custom design which is supported by the Atmel Studio integrated development platform

ATBTLC1000Getting Started

copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 8

Figure 1-6 ATBTLC1000ZR Xpro Board

The ATBTLC1000ZR Xplained Pro extension board contains

bull ATBLTC1000-ZR110CA Module ndash Bluetooth Low Energy module with 24 GHz Bluetooth LowEnergy ATBTLC1000-XR1100A SiP

bull AT30TSE758A Digital Temperature Sensor ndash Integrated temperature sensor with nonvolatileregisters and serial EEPROM Compatible with two-wire (I2C) and SMBus serial interfaces

bull Current Measurement Header ndash Allows measurement of the current consumption of the board Itmust be closed to enable power to the ATBTLC1000-ZR110CA module

16 Hardware Setup1 Ensure that ATBTLC1000ZR-XPRO power consumption header is closed and that jumpers are

placed on pins 2 to 3 of headers J105 J106 J107 and J108 as shown in the following figure

ATBTLC1000Getting Started

copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 9

Figure 1-7 ATBTLC1000ZR-XPRO Extension

2 Connect the ATBTLC1000ZR-XPRO extension to EXT1 of SAM L21 XPRO as illustrated in thefollowing figureFigure 1-8 ATBTLC1000ZR-XPRO Extension connected with SAM L21 XPRO

3 Connect the board to PC using the ldquoDebug USB ConnectorrdquoFigure 1-9 SAM L21 XPRO Connection to PC

ATBTLC1000Getting Started

copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 10

4 Now the Hardware is ready for development

ATBTLC1000Getting Started

copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 11

2 Creating the Project and InitializingThis chapter provides the process of creating an application startup project using Atmel Studio Prior tocreating a project the user must know hardware architecture and software requirements to configuredrivers

The hardware connection between the SAM L21 XPRO and the ATBTLC1000ZR XPRO board isillustrated in following figure This SAM L21 board is used as host MCUFigure 2-1 ATBTLC1000ZR Xpro Board Connection with SAM L21

Note  For more details refer to module datasheet and XPRO board design documentation

21 Creating Project from ASFAdvanced Software Framework has a pre-configured Bluetooth Low Energy Startup template project thatincludes Bluetooth Low Energy software API for Host and ATBTLC1000 and their peripheral driverdependencies This is used as starting project for any Bluetooth Low Energy project development

To create the project follow the steps below

1 Search for the ldquoBLE-Startup Templaterdquo from the File gt New gt Example Project menu in AtmelStudio

ATBTLC1000Creating the Project and Initializing

copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 12

Figure 2-2 Advanced Software Framework_New Example Project

Note  ATBTLC1000SAMB11 related projects are prefixed with ldquoBLErdquo making it easier to filter theproject in the dialogue box

2 Select the appropriate ldquoBLE-Startup Templaterdquo project corresponding to the intended Host MCUXplained Pro board and then press OK button to import the BLE startup template project SelectldquoBLE-Startup Template ndash SAM L21 Xplained Pro SAML21J18Brdquo for this hands-onNote  Rev B XPRO boards can be identified by SAML21J18B silk screen marking below SAML21MCU

3 The BLE startup project is now created and loaded in Atmel StudioFigure 2-3 Startup_Template Project

ATBTLC1000Creating the Project and Initializing

copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 13

Note  The main project routine of ldquoStartup Template projectrdquo already includes host MCU low levelinitialization BLE and ATBTLC1000 initialization The added ASF components in project can beviewed from ldquoASFgtASF Wizardrdquo Select the created project from Project drop down box

Figure 2-4 ASF Wizard Window

ndash BLE_STACK Platform Interface ndash Core manager of Bluetooth Low Energy Host API Itmanages ATBTLC1000 device initialization GAP and GATT events

ndash Timer Driver ndash Task timer functionality by using a Timer Counter (TC) or Timer Counter forControl (TCC) peripheral

ndash Console UART ndash Universal Asynchronous ReceiverTransmitter (UART) communication insynchronousblocking mode

ndash Generic Board Support ndash Host MCU Board specific initializationndash System Drivers ndash Select MCUrsquos System peripheral drivers These drivers are included by

default in ASF projects and manage the clocks and oscillator of the system4 The main routine contains the MCU low level initialization and ATBTLC1000 initialization The

following figure illustrates the flowchart of the main routine

ATBTLC1000Creating the Project and Initializing

copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 14

Figure 2-5 Main Routine Flowchart

22 Configuring ASF for ATBTLC1000-ZR1 The default ldquoStartup Template Projectrdquo is configured for ATBTLC1000-MR module with 6-Wire

mode2 Navigate to Project properties Project gt Project properties gt Toolchain gt ARMGNU C Compiler gt

Symbols3 The ATBTLC1000ZR-XSTK kit uses the ATBTLC1000-ZR110CA module Change symbol

BLE_MODULE to BTLC1000_ZR and enable UART_FLOWCONTROL_4WIRE_MODE forATBTLC1000-ZR module as shown in the figure belowFigure 2-6 Startup Template Project Window

Note  This configuration change is not required for ATBTLC1000-MR module

ATBTLC1000Creating the Project and Initializing

copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 15

23 Compiling and Testing the Project

1 Click the ldquo rdquo button ltF7gt to compile the project2 Verify that no build error appears in Atmel Studio output window

Figure 2-7 Atmel Studio Output Window

3 Connect the SAM L21 XPRO to PC (if not already done)4 To access the project properties go to Project gt

STARTUP_TEMPLATE_SAML21_XPLAINED_PRO_B1 PropertiesFigure 2-8 Compiling the Project

5 In project properties click the Tool tab and select the EDBG of SAM L21 Xplained Pro board asdebuggerprogrammerFigure 2-9 Selection of DebuggerProgrammer

6 Open any Terminal application (for example TeraTerm) Select the COM port enumerated on thePC and set the following parameters

ndash EDBG associated COM Port (Check Windows Device Manager)

ATBTLC1000Creating the Project and Initializing

copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 16

ndash Baudrate 115200ndash Parity Nonendash One Stop bitndash Enable Hardware Flow Control

7 Click to save the project ltCtrl+Sgt

8 Click rdquo to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt9 The initialization of the ATBTLC1000ZR module must return the Bluetooth Device Address and

Address typeFigure 2-10 Console Log Window

Note 1 If initialization fails make sure to verify the hardware configuration is aligned with the

description refer to 16 Hardware Setup2 The initialization of ATBTLC1000 takes few seconds due to patch download process

ATBTLC1000Creating the Project and Initializing

copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 17

3 Establishing Connection with Central DeviceThe Bluetooth Low Energy connectivity is added to the application that is used to connect with theBluetooth Low Energy central The first step is about the management of Bluetooth connection with acentral device When using ATBTLC1000 device this process is managed by dedicated API function callsassociated with ATBTLC1000 events handling

The interaction between Host MCU ATBTLC1000 and Bluetooth Low Energy central during connectionestablishment is as follows

Figure 3-1 Establishing Connection with Central Device

On host MCU side the management of the Bluetooth connection is performed through three main steps1 GAP callback registration2 Advertisement configuration3 ATBTLC1000 event handling

In the existing project main routine the integration of these steps are highlighted in red in the followingflowchart

ATBTLC1000Establishing Connection with Central Device

copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 18

Figure 3-2 Main Routine Flow Chart

31 Configuring and Starting the Advertisement ProcessThe Bluetooth Low Energy devices transmit advertisement packets to show their presence to nearbydevices The advertisement packet is sent periodically at a time interval defined by variableldquoadvintervalrdquo defined in Bluetooth SIG specification To avoid any collision with other wireless networksuch as Wi-Fireg a channel change is performed for each advertisement packet sent (data frequencyhopping) as illustrated in the following figureFigure 3-3 Advertisement Process

During advertisement the payload structure to be sent differs from application to application and is set byusing encapsulated packet data unit type information (PDU_TYPE)

ATBTLC1000Establishing Connection with Central Device

copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 19

Figure 3-4 PDU Advertising

The following table lists the different PDU types used according to device role

Advertising event types (PDU_TYPE) Broadcaster Observer Peripheral Central

Connectible undirected event (ADV_IND) Excluded Excluded Mandatory Excluded

Connectible directed event(ADV_DIRECT_IND) Excluded Excluded Optional Excluded

Non-connectible undirected event(ADV_NONCONN_IND) Mandatory Excluded Optional Excluded

Scannable undirected event (ADV_SCAN_IND) Optional Excluded Optional Excluded

As our device acts as a Bluetooth Low Energy peripheral the connectable undirected event (ADV_IND)advertising type is used See the following description about the ADV_IND advertisement packetFigure 3-5 ADV_IND Advertisement Packet

The ADV_IND payload contains different Advertisement Data types (AD0 - ADn) which provide specificinformation to the central device such as device short name Tx power level and list of availableservices UUIDs The number of advertisement data types that can be added to the advertisementpayload are limited by the advertisement payload size of 31 octets

Following is a list of advertisement data types that are commonly found in ADV_IND payload

ATBTLC1000Establishing Connection with Central Device

copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 20

311 Flags (AD Type 0x00)The flags describe the basic device capability such as BLE support BLE discoverable mode BREDRsupport and simultaneous BRED

312 Available Service UUID (AD Types 0x02 to 0x07)The Bluetooth Low Energy advertisement payloads are limited to 31 bytes Therefore only two 128-bitUUID values can be added to the payload For this purpose the specific AD types describe the length ofthe advertised UUID and provide information as to whether the payload contains a incompletecompletelist of UUID supported by the GATT server

bull 0x02 - Incomplete list of 16-bit UUIDs (adopted GATT services)bull 0x03 - Complete list of 16-bit UUIDs (adopted GATT services)bull 0x06 - Incomplete list of 128-bit UUIDs (custom GATT services)bull 0x07 - Complete list of 128-bit UUIDs (custom GATT services)

Note  When a 16-bit UUID is transmitted only the unique 2-byte value is sent The client knows that it isrequired to be injected into the base UUID For example the Health Thermometer Service is assigned as0x1809 so its equivalent UUID is 00001809-0000-1000-8000-00805F9B34FB

313 Device Name (AD Types 0x08 to 0x09)This AD type field is used to advertise the Local name of device in the network The Local name datatype value indicates if the name is complete or shortened If the name is shortened the complete namecan be read after the connection is established

bull 0x08 - Shortened Local Namebull 0x09 - Complete Local Name

Note 1 A shortened name contains only continuous characters from the beginning of the full name For

example if the device name is BT_Device_Name then the shortened name can beBT_Device or BT_Dev

2 Complete data type list are available at httpswwwbluetoothcomspecificationsassigned-numbersgeneric-access-profile

For management of advertisement process and cover the different configurations specified by SIG theATBTLC1000 Host driver provides the two functions elaborated in the following sections

In the application use these two functions to setup the following ADV_IN type payloadFigure 3-6 ADV_IN Type Payload Process

ATBTLC1000Establishing Connection with Central Device

copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 21

3131 Setting the Advertisement Payload (ble_advertisement_data_set)Prototype ndashat_ble_status_t at_ble_adv_data_set (uint8_t const const adv_datauint8_t adv_data_lenuint8_t const const scan_resp_datauint8_t scan_response_data_len)

Description ndash Set clear or update the advertisement and scan response data

Parameters ndash

bull adv_data ndash Raw data to be placed in advertisement packetbull adv_data_len ndash Data length for adv_data Max size 28 bytes (3 bytes are reserved to set

advertising AD type flags based on the selected Advertising mode and the user is not required toconfigure AD type flags in the advertisement payload)

bull scan_resp_data ndash Raw data to be placed in the scan response packet If NULL no changes aremade to the current scan response packet data

bull scan_response_data_len ndash Data length for scan_resp_data Max size 31 bytes

Return ndash Execution Status

This function requires a parameter raw adv_data to be sent to central Following is an example of itsdefinition

static uint8_t adv_data[] = 0x11 AD1 length = 170x03 AD1 Type = Complete list of 128-bit UUIDs0x1b0xc50xd50xa50x020x000xa60x87 AD1 = UUID MSBs0xe50x110x360x390xc00xba0x5a0xf00x0A AD2 Length = 100x09 AD2 Type = Complete local NamelsquoMrsquorsquoyrsquorsquo_rsquorsquoDrsquorsquoErsquorsquoVrsquo AD2 = ldquoMy_DEVrdquo

3132 Starting the Advertisement Process (at_ble_adv_start)Prototype ndashat_ble_status_t at_ble_adv_start (at_ble_adv_type_t typeat_ble_adv_mode_t modeat_ble_addr_t peer_addrat_ble_filter_type_t filtereduint16_t intervaluint16_t timeoutbool disable_randomness)

Description ndash Start advertisement process

Parameters ndash

bull type ndash Advertising type to be used can bendash AT_BLE_ADV_TYPE_UNDIRECTEDndash AT_BLE_ADV_TYPE_DIRECTEDndash AT_BLE_ADV_TYPE_SCANNABLE_UNDIRECTEDndash AT_BLE_ADV_TYPE_NONCONN_UNDIRECTEDndash AT_BLE_ADV_TYPE_DIRECTED_LDCndash AT_BLE_ADV_TYPE_SCAN_RESPONSE

bull mode ndash Advertising mode to be used can be

ATBTLC1000Establishing Connection with Central Device

copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 22

ndash AT_BLE_ADV_NON_DISCOVERABLEndash AT_BLE_ADV_GEN_DISCOVERABLEndash AT_BLE_ADV_LIM_DISCOVERABLEndash AT_BLE_ADV_BROADCASTER_MODE

bull peer_addr ndash Specify peer address when advertising type is AT_BLE_ADV_TYPE_DIRECTEDbull filtered ndash

ndash AT_BLE_ADV_FP_ANY ndash Allow scan and connection requests from anyonendash AT_BLE_ADV_FP_FILTER_SCANREQ ndash Allow scan request from White List devices onlyndash AT_BLE_ADV_FP_FILTER_CONNREQ ndash Allow connection request from White List devices

onlyndash AT_BLE_ADV_FP_FILTER_BOTH ndash Allow scan and connection requests from White List

devices onlybull interval ndash Advertisement interval (in 0625 ms units)bull timeout ndash Advertising timeout between 0x0001 and 0x028F in scale of seconds This parameter

must be set to 0 if type equals AT_BLE_ADV_TYPE_DIRECTEDbull disable_randomness ndash When disabled advertisements are performed at the exact interval

without adding random 10 ms tempo

Return ndash Execution Status

314 Advertisement ProcessIn this assignment the advertisement process is performed in the following configuration

bull Undirected (Type AT_BLE_ADV_TYPE_UNDIRECTED)bull Discoverable (Mode AT_BLE_ADV_GEN_DISCOVERABLE)bull No peer Address (peer_addr = NULL)bull No filtering (filtered = AT_BLE_ADV_FP_ANY)bull Advertisement interval 1s (interval = 1600)bull Maximum timeout (timeout 655)bull Randomness enabled (disable_randomness = FALSE)

3141 Starting the Advertisement Process1 Open startup_templatec file2 Declare the following ble_status global variable in startup_templatec as volatile

include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehvolatile at_ble_status_t ble_status

3 Declare the following adv_data global variable in startup_templatec as staticstatic uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD)0x09 AD2 Type = Complete local Name

ATBTLC1000Establishing Connection with Central Device

copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 23

My_SENS AD2 = ldquoMy_SENSrdquo

Note 1 The name of the device is to be changed (AD2 field)2 According to the new name AD2 length must be adapted to new AD2 content

4 Add the following start_advertisement function in startup_templatec prototype for thefunction void start_advertisement (void) also this can be added to avoid warningsvoid start_advertisement (void)printf(n Assignment 21 Start Advertisement)Set advertisement datable_status = at_ble_adv_data_set(adv_datasizeof(adv_data)NULL0)Start Advertisementble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550)if(ble_status = AT_BLE_SUCCESS)printf(n Failed to start advertisement)

5 Start the advertisement process by adding the following highlighted code to the application mainroutineint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Start Advertising process start_advertisement() Register PrimaryIncluded service in case of GATT Server while(true) Write application task

6 Click to save the project ltCtrl+Sgt

7 Click button to compile the project ltF7gt8 Verify that no build error appears in Atmel Studio output window

Figure 3-7 Atmel Studio Output Window

ATBTLC1000Establishing Connection with Central Device

copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 24

9 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt10 Open Microchip SmartConnect Application on Android or iOS device and tap START SCAN button

Note  The device must appear in Microchip SmartConnect Application

Figure 3-8 Microchip SmartConnect Application

11 Terminal must display the following Log outputFigure 3-9 Log Output Window

32 Managing GAP eventsThe management of the Bluetooth connection at the host MCU level is done through reception andhandling of events reported by the ATBTLC1000 These events are generated by ATBTLC1000 GAPGATT and L2CAP layers to notify the host about the ongoing Bluetooth interaction with other devices inits vicinity

ATBTLC1000Establishing Connection with Central Device

copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 25

To manage events coming from the ATBTLC1000 module the host driver must provide able_mgr_events_callback_handler function that allows registration of application callback functionto be executed on each event reported by the ATBTLC1000 module

Prototype ndashbool ble_mgr_events_callback_handler(ble_mgr_event_cb_t event_cb_typeble_mgr_event_t event_typeconst voidble_event_handler)

Description ndash Used by ProfileServiceApplication to register the Bluetooth Low Energy eventsrsquocallbacks

Parameters ndash

event_cb_type ndash types of actions to perform on callbacks can be either

REGISTER_CALL_BACK or

UNREGISTER_CALL_BACKevent_type ndash Any one of the event types can be used

BLE_GAP_EVENT_TYPEBLE_GATT_CLIENT_EVENT_TYPEBLE_GATT_SERVER_EVENT_TYPEBLE_L2CAP_EVENT_TYPEBLE_GATT_HTPT_EVENT_TYPEBLE_DTM_EVENT_TYPEBLE_CUSTOM_EVENT_TYPEble_event_handler ndash pointer to handler list

Structure ble_gap_event_cb_t defines the GAP callbacks Similarly structuresble_gatt_client_event_cb_t and ble_gatt_server_event_cb_t define the callbacks of GATTevents

typedef struct ble_gap_event_cb BLE Undefined events received from ATBTLC1000 which is not handled in Libraryble_event_callback_t undefined BLE scan information contains the peer device scan information Refer ref at_ble_scan_info_tble_event_callback_t scan_info Once the BLE scan timeout or scan stop triggers the scan report event Refer ref at_ble_scan_report_tble_event_callback_t scan_report Advertisement complete event Refer ref at_ble_adv_cmp_evt_tble_event_callback_t advt_cmp Advertisement report in case of advertisement stopped due to advertisement timeout Refer ref at_ble_adv_report_tble_event_callback_t adv_report BLE device own random address changed event Refer ref at_ble_rand_addr_changed_tble_event_callback_t rand_addr_changed BLE connected event device connected to peer device Refer ref at_ble_connected_tble_event_callback_t connected BLE disconnected event device disconnected from peer device Refer ref at_ble_disconnected_tble_event_callback_t disconnected Connection parameter update done on peer device and own device Refer ref at_ble_conn_param_update_done_t

ATBTLC1000Establishing Connection with Central Device

copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 26

ble_event_callback_t conn_parameter_update_done Connection parameter update request from peer device Refer ref at_ble_conn_param_update_request_tble_event_callback_t conn_param_update_request Pair complete event as part of end of pairing process Refer ref at_ble_pair_done_tble_event_callback_t pair_done Pair request event from Central device Refer ref at_ble_pair_request_tble_event_callback_t pair_request Slave security request received from peer Peripheral device Refer ref at_ble_slave_sec_request_tble_event_callback_t slave_sec_request Pair Key request event from Peer central device Refer ref at_ble_pair_key_request_tble_event_callback_t pair_key_request encryption request comes from the peer device Needs to supply the bonding information which is stored earlier ref at_ble_encryption_request_tble_event_callback_t encryption_request encryption status changed event received from SMP once the encryption is started ref at_ble_encryption_status_changed_tble_event_callback_t encryption_status_changed Event triggered once the Resolve random address is resolved using supplied IRKs ref at_ble_resolv_rand_addr_status_tble_event_callback_t resolv_rand_addr_status Event is triggered once the connection signature information indication received ref at_ble_sign_counter_tble_event_callback_t sign_counters_ind Peer attribute information indication received Event ref at_ble_peer_att_info_ind_tble_event_callback_t peer_att_info_ind Peer device channel map received indication ref at_ble_channel_map_tble_event_callback_t con_channel_map_indble_gap_event_cb_t

Note  Callback definition is application-specific If the application layer requires a specific event callbackthen the specific member of the structure is to be assigned with the address of the callback function

In this assignment two callback functions on Connected and Disconnected GAP events are usedThis allows the application to restart the advertising process on Disconnect manage connectioninformation and startstop of sensor data update

321 Handling of Connected and Disconnected GAP Events1 Open the startup_templatec file2 Define the following software flags as global variables in startup_templatec file volatile

bool timer_flag = false and volatile bool connected_flag = false3 Declare and implement the following ble_connected_cb function in the

startup_templatec file Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param)printf(n Assignment 22 Application connected )connected_flag = trueALL_UNUSED(param)return AT_BLE_SUCCESS

4 Declare and implement the following ble_disconnected_cb function instartup_templatec file Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param)printf(n Assignment 22 Application disconnected )connected_flag = falsestart_advertisement()ALL_UNUSED(param)return AT_BLE_SUCCESS

ATBTLC1000Establishing Connection with Central Device

copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 27

5 Declare the following static GAP callback structure in ldquostartup_templatecrdquo filestatic const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTEDdisconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

6 Add the following register_btlc1000_callbacks function in startup_templatec Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void) Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks)ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACKBLE_GAP_EVENT_TYPEampapp_gap_handle)if (ble_status = true)printf(nError when Registering ATBTLC1000 callbacks)

7 Add the register_btlc1000_callbacks function call prior to start advertisement in theapplication main routineint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Gap Callbacks register_btlc1000_callbacks ( ) Start Advertising process start_advertisement() Register PrimaryIncluded service in case of GATT Server while(true) Write application task

8 Add the ble_event_task function call in the project main loop to handle the different incomingevents from ATBTLC1000while(true)ble_event_task()

9 Press button ltF7gt to compile the project and verify that no build error appear in the AtmelStudio output window

ATBTLC1000Establishing Connection with Central Device

copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 28

Figure 3-10 Atmel Studio Output Window

10 Click ldquo rdquo to save the project ltCtrl+Sgt

11 Click ldquo rdquo to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt and checkcorrect initialization of the ATBTLC1000

12 Open the Microchip SmartConnect application on Androidtrade or iOS device13 Press the ltStart Scangt button and pair peripherals by selecting them in the device list (pass key

123456)Note 

1 Pairing event handling is carried out by ble_managerc Refer toble_pair_key_request_handler() for code implementation The default pass key of123456 is also fixed inside this function This can be changed here

Figure 3-11 Console Log Window

Note  After peripheral pairing no services information are displayed in Microchip SmartConnectapplication as no service is currently defined and started on peripheral side

ATBTLC1000Establishing Connection with Central Device

copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 29

4 SettingHandling of Pre-Defined ServiceThe management of services are done in the GATT layer of the ATBTLC1000 ROM coded Bluetooth LowEnergy Stack The GATT transactions are based on high-level nested objects called Profiles Servicesand Characteristics stored in SRAM memory of ATBTLC1000 device This assignment adds the pre-defined service of information service from ASF library

Figure 4-1 ATBTLC1000 GATT Layers

bull ProfilesProfiles are not available in the Bluetooth Low Energy peripheral they are simply a pre-definedcollection of services that have been compiled by either the Bluetooth SIG (adopted GATT basedprofile) or by the application developer (custom profiles) For example the Heart Rate Profilecombines the Heart Rate Service and the Device Information Service

Note  The complete list of officially adopted GATT-based profiles is available on the BluetoothDeveloper Portal

bull ServicesA service is a collection of data and associated behaviors which accomplish a particular function orfeature of a device or portions of a device A service may reference other primary or secondaryservices andor a set of characteristics that make up the service Each service distinguishes itselffrom other services by means of a unique numeric ID called as UUID which can be either 16-bit(for officially adopted Bluetooth Low Energy Services) or 128-bit (for custom services)

Note  A full list of officially adopted services and their UUID are seen on the Bluetooth DeveloperPortal

bull CharacteristicsA characteristic is the lowest level concept in GATT transactions It contains a single data point withdifferent attributes such as notify read or write capabilities Similar to Services each characteristiccan be distinguished by a SIG-defined adopted UUID (16-bit) or custom (128-bit) UUID This UUIDensures interoperability across Bluetooth Low Energy devices The characteristics are important tointeract with in a Bluetooth Low Energy network In addition to standard UUID the custom UUID isused in case of specific application When characteristics with custom UUID are used in a devicethen it will be interoperable only with those devices that support these characteristics with customUUID

ATBTLC1000SettingHandling of Pre-Defined Service

copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 30

In this assignment the following steps are added to the Host MCU application to set up and handle adevice information service within the ATBTLC1000 module The following steps are added to the startupproject

bull Adding device info service component from ASFbull Configuring and loading the service

Figure 4-2 Device Information Service

41 Adding Device Info Service Component from ASF Wizard to ProjectTo use the ldquoofficially adopted GATT-based profilesrdquo from SIG ASF provides Bluetooth Low Energy servicecomponents including init functions that pre-define services in Host memory

Note  Before starting this assignment be sure to follow the steps mentioned in 2 Creating the Projectand Initializing and 3 Establishing Connection with Central Device

1 Click ASF gt ASF Wizard2 Search for ldquoBLE-Device Information Servicesrdquo and then click Add

ATBTLC1000SettingHandling of Pre-Defined Service

copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 31

Figure 4-3 Available Modules

3 Now ldquoBLE-Device Information Servicesrdquo (component) appears in ldquoSelected ModulesrdquoFigure 4-4 Selected Modules

4 Click Apply to add the component to the projectFigure 4-5 Adding the Modules to Project

5 The ldquoDevice Information Servicerdquo component is added to the project and is confirmed bydevice_information folder added in Solution Explorer

ATBTLC1000SettingHandling of Pre-Defined Service

copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 32

Figure 4-6 Device Information Service Added to Project

42 Configuring and Loading Device Information ServiceThe ATBTLC1000 Host driver provides a set of GATT functions that allows storing and updating theservices in ATBTLC1000 memories

Prototype at_ble_status_t at_ble_primary_service_define(at_ble_uuid_t uuidat_ble_handle_t service_handleat_ble_included_service_t included_service_listuint16_t included_service_countat_ble_characteristic_t charactristic_listuint16_t charactristic_count)

Description Defines a new primary service along with its included services and characteristics inATBTLC1000

Parameters

bull Uuid [In] ndash primary service UUIDbull service_handle [Out] ndash Service handle is returned herebull included_service_list [In] ndash an array of included service referencesbull included_service_count [In] ndash number of elements in included_service_listbull charactristic_list [InOut] ndash an array of characteristics included in the service this array

is updated with respective characteristics handlesbull charactristic_count[In] ndash number of elements in charactristic_list

Return Execution Status

This function requires an argument as GATT description structure of the service that is implemented Thepreviously added Device Info service component provides Bluetooth Low Energy service middlewareincluding the init functions that predefine the services See below ldquodis_init_servicerdquo from device infoBLE service (device_infohc)

Prototype ndash void dis_init_service(dis_gatt_service_handler_t device_info_serv)Description ndash Initialize the device information service handler in the host MCU memory

Parameters ndash

ATBTLC1000SettingHandling of Pre-Defined Service

copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 33

bull device_info_serv [Inout] pointer to device info GATT description handler to beupdated

Return None

Here is a picture of GATT device info service descriptor definition in Host memory

device_info_serv-gtserv_handle = 0device_info_serv-gtserv_uuidtype = AT_BLE_UUID_16device_info_serv-gtserv_uuiduuid[0] = (uint8_t) DIS_SERVICE_UUIDdevice_info_serv-gtserv_uuiduuid[1] = (uint8_t) (DIS_SERVICE_UUID gtgt 8)Characteristic Info for Manufacturer Name Stringdevice_info_serv-gtserv_chars[0]char_val_handle = 0 handle stored here device_info_serv-gtserv_chars[0]uuidtype = AT_BLE_UUID_16device_info_serv-gtserv_chars[0]uuiduuid[0] = (uint8_t) IS_CHAR_MANUFACTURER_NAME_UUID UUID Manufacturer Name String device_info_serv-gtserv_chars[0]uuiduuid[1] = (uint8_t) (DIS_CHAR_MANUFACTURER_NAME_UUID gtgt 8) UUID Manufacturer Name String device_info_serv-gtserv_chars[0]properties = AT_BLE_CHAR_READ Properties memcpy(char_valuemanufacturer_nameDEFAULT_MANUFACTURER_NAMEDIS_CHAR_MANUFACTURER_NAME_INIT_LEN)device_info_serv-gtserv_chars[0]init_value = char_valuemanufacturer_namedevice_info_serv-gtserv_chars[0]value_init_len = DIS_CHAR_MANUFACTURER_NAME_INIT_LENdevice_info_serv-gtserv_chars[0]value_max_len = DIS_CHAR_MANUFACTURER_NAME_MAX_LENif BLE_PAIR_ENABLEdevice_info_serv-gtserv_chars[0]value_permissions = AT_BLE_ATTR_READABLE_REQ_AUTHN_NO_AUTHR permissions elsedevice_info_serv-gtserv_chars[0]value_permissions = AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR permissions endifdevice_info_serv-gtserv_chars[0]user_desc = NULL user defined name device_info_serv-gtserv_chars[0]user_desc_len = 0device_info_serv-gtserv_chars[0]user_desc_max_len = 0device_info_serv-gtserv_chars[0]user_desc_permissions = AT_BLE_ATTR_NO_PERMISSIONS user description permissionsdevice_info_serv-gtserv_chars[0]client_config_permissions = AT_BLE_ATTR_NO_PERMISSIONS client config permissionsdevice_info_serm hdsv-gtserv_chars[0]server_config_permissions = AT_BLE_ATTR_NO_PERMISSIONS server config permissionsdevice_info_serv-gtserv_chars[0]user_desc_handle = 0 user desc handlesdevice_info_serv-gtserv_chars[0]client_config_handle = 0 client config handlesdevice_info_serv-gtserv_chars[0]server_config_handle = 0 server config handlesdevice_info_serv-gtserv_chars[0]presentation_format = NULL presentation format

Note  In case of custom service the above definition initialization must be taken care of by thedeveloper

421 Procedure to Configure and Load Device Info Service1 Include device info service header file (device_infoh) at the beginning of

startup_templatec fileinclude ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehinclude device_infoh

2 Define a device info service handler as global in startup_templatec file Serviceshandlers dis_gatt_service_handler_t dis_service_handler

ATBTLC1000SettingHandling of Pre-Defined Service

copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 34

3 Add dis_init_service and at_ble_primary_service_define functions as called abovethe advertisement start in main routine Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service)dis_init_service (ampdis_service_handler) Define the primary service in the GATT server database if ((dis_primary_service_define (ampdis_service_handler)) = AT_BLE_SUCCESS)printf(Device Information Service definition failed) Start Advertising process start_advertisement()

4 Click to save the project ltCtrl+Sgt and compile the project by pressing button ltF7gt5 Verify that no build error appears in Atmel Studio output window

Figure 4-7 Atmel Studio Output Window

6 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt7 Open ldquoMicrochip SmartConnectrdquo application on Android or iOS device8 Press ltStart Scangt button and connect to peripheral

Note  The device name is a characteristic and contains the name of the device This device namecan be read by the central device to know the name of the device in order to differentiate thedevices This is being set using at_ble_device_name_set()API The device name is set bydefault when ble_device_init is called and the value is pre-defined using BLE_DEVICE_NAMEThe device name can also be sent as part of advertisement payload to be same as the oneconfigured in at_ble_adv_data_set() API It is the responsibility of users to keep the devicename set in advertisement payload the same as that configured inat_ble_device_name_set()

9 The Service must now be visible after pairing with peripheral under Microchip SmartConnectapplication

ATBTLC1000SettingHandling of Pre-Defined Service

copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 35

Figure 4-8 Service List in Microchip SmartConnect Application

Note  If the pairing of ATBTLC1000 with Microchip Smart connect is not successful then removethe pairing information from mobile by selecting ldquoForget Devicerdquo from the mobile settings Thereason for this is that the mobile app stores the previous pairing information but the ATBTLC1000device lost the previous pairing information due to RESET since it was stored on temporary storage(RAM)

10 The serial terminal must display the following log output windowFigure 4-9 Console Log Window

ATBTLC1000SettingHandling of Pre-Defined Service

copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 36

5 Setting up and Handling Custom ServiceThe previous assignment describes the handling of Bluetooth Low Energy SIG defined device infoservice which is the predefined service available in ASF component This assignment describes thecustom service So the service initialization needs to be implemented In the context of customizedenvironment service the following service description is pushed in ATBTLC1000 memory

Figure 5-1 Custom Service

Custom Environment Service Description

bull UUID type ndash Custom UUID (128-bit)bull UUID ndash 1bc5d5a5-0200-a687-e511-3639c1ba5af0

Characteristic 0 (Temperature)

bull User Description ndash Temperaturebull UUID type ndash Custom UUID (128-bit)bull UUID ndash 1bc5d5a5-0200-a687-e511-3639d8ba5af0bull Properties ndash Read Notifybull Value permission ndash No authorization requiredbull Client config permission ndash No permissionbull Server config permission ndash No permission

Note  In this definition UUIDs are generated randomly Custom servicescharacteristics are free to useany 128-bit UUID less than the base UUID There is no reserved space for vendors to use 16-bit or 32-bitUUIDs

With this definition any temperature change is notified to the central The notify mechanism allows thecentral to know when the data changes When notify property of the Client Characteristic ConfigurationDescriptor is enabled by the central and the device writes the new value then this updated value isautomatically sent to the central through a notification The central is not required to send readcharacteristic commands explicitly to the peripheral (GATT server)

To setup and handle the custom environment service in ATBTLC1000 module the following steps areadded to the Host MCU application

bull Configure and load the custom servicebull Update Temperature characteristic and notify to the central devicebull Receive and handle notification from the Host device

ATBTLC1000Setting up and Handling Custom Service

copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 37

Figure 5-2 Custom Service Flowchart

51 Configuring and Loading the Custom Environment ServiceThe ATBTLC1000 Host driver provides the following set of GATT functions that allows it to push andupdate the service descriptions in the ATBTLC1000 SRAM memory

Note  Before starting this assignment be sure to follow the steps mentioned in 2 Creating the Projectand Initializing and 3 Establishing Connection with Central Device

Prototype ndashat_ble_status_t at_ble_primary_service_define(at_ble_uuid_t uuidat_ble_handle_t service_handleat_ble_included_service_t included_service_listuint16_t included_service_countat_ble_characteristic_t charactristic_listuint16_t charactristic_count)

Description ndash Defines a new primary service along with its included services and characteristics inATBTLC1000 module

Parameters

bull Uuid [In] ndash primary service UUIDbull service_handle [Out] ndash service handle is returned herebull included_service_list [In] ndash array of included service referencesbull included_service_count [In] ndash number of elements in included_service_listbull charactristic_list [InOut] ndash an array of characteristics included in the service this array

is update with respective characteristics handlesbull charactristic_count[In] ndash number of elements in charactristic_list

ATBTLC1000Setting up and Handling Custom Service

copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 38

Return ndash Execution Status

bull Characteristics ndashndash Characteristics definition is done through specific array of following

ldquoat_ble_characteristic_trdquo structure instancestypedef structat_ble_handle_t char_val_handle Handler (returned during service initialisation)at_ble_uuid_t uuid Characteristic UUID (type and value)at_ble_char_properties_t propertiesCharac Properties (read write notify)uint8_t init_value initial valueuint16_t value_init_len initial value lengthuint16_t value_max_len value max lengthat_ble_attr_permissions_t value_permissions access authorization and authenticationuint8_t user_desc User descriptionuint16_t user_desc_len User description lengthuint16_t user_desc_max_len User description max lengthat_ble_char_presentation_t presentation_format Presentation formatat_ble_attr_permissions_t user_desc_permissions User description permissionat_ble_attr_permissions_t client_config_permissions client permissionat_ble_attr_permissions_t server_config_permissions server permissionat_ble_handle_t user_desc_handle description handlerat_ble_handle_t client_config_handle Client config handlerat_ble_handle_t server_config_handle Server config handler at_ble_characteristic_t

511 Procedure to Configure and Load Custom Environment Service1 Define the following service UUID and characteristic UUID in startup_templatec file

define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

2 Define the following environment service handler and characteristics variable as global instartup_templatec file Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

3 Add the following service initialization function custom_environment_service_init instartup_templatecvoid custom_environment_service_init(void) at_ble_uuid_t environment_service_uuiduint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUIDuint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperatureenvironment_service_characs[0]user_desc_len = 10environment_service_characs[0]user_desc_max_len = 10environment_service_characs[0]uuidtype = AT_BLE_UUID_128memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16)environment_service_characs[0]properties = AT_BLE_CHAR_READ |AT_BLE_CHAR_NOTIFYenvironment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature valueenvironment_service_characs[0]value_permissions =(AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuidampenvironment_service_handlerNULL0environment_service_characs1)=AT_BLE_SUCCESS)printf(n Assignment 41 Failed to Initialize custom environment service)

ATBTLC1000Setting up and Handling Custom Service

copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 39

elseprintf(n Assignment 41 Initialize custom environment service)

4 Declare and implement the following GATT event callback functioncustom_char_changed_app_event in startup_templatec file If a client (central) enablesnotifications for a server the server (peripheral) receives an AT_BLE_CHARACTERISTIC_CHANGEDevent and this event callback is called Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

5 Declare and implement the following custom_notification_confirmation_handlerfunction in startup_templatec file Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param)at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )paramif (event_param-gtstatus == AT_BLE_SUCCESS)printf(n Assignment 41Notification Successfully sent over the air) else printf(n Assignment 41Sending Notification over the air failed)return AT_BLE_SUCCESS

6 Declare the following GATT server callback structure in startup_templatec file Thisassignment uses two GATT callbacksstatic const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handlercharacteristic_changed = custom_char_changed_app_event

7 Add the following register_gatt_server_callbacks function in startup_templatec toregister GATT server callback for notification confirmation event Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks)ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACKBLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle)if (ble_status = true)printf(nError when Registering ATBTLC1000 callbacks)

8 Add custom_environment_service_init and register_gatt_server_callbacksfunction calls prior to start advertisement in the application main routine to initialize custom serviceand to register the GATT server callbacksint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()

ATBTLC1000Setting up and Handling Custom Service

copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 40

endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks() Custom service init custom_environment_service_init ( ) Register Gatt server callbacks register_gatt_server_callbacks ( ) Start Advertising process start_advertisement()while(true)ble_event_task()

9 Click to save the project ltCtrl+Sgt

10 Compile the project by pressing button ltF7gt11 Verify that no build error appears in the Atmel Studio output window

Figure 5-3 Atmel Studio Output Window

12 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt13 Open the ldquoMicrochip SmartConnectrdquo application on Android or iOS device14 Connect and pair to the peripheral (pass key 123456)15 Custom service must now be visible after pairing with peripheral under Microchip SmartConnect

application

ATBTLC1000Setting up and Handling Custom Service

copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 41

Figure 5-4 Service List in Microchip SmartConnect Application

Note  Custom service is displayed as unknown service in the above figure as this service is not aSIG-defined service

Figure 5-5 General Information

16 Serial terminal client must display the following Log output

ATBTLC1000Setting up and Handling Custom Service

copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 42

Figure 5-6 Log Output Window

52 Updating the Temperature CharacteristicIn the previous assignment the custom Temperature characteristic is defined with a notify attribute Thistype of attribute requires notification to be sent to central when a new characteristic value is availableThe update of any ldquonotifyrdquo characteristic value is based on following interaction between the Host MCUand the ATBTLC1000Figure 5-7 Characteristic Notification

521 Setting a Characteristic Value ( at_ble_characteristic_value_set)Prototype ndashat_ble_status_t at_ble_characteristic_value_setat_ble_handle_t handleuint8_t valueuint16_t len)

Description ndash Sets a characteristic value in ATBTLC1000 memory

Parameters ndash

ATBTLC1000Setting up and Handling Custom Service

copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 43

bull handle [inout] ndash Pointer to Characteristic handle to be changedbull value [in] ndash New valuebull len [in] ndash Value length in bytes

Return ndash Execution Status

522 Sending a Notification (at_ble_notification_send)Prototype ndashat_ble_status_t at_ble_notification_send(at_ble_handle_t conn_handleat_ble_handle_t attr_handle)

Description ndash Sends a Notification

Parameters ndash

bull conn_handle[in] ndash handle of the connection to be notifiedbull attr_handle [in] ndash handle of the attribute originating the notification

Return ndash Execution Status

523 Sending Temperature Information Once in Every 10 Seconds to Central1 Modify the following ldquotimer_callback_fnrdquo callback function from the startup_templatec

filestatic void timer_callback_fn(void)timer_flag = true

2 hw_timer_init()in main routine of startup_templatec initializes the hardware timer3 If a client (Central) enables the notifications for a server the server (Peripheral) receives an

AT_BLE_CHARACTERISTIC_CHANGED event callback then start the periodic 10 second timer forsending the notification Add the following code in previously definedcustom_char_changed_app_event function Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))timer_flag = falsehw_timer_start(10)printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

4 Declare the following Temperature_value global variable in startup_templatec staticuint8_t Temperature_value = 25 as static

5 Add the following send_temperature_notification function in startup_templatec tosend temperature every 10 seconds Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++

ATBTLC1000Setting up and Handling Custom Service

copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 44

if(Temperature_value gt 75)Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set(environment_service_characs[0]char_val_handle(uint8_t )ampTemperature_valuesizeof(Temperature_value))ble_status = at_ble_notification_send(0environment_service_characs[0]char_val_handle)if(ble_status = AT_BLE_SUCCESS)printf(fail to send temperature update notification )

6 Add the following code in main routine to send temperature data every 10 secondswhile (1) ble_event_task()if(connected_flag == true ampamp timer_flag == truetimer_flag = falsesend_temperature_notification()

7 Click to save the project ltCtrl+Sgt

8 Compile the project by pressing the button ltF7gt9 Verify that no build error appears in Atmel Studio output window

Figure 5-8 Atmel Studio Output Window

10 Click to program the project binary on the L21 Xplained XSTK11 Open ldquoMicrochip SmartConnectrdquo Application on Android or iOS device12 Connect and pair to the peripheral (pass key 123456)13 Click NOTIFY to start the notification14 Temperature information in HEX values must be displayed in Microchip SmartConnect application

ATBTLC1000Setting up and Handling Custom Service

copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 45

Figure 5-9 Notification Window

15 Serial terminal must display the following log outputFigure 5-10 Log Output Window

ATBTLC1000Setting up and Handling Custom Service

copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 46

6 Appendix A Software Solution - Pre-Defined SvcThe following is the code implementation for handling of pre-defined service done in 4 SettingHandlingof Pre-Defined Service

- Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehinclude device_infoh

volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false Services handlers dis_gatt_service_handler_t dis_service_handler

static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void) Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks)

ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 47

ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

timer callback function static void timer_callback_fn(void) Add timer callback functionality here

void button_cb(void) Add button callback functionality here

int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks()

Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service) dis_init_service(ampdis_service_handler) Define the primary service in the GATT server database if((dis_primary_service_define(ampdis_service_handler)) = AT_BLE_SUCCESS) printf(Device Information Service definition failed)

Start Advertising process start_advertisement() while(true) ble_event_task()

ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 48

7 Appendix B Software Solution - Custom ServiceThe following is the code implementation for handling of pre-defined service done in 5 Setting up andHandling Custom Service

- Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templateh

volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false

static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0

define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

void custom_environment_service_init(void) at_ble_uuid_t environment_service_uuid uint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUID uint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128 memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperature environment_service_characs[0]user_desc_len = 10 environment_service_characs[0]user_desc_max_len = 10 environment_service_characs[0]uuidtype = AT_BLE_UUID_128 memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16) environment_service_characs[0]properties = AT_BLE_CHAR_READ | AT_BLE_CHAR_NOTIFY environment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature value environment_service_characs[0]value_permissions = (AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuid ampenvironment_service_handlerNULL0 environment_service_characs1)=AT_BLE_SUCCESS) printf(n Assignment 41 Failed to Initialize custom environment service) else printf(n Assignment 41 Initialize custom environment service)

Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param) at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )param if (event_param-gtstatus == AT_BLE_SUCCESS) printf(n Assignment 41Notification Successfully sent over the air)

ATBTLC1000Appendix B Software Solution - Custom Service

copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 49

else printf(n Assignment 41Sending Notification over the air failed) return AT_BLE_SUCCESS

static at_ble_status_t custom_char_changed_app_event(void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle -gt char_new_value[0])) timer_flag = false hw_timer_start(10) printf(n Assignment 41Characteristic changed event) return AT_BLE_SUCCESS

static const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handler characteristic_changed = custom_char_changed_app_event

Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void)

ATBTLC1000Appendix B Software Solution - Custom Service

copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 50

Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

timer callback function static void timer_callback_fn(void) Add timer callback functionality here timer_flag = true

void button_cb(void) Add button callback functionality here

static uint8_t Temperature_value = 25

Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++ if(Temperature_value gt 75) Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set( environment_service_characs[0]char_val_handle (uint8_t )ampTemperature_value sizeof(Temperature_value)) ble_status = at_ble_notification_send(0 environment_service_characs[0]char_val_handle) if(ble_status = AT_BLE_SUCCESS) printf(fail to send temperature update notification )

int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register Gap ATBTLC1000 Callbacks register_btlc1000_callbacks()

Custom service init custom_environment_service_init()

ATBTLC1000Appendix B Software Solution - Custom Service

copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 51

Register Gatt server callback register_gatt_server_callbacks()

Start Advertising process start_advertisement() while(true) ble_event_task() if(connected_flag == true ampamp timer_flag == true) timer_flag = false send_temperature_notification()

ATBTLC1000Appendix B Software Solution - Custom Service

copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 52

8 Document Revision HistoryRev B - 42018

Section Changes

Document Revised contents to match various Bluetooth Low Energy standard versions

Rev A - 122017

Section Changes

Document Initial release

ATBTLC1000Document Revision History

copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 53

The Microchip Web Site

Microchip provides online support via our web site at httpwwwmicrochipcom This web site is used asa means to make files and information easily available to customers Accessible by using your favoriteInternet browser the web site contains the following information

bull Product Support ndash Data sheets and errata application notes and sample programs designresources userrsquos guides and hardware support documents latest software releases and archivedsoftware

bull General Technical Support ndash Frequently Asked Questions (FAQ) technical support requestsonline discussion groups Microchip consultant program member listing

bull Business of Microchip ndash Product selector and ordering guides latest Microchip press releaseslisting of seminars and events listings of Microchip sales offices distributors and factoryrepresentatives

Customer Change Notification Service

Microchiprsquos customer notification service helps keep customers current on Microchip productsSubscribers will receive e-mail notification whenever there are changes updates revisions or erratarelated to a specified product family or development tool of interest

To register access the Microchip web site at httpwwwmicrochipcom Under ldquoSupportrdquo click onldquoCustomer Change Notificationrdquo and follow the registration instructions

Customer Support

Users of Microchip products can receive assistance through several channels

bull Distributor or Representativebull Local Sales Officebull Field Application Engineer (FAE)bull Technical Support

Customers should contact their distributor representative or Field Application Engineer (FAE) for supportLocal sales offices are also available to help customers A listing of sales offices and locations is includedin the back of this document

Technical support is available through the web site at httpwwwmicrochipcomsupport

Microchip Devices Code Protection Feature

Note the following details of the code protection feature on Microchip devices

bull Microchip products meet the specification contained in their particular Microchip Data Sheetbull Microchip believes that its family of products is one of the most secure families of its kind on the

market today when used in the intended manner and under normal conditionsbull There are dishonest and possibly illegal methods used to breach the code protection feature All of

these methods to our knowledge require using the Microchip products in a manner outside theoperating specifications contained in Microchiprsquos Data Sheets Most likely the person doing so isengaged in theft of intellectual property

bull Microchip is willing to work with the customer who is concerned about the integrity of their code

ATBTLC1000

copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 54

bull Neither Microchip nor any other semiconductor manufacturer can guarantee the security of theircode Code protection does not mean that we are guaranteeing the product as ldquounbreakablerdquo

Code protection is constantly evolving We at Microchip are committed to continuously improving thecode protection features of our products Attempts to break Microchiprsquos code protection feature may be aviolation of the Digital Millennium Copyright Act If such acts allow unauthorized access to your softwareor other copyrighted work you may have a right to sue for relief under that Act

Legal Notice

Information contained in this publication regarding device applications and the like is provided only foryour convenience and may be superseded by updates It is your responsibility to ensure that yourapplication meets with your specifications MICROCHIP MAKES NO REPRESENTATIONS ORWARRANTIES OF ANY KIND WHETHER EXPRESS OR IMPLIED WRITTEN OR ORAL STATUTORYOR OTHERWISE RELATED TO THE INFORMATION INCLUDING BUT NOT LIMITED TO ITSCONDITION QUALITY PERFORMANCE MERCHANTABILITY OR FITNESS FOR PURPOSEMicrochip disclaims all liability arising from this information and its use Use of Microchip devices in lifesupport andor safety applications is entirely at the buyerrsquos risk and the buyer agrees to defendindemnify and hold harmless Microchip from any and all damages claims suits or expenses resultingfrom such use No licenses are conveyed implicitly or otherwise under any Microchip intellectualproperty rights unless otherwise stated

Trademarks

The Microchip name and logo the Microchip logo AnyRate AVR AVR logo AVR Freaks BeaconThingsBitCloud CryptoMemory CryptoRF dsPIC FlashFlex flexPWR Heldo JukeBlox KeeLoq KeeLoq logoKleer LANCheck LINK MD maXStylus maXTouch MediaLB megaAVR MOST MOST logo MPLABOptoLyzer PIC picoPower PICSTART PIC32 logo Prochip Designer QTouch RightTouch SAM-BASpyNIC SST SST Logo SuperFlash tinyAVR UNIO and XMEGA are registered trademarks ofMicrochip Technology Incorporated in the USA and other countries

ClockWorks The Embedded Control Solutions Company EtherSynch Hyper Speed Control HyperLightLoad IntelliMOS mTouch Precision Edge and Quiet-Wire are registered trademarks of MicrochipTechnology Incorporated in the USA

Adjacent Key Suppression AKS Analog-for-the-Digital Age Any Capacitor AnyIn AnyOut BodyComchipKIT chipKIT logo CodeGuard CryptoAuthentication CryptoCompanion CryptoControllerdsPICDEM dsPICDEMnet Dynamic Average Matching DAM ECAN EtherGREEN In-Circuit SerialProgramming ICSP Inter-Chip Connectivity JitterBlocker KleerNet KleerNet logo Mindi MiWimotorBench MPASM MPF MPLAB Certified logo MPLIB MPLINK MultiTRAK NetDetach OmniscientCode Generation PICDEM PICDEMnet PICkit PICtail PureSilicon QMatrix RightTouch logo REALICE Ripple Blocker SAM-ICE Serial Quad IO SMART-IS SQI SuperSwitcher SuperSwitcher II TotalEndurance TSHARC USBCheck VariSense ViewSpan WiperLock Wireless DNA and ZENA aretrademarks of Microchip Technology Incorporated in the USA and other countries

SQTP is a service mark of Microchip Technology Incorporated in the USA

Silicon Storage Technology is a registered trademark of Microchip Technology Inc in other countries

GestIC is a registered trademark of Microchip Technology Germany II GmbH amp Co KG a subsidiary ofMicrochip Technology Inc in other countries

All other trademarks mentioned herein are property of their respective companies

ATBTLC1000

copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 55

copy 2018 Microchip Technology Incorporated Printed in the USA All Rights Reserved

ISBN 978-1-5224-2921-0

Quality Management System Certified by DNV

ISOTS 16949Microchip received ISOTS-169492009 certification for its worldwide headquarters design and waferfabrication facilities in Chandler and Tempe Arizona Gresham Oregon and design centers in Californiaand India The Companyrsquos quality system processes and procedures are for its PICreg MCUs and dsPICreg

DSCs KEELOQreg code hopping devices Serial EEPROMs microperipherals nonvolatile memory andanalog products In addition Microchiprsquos quality system for the design and manufacture of developmentsystems is ISO 90012000 certified

ATBTLC1000

copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 56

AMERICAS ASIAPACIFIC ASIAPACIFIC EUROPECorporate Office2355 West Chandler BlvdChandler AZ 85224-6199Tel 480-792-7200Fax 480-792-7277Technical SupporthttpwwwmicrochipcomsupportWeb AddresswwwmicrochipcomAtlantaDuluth GATel 678-957-9614Fax 678-957-1455Austin TXTel 512-257-3370BostonWestborough MATel 774-760-0087Fax 774-760-0088ChicagoItasca ILTel 630-285-0071Fax 630-285-0075DallasAddison TXTel 972-818-7423Fax 972-818-2924DetroitNovi MITel 248-848-4000Houston TXTel 281-894-5983IndianapolisNoblesville INTel 317-773-8323Fax 317-773-5453Tel 317-536-2380Los AngelesMission Viejo CATel 949-462-9523Fax 949-462-9608Tel 951-273-7800Raleigh NCTel 919-844-7510New York NYTel 631-435-6000San Jose CATel 408-735-9110Tel 408-436-4270Canada - TorontoTel 905-695-1980Fax 905-695-2078

Australia - SydneyTel 61-2-9868-6733China - BeijingTel 86-10-8569-7000China - ChengduTel 86-28-8665-5511China - ChongqingTel 86-23-8980-9588China - DongguanTel 86-769-8702-9880China - GuangzhouTel 86-20-8755-8029China - HangzhouTel 86-571-8792-8115China - Hong Kong SARTel 852-2943-5100China - NanjingTel 86-25-8473-2460China - QingdaoTel 86-532-8502-7355China - ShanghaiTel 86-21-3326-8000China - ShenyangTel 86-24-2334-2829China - ShenzhenTel 86-755-8864-2200China - SuzhouTel 86-186-6233-1526China - WuhanTel 86-27-5980-5300China - XianTel 86-29-8833-7252China - XiamenTel 86-592-2388138China - ZhuhaiTel 86-756-3210040

India - BangaloreTel 91-80-3090-4444India - New DelhiTel 91-11-4160-8631India - PuneTel 91-20-4121-0141Japan - OsakaTel 81-6-6152-7160Japan - TokyoTel 81-3-6880- 3770Korea - DaeguTel 82-53-744-4301Korea - SeoulTel 82-2-554-7200Malaysia - Kuala LumpurTel 60-3-7651-7906Malaysia - PenangTel 60-4-227-8870Philippines - ManilaTel 63-2-634-9065SingaporeTel 65-6334-8870Taiwan - Hsin ChuTel 886-3-577-8366Taiwan - KaohsiungTel 886-7-213-7830Taiwan - TaipeiTel 886-2-2508-8600Thailand - BangkokTel 66-2-694-1351Vietnam - Ho Chi MinhTel 84-28-5448-2100

Austria - WelsTel 43-7242-2244-39Fax 43-7242-2244-393Denmark - CopenhagenTel 45-4450-2828Fax 45-4485-2829Finland - EspooTel 358-9-4520-820France - ParisTel 33-1-69-53-63-20Fax 33-1-69-30-90-79Germany - GarchingTel 49-8931-9700Germany - HaanTel 49-2129-3766400Germany - HeilbronnTel 49-7131-67-3636Germany - KarlsruheTel 49-721-625370Germany - MunichTel 49-89-627-144-0Fax 49-89-627-144-44Germany - RosenheimTel 49-8031-354-560Israel - RarsquoananaTel 972-9-744-7705Italy - MilanTel 39-0331-742611Fax 39-0331-466781Italy - PadovaTel 39-049-7625286Netherlands - DrunenTel 31-416-690399Fax 31-416-690340Norway - TrondheimTel 47-7289-7561Poland - WarsawTel 48-22-3325737Romania - BucharestTel 40-21-407-87-50Spain - MadridTel 34-91-708-08-90Fax 34-91-708-08-91Sweden - GothenbergTel 46-31-704-60-40Sweden - StockholmTel 46-8-5090-4654UK - WokinghamTel 44-118-921-5800Fax 44-118-921-5820

Worldwide Sales and Service

copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 57

  • Introduction
  • Table of Contents
  • 1 Getting Started
    • 11 Software Prerequisites
      • 111 Installation Steps of Atmel Studio 7
        • 12 Software Setup
          • 121 Installation of Microchip SmartConnect application on a Mobile device
            • 13 ATBTLC1000 Embedded Firmware
            • 14 ATBTLC1000 Host Software API
            • 15 Hardware Prerequisites
              • 151 SMARTtrade SAM L21 Xplained Pro
              • 152 ATBTLC1000ZR Xplained Pro Extension board
                • 16 Hardware Setup
                  • 2 Creating the Project and Initializing
                    • 21 Creating Project from ASF
                    • 22 Configuring ASF for ATBTLC1000-ZR
                    • 23 Compiling and Testing the Project
                      • 3 Establishing Connection with Central Device
                        • 31 Configuring and Starting the Advertisement Process
                          • 311 Flags (AD Type 0x00)
                          • 312 Available Service UUID (AD Types 0x02 to 0x07)
                          • 313 Device Name (AD Types 0x08 to 0x09)
                            • 3131 Setting the Advertisement Payload (ble_advertisement_data_set)
                            • 3132 Starting the Advertisement Process (at_ble_adv_start)
                              • 314 Advertisement Process
                                • 3141 Starting the Advertisement Process
                                    • 32 Managing GAP events
                                      • 321 Handling of Connected and Disconnected GAP Events
                                          • 4 SettingHandling of Pre-Defined Service
                                            • 41 Adding Device Info Service Component from ASF Wizard to Project
                                            • 42 Configuring and Loading Device Information Service
                                              • 421 Procedure to Configure and Load Device Info Service
                                                  • 5 Setting up and Handling Custom Service
                                                    • 51 Configuring and Loading the Custom Environment Service
                                                      • 511 Procedure to Configure and Load Custom Environment Service
                                                        • 52 Updating the Temperature Characteristic
                                                          • 521 Setting a Characteristic Value ( at_ble_characteristic_value_set)
                                                          • 522 Sending a Notification (at_ble_notification_send)
                                                          • 523 Sending Temperature Information Once in Every 10 Seconds to Central
                                                              • 6 Appendix A Software Solution - Pre-Defined Svc
                                                              • 7 Appendix B Software Solution - Custom Service
                                                              • 8 Document Revision History
                                                              • The Microchip Web Site
                                                              • Customer Change Notification Service
                                                              • Customer Support
                                                              • Microchip Devices Code Protection Feature
                                                              • Legal Notice
                                                              • Trademarks
                                                              • Quality Management System Certified by DNV
                                                              • Worldwide Sales and Service

    Table of Contents

    Introduction1

    1 Getting Started 411 Software Prerequisites 412 Software Setup413 ATBTLC1000 Embedded Firmware 514 ATBTLC1000 Host Software API 515 Hardware Prerequisites716 Hardware Setup 9

    2 Creating the Project and Initializing 1221 Creating Project from ASF 1222 Configuring ASF for ATBTLC1000-ZR 1523 Compiling and Testing the Project16

    3 Establishing Connection with Central Device 1831 Configuring and Starting the Advertisement Process1932 Managing GAP events 25

    4 SettingHandling of Pre-Defined Service 3041 Adding Device Info Service Component from ASF Wizard to Project 3142 Configuring and Loading Device Information Service 33

    5 Setting up and Handling Custom Service3751 Configuring and Loading the Custom Environment Service3852 Updating the Temperature Characteristic43

    6 Appendix A Software Solution - Pre-Defined Svc 47

    7 Appendix B Software Solution - Custom Service 49

    8 Document Revision History 53

    The Microchip Web Site 54

    Customer Change Notification Service54

    Customer Support 54

    Microchip Devices Code Protection Feature 54

    Legal Notice55

    Trademarks 55

    Quality Management System Certified by DNV56

    ATBTLC1000

    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 2

    Worldwide Sales and Service57

    ATBTLC1000

    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 3

    1 Getting StartedThis chapter describes the basic software and hardware requirements and setup

    11 Software Prerequisites

    111 Installation Steps of Atmel Studio 71 Download and install the Atmel Studio software2 Install the Advanced Software Framework (ASF) package

    Note  The software for ATBTLC1000-ZR is supported with ASF 3351 and above

    Note  For more information on the previous releases refer to the Atmel Studio Release Notes availableon the Microchip web page

    12 Software Setup

    121 Installation of Microchip SmartConnect application on a Mobile device1 Open the Apple Storereg (iPhoneiOS) or Google Playtrade Store (Android) on the mobile device2 Search for ldquoMicrochip SmartConnectrdquo3 Click Install to install application on the device The Microchip SmartConnect application is now

    installed on the mobile deviceFigure 1-1 Microchip SmartConnect Dashboard

    ATBTLC1000Getting Started

    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 4

    13 ATBTLC1000 Embedded FirmwareThe management of Bluetooth Low Energy communication is based on the network stack stored inATBTLC1000 ROM This stack requires parameters such as GAP parameters and attributes to befunctional which are pushed from Host controller into ATBTLC1000 internal SRAM using GenericTransport Layer (GTL)

    The ROM coded firmware embeds the layers of Bluetooth Low Energy stack that runs on top of theinternal hardcoded peripheral drivers and RTOS scheduler

    bull Generic Access Profile (GAP)GAP controls the Bluetooth Low Energy connection advertising makes the device visible to theoutside world and determines how two devices interact with each other GAP defines two mainroles for the Bluetooth Low Energy device Central and Peripheral

    bull Generic Attribute Profile (GATT) and Attribute Protocol (ATT)GATT defines how the Bluetooth Low Energy device transfers the data The GATT process isbased on services and characteristics stored in Attribute Protocol (ATT) ATT is a simple lookuptable stored in device SRAM

    bull Security Manager (SM)The Security Manager defines the procedure for pairing authentication and encryption betweenBLE devices This layer is mainly used if security is requested on that particular connection

    bull Logical Link Control and Adaptation Protocol (L2CAP)L2CAP supports high-level protocol multiplexing packet segmentationreassembly and conveyingthe quality of service information L2CAP permits applications to transmit and receive the datapackets with channel flow control and retransmission

    bull Direct test mode (DTM)DTM allows testing of the radios Physical Layer (PHY) by transmitting and receiving the test packetsequences This is often used in compliance and production line testing without the need of goingthrough the complete Bluetooth Low Energy Protocol Stack

    14 ATBTLC1000 Host Software APIThe ATBTLC1000 is provided with a dedicated Host software API layer The purpose of this API layer isto provide an easy and reliable solution to add Bluetooth Low Energy capabilities to any user applicationThe API provides a set of high level Bluetooth function with abstraction of the transport protocol usedbetween the host MCU and the ATBTLC1000

    ATBTLC1000Getting Started

    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 5

    Figure 1-2 Host Software API

    Figure 1-3 BluSDK File Architecture

    The API operation relies on a request-response mechanism The specific requests are sent toATBTLC1000 through dedicated API function call The event messages are then returned by theATBTLC1000 on request processing or on specific Bluetooth Low Energy events These event messagesare to be handled by the host device according to the user application requirements The following figureillustrates a typical Bluetooth Low Energy peripheral application flowchart

    ATBTLC1000Getting Started

    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 6

    Figure 1-4 Bluetooth Low Energy Peripheral Application Flowchart

    WARNING The user application must be non-blocking to ensure that the Bluetooth Low Energy events arehandled in time

    15 Hardware PrerequisitesThis document uses the ATBTLC1000ZR-XSTK kit The ATBTLC1000ZR-XSTK kit is comprised of theSAM L21 Xplained Pro (XPRO) and ATBTLC1000ZR XPRO extension board The following sectionsprovide an overview of these kits and their features

    151 SMARTtrade SAM L21 Xplained ProThe SMARTtrade SAM L21 Xplained Pro evaluation kit is used to evaluate the ATSAML21J18Bmicrocontroller This kit includes an on-board embedded debugger to program and debugATSAML21J18B The kit also contains an on-board current measurement circuitry which enables theuser to measure current profile over time without any external tools The connection with any XplainedPro modules or external component is possible through available external connectors which makes theboard perfect for prototyping the low-power applications

    ATBTLC1000Getting Started

    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 7

    Figure 1-5 SAM L21 Xplained Pro Module

    152 ATBTLC1000ZR Xplained Pro Extension boardThe ATBTLC1000ZR Xplained Pro extension evaluation kit is Bluetooth Low Energy SoC ATBTLC1000-ZR110CA module This extension is plugged to any of the supported host MCU Xplained Pro evaluationboards to quickly add Bluetooth Low Energy connectivity to the platform This kit provides easy access tothe features of the ATBTLC1000-ZR110CA Bluetooth Low Energy module and illustrates how to integratethe device in a custom design which is supported by the Atmel Studio integrated development platform

    ATBTLC1000Getting Started

    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 8

    Figure 1-6 ATBTLC1000ZR Xpro Board

    The ATBTLC1000ZR Xplained Pro extension board contains

    bull ATBLTC1000-ZR110CA Module ndash Bluetooth Low Energy module with 24 GHz Bluetooth LowEnergy ATBTLC1000-XR1100A SiP

    bull AT30TSE758A Digital Temperature Sensor ndash Integrated temperature sensor with nonvolatileregisters and serial EEPROM Compatible with two-wire (I2C) and SMBus serial interfaces

    bull Current Measurement Header ndash Allows measurement of the current consumption of the board Itmust be closed to enable power to the ATBTLC1000-ZR110CA module

    16 Hardware Setup1 Ensure that ATBTLC1000ZR-XPRO power consumption header is closed and that jumpers are

    placed on pins 2 to 3 of headers J105 J106 J107 and J108 as shown in the following figure

    ATBTLC1000Getting Started

    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 9

    Figure 1-7 ATBTLC1000ZR-XPRO Extension

    2 Connect the ATBTLC1000ZR-XPRO extension to EXT1 of SAM L21 XPRO as illustrated in thefollowing figureFigure 1-8 ATBTLC1000ZR-XPRO Extension connected with SAM L21 XPRO

    3 Connect the board to PC using the ldquoDebug USB ConnectorrdquoFigure 1-9 SAM L21 XPRO Connection to PC

    ATBTLC1000Getting Started

    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 10

    4 Now the Hardware is ready for development

    ATBTLC1000Getting Started

    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 11

    2 Creating the Project and InitializingThis chapter provides the process of creating an application startup project using Atmel Studio Prior tocreating a project the user must know hardware architecture and software requirements to configuredrivers

    The hardware connection between the SAM L21 XPRO and the ATBTLC1000ZR XPRO board isillustrated in following figure This SAM L21 board is used as host MCUFigure 2-1 ATBTLC1000ZR Xpro Board Connection with SAM L21

    Note  For more details refer to module datasheet and XPRO board design documentation

    21 Creating Project from ASFAdvanced Software Framework has a pre-configured Bluetooth Low Energy Startup template project thatincludes Bluetooth Low Energy software API for Host and ATBTLC1000 and their peripheral driverdependencies This is used as starting project for any Bluetooth Low Energy project development

    To create the project follow the steps below

    1 Search for the ldquoBLE-Startup Templaterdquo from the File gt New gt Example Project menu in AtmelStudio

    ATBTLC1000Creating the Project and Initializing

    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 12

    Figure 2-2 Advanced Software Framework_New Example Project

    Note  ATBTLC1000SAMB11 related projects are prefixed with ldquoBLErdquo making it easier to filter theproject in the dialogue box

    2 Select the appropriate ldquoBLE-Startup Templaterdquo project corresponding to the intended Host MCUXplained Pro board and then press OK button to import the BLE startup template project SelectldquoBLE-Startup Template ndash SAM L21 Xplained Pro SAML21J18Brdquo for this hands-onNote  Rev B XPRO boards can be identified by SAML21J18B silk screen marking below SAML21MCU

    3 The BLE startup project is now created and loaded in Atmel StudioFigure 2-3 Startup_Template Project

    ATBTLC1000Creating the Project and Initializing

    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 13

    Note  The main project routine of ldquoStartup Template projectrdquo already includes host MCU low levelinitialization BLE and ATBTLC1000 initialization The added ASF components in project can beviewed from ldquoASFgtASF Wizardrdquo Select the created project from Project drop down box

    Figure 2-4 ASF Wizard Window

    ndash BLE_STACK Platform Interface ndash Core manager of Bluetooth Low Energy Host API Itmanages ATBTLC1000 device initialization GAP and GATT events

    ndash Timer Driver ndash Task timer functionality by using a Timer Counter (TC) or Timer Counter forControl (TCC) peripheral

    ndash Console UART ndash Universal Asynchronous ReceiverTransmitter (UART) communication insynchronousblocking mode

    ndash Generic Board Support ndash Host MCU Board specific initializationndash System Drivers ndash Select MCUrsquos System peripheral drivers These drivers are included by

    default in ASF projects and manage the clocks and oscillator of the system4 The main routine contains the MCU low level initialization and ATBTLC1000 initialization The

    following figure illustrates the flowchart of the main routine

    ATBTLC1000Creating the Project and Initializing

    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 14

    Figure 2-5 Main Routine Flowchart

    22 Configuring ASF for ATBTLC1000-ZR1 The default ldquoStartup Template Projectrdquo is configured for ATBTLC1000-MR module with 6-Wire

    mode2 Navigate to Project properties Project gt Project properties gt Toolchain gt ARMGNU C Compiler gt

    Symbols3 The ATBTLC1000ZR-XSTK kit uses the ATBTLC1000-ZR110CA module Change symbol

    BLE_MODULE to BTLC1000_ZR and enable UART_FLOWCONTROL_4WIRE_MODE forATBTLC1000-ZR module as shown in the figure belowFigure 2-6 Startup Template Project Window

    Note  This configuration change is not required for ATBTLC1000-MR module

    ATBTLC1000Creating the Project and Initializing

    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 15

    23 Compiling and Testing the Project

    1 Click the ldquo rdquo button ltF7gt to compile the project2 Verify that no build error appears in Atmel Studio output window

    Figure 2-7 Atmel Studio Output Window

    3 Connect the SAM L21 XPRO to PC (if not already done)4 To access the project properties go to Project gt

    STARTUP_TEMPLATE_SAML21_XPLAINED_PRO_B1 PropertiesFigure 2-8 Compiling the Project

    5 In project properties click the Tool tab and select the EDBG of SAM L21 Xplained Pro board asdebuggerprogrammerFigure 2-9 Selection of DebuggerProgrammer

    6 Open any Terminal application (for example TeraTerm) Select the COM port enumerated on thePC and set the following parameters

    ndash EDBG associated COM Port (Check Windows Device Manager)

    ATBTLC1000Creating the Project and Initializing

    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 16

    ndash Baudrate 115200ndash Parity Nonendash One Stop bitndash Enable Hardware Flow Control

    7 Click to save the project ltCtrl+Sgt

    8 Click rdquo to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt9 The initialization of the ATBTLC1000ZR module must return the Bluetooth Device Address and

    Address typeFigure 2-10 Console Log Window

    Note 1 If initialization fails make sure to verify the hardware configuration is aligned with the

    description refer to 16 Hardware Setup2 The initialization of ATBTLC1000 takes few seconds due to patch download process

    ATBTLC1000Creating the Project and Initializing

    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 17

    3 Establishing Connection with Central DeviceThe Bluetooth Low Energy connectivity is added to the application that is used to connect with theBluetooth Low Energy central The first step is about the management of Bluetooth connection with acentral device When using ATBTLC1000 device this process is managed by dedicated API function callsassociated with ATBTLC1000 events handling

    The interaction between Host MCU ATBTLC1000 and Bluetooth Low Energy central during connectionestablishment is as follows

    Figure 3-1 Establishing Connection with Central Device

    On host MCU side the management of the Bluetooth connection is performed through three main steps1 GAP callback registration2 Advertisement configuration3 ATBTLC1000 event handling

    In the existing project main routine the integration of these steps are highlighted in red in the followingflowchart

    ATBTLC1000Establishing Connection with Central Device

    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 18

    Figure 3-2 Main Routine Flow Chart

    31 Configuring and Starting the Advertisement ProcessThe Bluetooth Low Energy devices transmit advertisement packets to show their presence to nearbydevices The advertisement packet is sent periodically at a time interval defined by variableldquoadvintervalrdquo defined in Bluetooth SIG specification To avoid any collision with other wireless networksuch as Wi-Fireg a channel change is performed for each advertisement packet sent (data frequencyhopping) as illustrated in the following figureFigure 3-3 Advertisement Process

    During advertisement the payload structure to be sent differs from application to application and is set byusing encapsulated packet data unit type information (PDU_TYPE)

    ATBTLC1000Establishing Connection with Central Device

    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 19

    Figure 3-4 PDU Advertising

    The following table lists the different PDU types used according to device role

    Advertising event types (PDU_TYPE) Broadcaster Observer Peripheral Central

    Connectible undirected event (ADV_IND) Excluded Excluded Mandatory Excluded

    Connectible directed event(ADV_DIRECT_IND) Excluded Excluded Optional Excluded

    Non-connectible undirected event(ADV_NONCONN_IND) Mandatory Excluded Optional Excluded

    Scannable undirected event (ADV_SCAN_IND) Optional Excluded Optional Excluded

    As our device acts as a Bluetooth Low Energy peripheral the connectable undirected event (ADV_IND)advertising type is used See the following description about the ADV_IND advertisement packetFigure 3-5 ADV_IND Advertisement Packet

    The ADV_IND payload contains different Advertisement Data types (AD0 - ADn) which provide specificinformation to the central device such as device short name Tx power level and list of availableservices UUIDs The number of advertisement data types that can be added to the advertisementpayload are limited by the advertisement payload size of 31 octets

    Following is a list of advertisement data types that are commonly found in ADV_IND payload

    ATBTLC1000Establishing Connection with Central Device

    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 20

    311 Flags (AD Type 0x00)The flags describe the basic device capability such as BLE support BLE discoverable mode BREDRsupport and simultaneous BRED

    312 Available Service UUID (AD Types 0x02 to 0x07)The Bluetooth Low Energy advertisement payloads are limited to 31 bytes Therefore only two 128-bitUUID values can be added to the payload For this purpose the specific AD types describe the length ofthe advertised UUID and provide information as to whether the payload contains a incompletecompletelist of UUID supported by the GATT server

    bull 0x02 - Incomplete list of 16-bit UUIDs (adopted GATT services)bull 0x03 - Complete list of 16-bit UUIDs (adopted GATT services)bull 0x06 - Incomplete list of 128-bit UUIDs (custom GATT services)bull 0x07 - Complete list of 128-bit UUIDs (custom GATT services)

    Note  When a 16-bit UUID is transmitted only the unique 2-byte value is sent The client knows that it isrequired to be injected into the base UUID For example the Health Thermometer Service is assigned as0x1809 so its equivalent UUID is 00001809-0000-1000-8000-00805F9B34FB

    313 Device Name (AD Types 0x08 to 0x09)This AD type field is used to advertise the Local name of device in the network The Local name datatype value indicates if the name is complete or shortened If the name is shortened the complete namecan be read after the connection is established

    bull 0x08 - Shortened Local Namebull 0x09 - Complete Local Name

    Note 1 A shortened name contains only continuous characters from the beginning of the full name For

    example if the device name is BT_Device_Name then the shortened name can beBT_Device or BT_Dev

    2 Complete data type list are available at httpswwwbluetoothcomspecificationsassigned-numbersgeneric-access-profile

    For management of advertisement process and cover the different configurations specified by SIG theATBTLC1000 Host driver provides the two functions elaborated in the following sections

    In the application use these two functions to setup the following ADV_IN type payloadFigure 3-6 ADV_IN Type Payload Process

    ATBTLC1000Establishing Connection with Central Device

    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 21

    3131 Setting the Advertisement Payload (ble_advertisement_data_set)Prototype ndashat_ble_status_t at_ble_adv_data_set (uint8_t const const adv_datauint8_t adv_data_lenuint8_t const const scan_resp_datauint8_t scan_response_data_len)

    Description ndash Set clear or update the advertisement and scan response data

    Parameters ndash

    bull adv_data ndash Raw data to be placed in advertisement packetbull adv_data_len ndash Data length for adv_data Max size 28 bytes (3 bytes are reserved to set

    advertising AD type flags based on the selected Advertising mode and the user is not required toconfigure AD type flags in the advertisement payload)

    bull scan_resp_data ndash Raw data to be placed in the scan response packet If NULL no changes aremade to the current scan response packet data

    bull scan_response_data_len ndash Data length for scan_resp_data Max size 31 bytes

    Return ndash Execution Status

    This function requires a parameter raw adv_data to be sent to central Following is an example of itsdefinition

    static uint8_t adv_data[] = 0x11 AD1 length = 170x03 AD1 Type = Complete list of 128-bit UUIDs0x1b0xc50xd50xa50x020x000xa60x87 AD1 = UUID MSBs0xe50x110x360x390xc00xba0x5a0xf00x0A AD2 Length = 100x09 AD2 Type = Complete local NamelsquoMrsquorsquoyrsquorsquo_rsquorsquoDrsquorsquoErsquorsquoVrsquo AD2 = ldquoMy_DEVrdquo

    3132 Starting the Advertisement Process (at_ble_adv_start)Prototype ndashat_ble_status_t at_ble_adv_start (at_ble_adv_type_t typeat_ble_adv_mode_t modeat_ble_addr_t peer_addrat_ble_filter_type_t filtereduint16_t intervaluint16_t timeoutbool disable_randomness)

    Description ndash Start advertisement process

    Parameters ndash

    bull type ndash Advertising type to be used can bendash AT_BLE_ADV_TYPE_UNDIRECTEDndash AT_BLE_ADV_TYPE_DIRECTEDndash AT_BLE_ADV_TYPE_SCANNABLE_UNDIRECTEDndash AT_BLE_ADV_TYPE_NONCONN_UNDIRECTEDndash AT_BLE_ADV_TYPE_DIRECTED_LDCndash AT_BLE_ADV_TYPE_SCAN_RESPONSE

    bull mode ndash Advertising mode to be used can be

    ATBTLC1000Establishing Connection with Central Device

    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 22

    ndash AT_BLE_ADV_NON_DISCOVERABLEndash AT_BLE_ADV_GEN_DISCOVERABLEndash AT_BLE_ADV_LIM_DISCOVERABLEndash AT_BLE_ADV_BROADCASTER_MODE

    bull peer_addr ndash Specify peer address when advertising type is AT_BLE_ADV_TYPE_DIRECTEDbull filtered ndash

    ndash AT_BLE_ADV_FP_ANY ndash Allow scan and connection requests from anyonendash AT_BLE_ADV_FP_FILTER_SCANREQ ndash Allow scan request from White List devices onlyndash AT_BLE_ADV_FP_FILTER_CONNREQ ndash Allow connection request from White List devices

    onlyndash AT_BLE_ADV_FP_FILTER_BOTH ndash Allow scan and connection requests from White List

    devices onlybull interval ndash Advertisement interval (in 0625 ms units)bull timeout ndash Advertising timeout between 0x0001 and 0x028F in scale of seconds This parameter

    must be set to 0 if type equals AT_BLE_ADV_TYPE_DIRECTEDbull disable_randomness ndash When disabled advertisements are performed at the exact interval

    without adding random 10 ms tempo

    Return ndash Execution Status

    314 Advertisement ProcessIn this assignment the advertisement process is performed in the following configuration

    bull Undirected (Type AT_BLE_ADV_TYPE_UNDIRECTED)bull Discoverable (Mode AT_BLE_ADV_GEN_DISCOVERABLE)bull No peer Address (peer_addr = NULL)bull No filtering (filtered = AT_BLE_ADV_FP_ANY)bull Advertisement interval 1s (interval = 1600)bull Maximum timeout (timeout 655)bull Randomness enabled (disable_randomness = FALSE)

    3141 Starting the Advertisement Process1 Open startup_templatec file2 Declare the following ble_status global variable in startup_templatec as volatile

    include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehvolatile at_ble_status_t ble_status

    3 Declare the following adv_data global variable in startup_templatec as staticstatic uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD)0x09 AD2 Type = Complete local Name

    ATBTLC1000Establishing Connection with Central Device

    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 23

    My_SENS AD2 = ldquoMy_SENSrdquo

    Note 1 The name of the device is to be changed (AD2 field)2 According to the new name AD2 length must be adapted to new AD2 content

    4 Add the following start_advertisement function in startup_templatec prototype for thefunction void start_advertisement (void) also this can be added to avoid warningsvoid start_advertisement (void)printf(n Assignment 21 Start Advertisement)Set advertisement datable_status = at_ble_adv_data_set(adv_datasizeof(adv_data)NULL0)Start Advertisementble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550)if(ble_status = AT_BLE_SUCCESS)printf(n Failed to start advertisement)

    5 Start the advertisement process by adding the following highlighted code to the application mainroutineint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Start Advertising process start_advertisement() Register PrimaryIncluded service in case of GATT Server while(true) Write application task

    6 Click to save the project ltCtrl+Sgt

    7 Click button to compile the project ltF7gt8 Verify that no build error appears in Atmel Studio output window

    Figure 3-7 Atmel Studio Output Window

    ATBTLC1000Establishing Connection with Central Device

    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 24

    9 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt10 Open Microchip SmartConnect Application on Android or iOS device and tap START SCAN button

    Note  The device must appear in Microchip SmartConnect Application

    Figure 3-8 Microchip SmartConnect Application

    11 Terminal must display the following Log outputFigure 3-9 Log Output Window

    32 Managing GAP eventsThe management of the Bluetooth connection at the host MCU level is done through reception andhandling of events reported by the ATBTLC1000 These events are generated by ATBTLC1000 GAPGATT and L2CAP layers to notify the host about the ongoing Bluetooth interaction with other devices inits vicinity

    ATBTLC1000Establishing Connection with Central Device

    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 25

    To manage events coming from the ATBTLC1000 module the host driver must provide able_mgr_events_callback_handler function that allows registration of application callback functionto be executed on each event reported by the ATBTLC1000 module

    Prototype ndashbool ble_mgr_events_callback_handler(ble_mgr_event_cb_t event_cb_typeble_mgr_event_t event_typeconst voidble_event_handler)

    Description ndash Used by ProfileServiceApplication to register the Bluetooth Low Energy eventsrsquocallbacks

    Parameters ndash

    event_cb_type ndash types of actions to perform on callbacks can be either

    REGISTER_CALL_BACK or

    UNREGISTER_CALL_BACKevent_type ndash Any one of the event types can be used

    BLE_GAP_EVENT_TYPEBLE_GATT_CLIENT_EVENT_TYPEBLE_GATT_SERVER_EVENT_TYPEBLE_L2CAP_EVENT_TYPEBLE_GATT_HTPT_EVENT_TYPEBLE_DTM_EVENT_TYPEBLE_CUSTOM_EVENT_TYPEble_event_handler ndash pointer to handler list

    Structure ble_gap_event_cb_t defines the GAP callbacks Similarly structuresble_gatt_client_event_cb_t and ble_gatt_server_event_cb_t define the callbacks of GATTevents

    typedef struct ble_gap_event_cb BLE Undefined events received from ATBTLC1000 which is not handled in Libraryble_event_callback_t undefined BLE scan information contains the peer device scan information Refer ref at_ble_scan_info_tble_event_callback_t scan_info Once the BLE scan timeout or scan stop triggers the scan report event Refer ref at_ble_scan_report_tble_event_callback_t scan_report Advertisement complete event Refer ref at_ble_adv_cmp_evt_tble_event_callback_t advt_cmp Advertisement report in case of advertisement stopped due to advertisement timeout Refer ref at_ble_adv_report_tble_event_callback_t adv_report BLE device own random address changed event Refer ref at_ble_rand_addr_changed_tble_event_callback_t rand_addr_changed BLE connected event device connected to peer device Refer ref at_ble_connected_tble_event_callback_t connected BLE disconnected event device disconnected from peer device Refer ref at_ble_disconnected_tble_event_callback_t disconnected Connection parameter update done on peer device and own device Refer ref at_ble_conn_param_update_done_t

    ATBTLC1000Establishing Connection with Central Device

    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 26

    ble_event_callback_t conn_parameter_update_done Connection parameter update request from peer device Refer ref at_ble_conn_param_update_request_tble_event_callback_t conn_param_update_request Pair complete event as part of end of pairing process Refer ref at_ble_pair_done_tble_event_callback_t pair_done Pair request event from Central device Refer ref at_ble_pair_request_tble_event_callback_t pair_request Slave security request received from peer Peripheral device Refer ref at_ble_slave_sec_request_tble_event_callback_t slave_sec_request Pair Key request event from Peer central device Refer ref at_ble_pair_key_request_tble_event_callback_t pair_key_request encryption request comes from the peer device Needs to supply the bonding information which is stored earlier ref at_ble_encryption_request_tble_event_callback_t encryption_request encryption status changed event received from SMP once the encryption is started ref at_ble_encryption_status_changed_tble_event_callback_t encryption_status_changed Event triggered once the Resolve random address is resolved using supplied IRKs ref at_ble_resolv_rand_addr_status_tble_event_callback_t resolv_rand_addr_status Event is triggered once the connection signature information indication received ref at_ble_sign_counter_tble_event_callback_t sign_counters_ind Peer attribute information indication received Event ref at_ble_peer_att_info_ind_tble_event_callback_t peer_att_info_ind Peer device channel map received indication ref at_ble_channel_map_tble_event_callback_t con_channel_map_indble_gap_event_cb_t

    Note  Callback definition is application-specific If the application layer requires a specific event callbackthen the specific member of the structure is to be assigned with the address of the callback function

    In this assignment two callback functions on Connected and Disconnected GAP events are usedThis allows the application to restart the advertising process on Disconnect manage connectioninformation and startstop of sensor data update

    321 Handling of Connected and Disconnected GAP Events1 Open the startup_templatec file2 Define the following software flags as global variables in startup_templatec file volatile

    bool timer_flag = false and volatile bool connected_flag = false3 Declare and implement the following ble_connected_cb function in the

    startup_templatec file Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param)printf(n Assignment 22 Application connected )connected_flag = trueALL_UNUSED(param)return AT_BLE_SUCCESS

    4 Declare and implement the following ble_disconnected_cb function instartup_templatec file Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param)printf(n Assignment 22 Application disconnected )connected_flag = falsestart_advertisement()ALL_UNUSED(param)return AT_BLE_SUCCESS

    ATBTLC1000Establishing Connection with Central Device

    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 27

    5 Declare the following static GAP callback structure in ldquostartup_templatecrdquo filestatic const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTEDdisconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

    6 Add the following register_btlc1000_callbacks function in startup_templatec Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void) Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks)ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACKBLE_GAP_EVENT_TYPEampapp_gap_handle)if (ble_status = true)printf(nError when Registering ATBTLC1000 callbacks)

    7 Add the register_btlc1000_callbacks function call prior to start advertisement in theapplication main routineint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Gap Callbacks register_btlc1000_callbacks ( ) Start Advertising process start_advertisement() Register PrimaryIncluded service in case of GATT Server while(true) Write application task

    8 Add the ble_event_task function call in the project main loop to handle the different incomingevents from ATBTLC1000while(true)ble_event_task()

    9 Press button ltF7gt to compile the project and verify that no build error appear in the AtmelStudio output window

    ATBTLC1000Establishing Connection with Central Device

    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 28

    Figure 3-10 Atmel Studio Output Window

    10 Click ldquo rdquo to save the project ltCtrl+Sgt

    11 Click ldquo rdquo to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt and checkcorrect initialization of the ATBTLC1000

    12 Open the Microchip SmartConnect application on Androidtrade or iOS device13 Press the ltStart Scangt button and pair peripherals by selecting them in the device list (pass key

    123456)Note 

    1 Pairing event handling is carried out by ble_managerc Refer toble_pair_key_request_handler() for code implementation The default pass key of123456 is also fixed inside this function This can be changed here

    Figure 3-11 Console Log Window

    Note  After peripheral pairing no services information are displayed in Microchip SmartConnectapplication as no service is currently defined and started on peripheral side

    ATBTLC1000Establishing Connection with Central Device

    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 29

    4 SettingHandling of Pre-Defined ServiceThe management of services are done in the GATT layer of the ATBTLC1000 ROM coded Bluetooth LowEnergy Stack The GATT transactions are based on high-level nested objects called Profiles Servicesand Characteristics stored in SRAM memory of ATBTLC1000 device This assignment adds the pre-defined service of information service from ASF library

    Figure 4-1 ATBTLC1000 GATT Layers

    bull ProfilesProfiles are not available in the Bluetooth Low Energy peripheral they are simply a pre-definedcollection of services that have been compiled by either the Bluetooth SIG (adopted GATT basedprofile) or by the application developer (custom profiles) For example the Heart Rate Profilecombines the Heart Rate Service and the Device Information Service

    Note  The complete list of officially adopted GATT-based profiles is available on the BluetoothDeveloper Portal

    bull ServicesA service is a collection of data and associated behaviors which accomplish a particular function orfeature of a device or portions of a device A service may reference other primary or secondaryservices andor a set of characteristics that make up the service Each service distinguishes itselffrom other services by means of a unique numeric ID called as UUID which can be either 16-bit(for officially adopted Bluetooth Low Energy Services) or 128-bit (for custom services)

    Note  A full list of officially adopted services and their UUID are seen on the Bluetooth DeveloperPortal

    bull CharacteristicsA characteristic is the lowest level concept in GATT transactions It contains a single data point withdifferent attributes such as notify read or write capabilities Similar to Services each characteristiccan be distinguished by a SIG-defined adopted UUID (16-bit) or custom (128-bit) UUID This UUIDensures interoperability across Bluetooth Low Energy devices The characteristics are important tointeract with in a Bluetooth Low Energy network In addition to standard UUID the custom UUID isused in case of specific application When characteristics with custom UUID are used in a devicethen it will be interoperable only with those devices that support these characteristics with customUUID

    ATBTLC1000SettingHandling of Pre-Defined Service

    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 30

    In this assignment the following steps are added to the Host MCU application to set up and handle adevice information service within the ATBTLC1000 module The following steps are added to the startupproject

    bull Adding device info service component from ASFbull Configuring and loading the service

    Figure 4-2 Device Information Service

    41 Adding Device Info Service Component from ASF Wizard to ProjectTo use the ldquoofficially adopted GATT-based profilesrdquo from SIG ASF provides Bluetooth Low Energy servicecomponents including init functions that pre-define services in Host memory

    Note  Before starting this assignment be sure to follow the steps mentioned in 2 Creating the Projectand Initializing and 3 Establishing Connection with Central Device

    1 Click ASF gt ASF Wizard2 Search for ldquoBLE-Device Information Servicesrdquo and then click Add

    ATBTLC1000SettingHandling of Pre-Defined Service

    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 31

    Figure 4-3 Available Modules

    3 Now ldquoBLE-Device Information Servicesrdquo (component) appears in ldquoSelected ModulesrdquoFigure 4-4 Selected Modules

    4 Click Apply to add the component to the projectFigure 4-5 Adding the Modules to Project

    5 The ldquoDevice Information Servicerdquo component is added to the project and is confirmed bydevice_information folder added in Solution Explorer

    ATBTLC1000SettingHandling of Pre-Defined Service

    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 32

    Figure 4-6 Device Information Service Added to Project

    42 Configuring and Loading Device Information ServiceThe ATBTLC1000 Host driver provides a set of GATT functions that allows storing and updating theservices in ATBTLC1000 memories

    Prototype at_ble_status_t at_ble_primary_service_define(at_ble_uuid_t uuidat_ble_handle_t service_handleat_ble_included_service_t included_service_listuint16_t included_service_countat_ble_characteristic_t charactristic_listuint16_t charactristic_count)

    Description Defines a new primary service along with its included services and characteristics inATBTLC1000

    Parameters

    bull Uuid [In] ndash primary service UUIDbull service_handle [Out] ndash Service handle is returned herebull included_service_list [In] ndash an array of included service referencesbull included_service_count [In] ndash number of elements in included_service_listbull charactristic_list [InOut] ndash an array of characteristics included in the service this array

    is updated with respective characteristics handlesbull charactristic_count[In] ndash number of elements in charactristic_list

    Return Execution Status

    This function requires an argument as GATT description structure of the service that is implemented Thepreviously added Device Info service component provides Bluetooth Low Energy service middlewareincluding the init functions that predefine the services See below ldquodis_init_servicerdquo from device infoBLE service (device_infohc)

    Prototype ndash void dis_init_service(dis_gatt_service_handler_t device_info_serv)Description ndash Initialize the device information service handler in the host MCU memory

    Parameters ndash

    ATBTLC1000SettingHandling of Pre-Defined Service

    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 33

    bull device_info_serv [Inout] pointer to device info GATT description handler to beupdated

    Return None

    Here is a picture of GATT device info service descriptor definition in Host memory

    device_info_serv-gtserv_handle = 0device_info_serv-gtserv_uuidtype = AT_BLE_UUID_16device_info_serv-gtserv_uuiduuid[0] = (uint8_t) DIS_SERVICE_UUIDdevice_info_serv-gtserv_uuiduuid[1] = (uint8_t) (DIS_SERVICE_UUID gtgt 8)Characteristic Info for Manufacturer Name Stringdevice_info_serv-gtserv_chars[0]char_val_handle = 0 handle stored here device_info_serv-gtserv_chars[0]uuidtype = AT_BLE_UUID_16device_info_serv-gtserv_chars[0]uuiduuid[0] = (uint8_t) IS_CHAR_MANUFACTURER_NAME_UUID UUID Manufacturer Name String device_info_serv-gtserv_chars[0]uuiduuid[1] = (uint8_t) (DIS_CHAR_MANUFACTURER_NAME_UUID gtgt 8) UUID Manufacturer Name String device_info_serv-gtserv_chars[0]properties = AT_BLE_CHAR_READ Properties memcpy(char_valuemanufacturer_nameDEFAULT_MANUFACTURER_NAMEDIS_CHAR_MANUFACTURER_NAME_INIT_LEN)device_info_serv-gtserv_chars[0]init_value = char_valuemanufacturer_namedevice_info_serv-gtserv_chars[0]value_init_len = DIS_CHAR_MANUFACTURER_NAME_INIT_LENdevice_info_serv-gtserv_chars[0]value_max_len = DIS_CHAR_MANUFACTURER_NAME_MAX_LENif BLE_PAIR_ENABLEdevice_info_serv-gtserv_chars[0]value_permissions = AT_BLE_ATTR_READABLE_REQ_AUTHN_NO_AUTHR permissions elsedevice_info_serv-gtserv_chars[0]value_permissions = AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR permissions endifdevice_info_serv-gtserv_chars[0]user_desc = NULL user defined name device_info_serv-gtserv_chars[0]user_desc_len = 0device_info_serv-gtserv_chars[0]user_desc_max_len = 0device_info_serv-gtserv_chars[0]user_desc_permissions = AT_BLE_ATTR_NO_PERMISSIONS user description permissionsdevice_info_serv-gtserv_chars[0]client_config_permissions = AT_BLE_ATTR_NO_PERMISSIONS client config permissionsdevice_info_serm hdsv-gtserv_chars[0]server_config_permissions = AT_BLE_ATTR_NO_PERMISSIONS server config permissionsdevice_info_serv-gtserv_chars[0]user_desc_handle = 0 user desc handlesdevice_info_serv-gtserv_chars[0]client_config_handle = 0 client config handlesdevice_info_serv-gtserv_chars[0]server_config_handle = 0 server config handlesdevice_info_serv-gtserv_chars[0]presentation_format = NULL presentation format

    Note  In case of custom service the above definition initialization must be taken care of by thedeveloper

    421 Procedure to Configure and Load Device Info Service1 Include device info service header file (device_infoh) at the beginning of

    startup_templatec fileinclude ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehinclude device_infoh

    2 Define a device info service handler as global in startup_templatec file Serviceshandlers dis_gatt_service_handler_t dis_service_handler

    ATBTLC1000SettingHandling of Pre-Defined Service

    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 34

    3 Add dis_init_service and at_ble_primary_service_define functions as called abovethe advertisement start in main routine Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service)dis_init_service (ampdis_service_handler) Define the primary service in the GATT server database if ((dis_primary_service_define (ampdis_service_handler)) = AT_BLE_SUCCESS)printf(Device Information Service definition failed) Start Advertising process start_advertisement()

    4 Click to save the project ltCtrl+Sgt and compile the project by pressing button ltF7gt5 Verify that no build error appears in Atmel Studio output window

    Figure 4-7 Atmel Studio Output Window

    6 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt7 Open ldquoMicrochip SmartConnectrdquo application on Android or iOS device8 Press ltStart Scangt button and connect to peripheral

    Note  The device name is a characteristic and contains the name of the device This device namecan be read by the central device to know the name of the device in order to differentiate thedevices This is being set using at_ble_device_name_set()API The device name is set bydefault when ble_device_init is called and the value is pre-defined using BLE_DEVICE_NAMEThe device name can also be sent as part of advertisement payload to be same as the oneconfigured in at_ble_adv_data_set() API It is the responsibility of users to keep the devicename set in advertisement payload the same as that configured inat_ble_device_name_set()

    9 The Service must now be visible after pairing with peripheral under Microchip SmartConnectapplication

    ATBTLC1000SettingHandling of Pre-Defined Service

    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 35

    Figure 4-8 Service List in Microchip SmartConnect Application

    Note  If the pairing of ATBTLC1000 with Microchip Smart connect is not successful then removethe pairing information from mobile by selecting ldquoForget Devicerdquo from the mobile settings Thereason for this is that the mobile app stores the previous pairing information but the ATBTLC1000device lost the previous pairing information due to RESET since it was stored on temporary storage(RAM)

    10 The serial terminal must display the following log output windowFigure 4-9 Console Log Window

    ATBTLC1000SettingHandling of Pre-Defined Service

    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 36

    5 Setting up and Handling Custom ServiceThe previous assignment describes the handling of Bluetooth Low Energy SIG defined device infoservice which is the predefined service available in ASF component This assignment describes thecustom service So the service initialization needs to be implemented In the context of customizedenvironment service the following service description is pushed in ATBTLC1000 memory

    Figure 5-1 Custom Service

    Custom Environment Service Description

    bull UUID type ndash Custom UUID (128-bit)bull UUID ndash 1bc5d5a5-0200-a687-e511-3639c1ba5af0

    Characteristic 0 (Temperature)

    bull User Description ndash Temperaturebull UUID type ndash Custom UUID (128-bit)bull UUID ndash 1bc5d5a5-0200-a687-e511-3639d8ba5af0bull Properties ndash Read Notifybull Value permission ndash No authorization requiredbull Client config permission ndash No permissionbull Server config permission ndash No permission

    Note  In this definition UUIDs are generated randomly Custom servicescharacteristics are free to useany 128-bit UUID less than the base UUID There is no reserved space for vendors to use 16-bit or 32-bitUUIDs

    With this definition any temperature change is notified to the central The notify mechanism allows thecentral to know when the data changes When notify property of the Client Characteristic ConfigurationDescriptor is enabled by the central and the device writes the new value then this updated value isautomatically sent to the central through a notification The central is not required to send readcharacteristic commands explicitly to the peripheral (GATT server)

    To setup and handle the custom environment service in ATBTLC1000 module the following steps areadded to the Host MCU application

    bull Configure and load the custom servicebull Update Temperature characteristic and notify to the central devicebull Receive and handle notification from the Host device

    ATBTLC1000Setting up and Handling Custom Service

    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 37

    Figure 5-2 Custom Service Flowchart

    51 Configuring and Loading the Custom Environment ServiceThe ATBTLC1000 Host driver provides the following set of GATT functions that allows it to push andupdate the service descriptions in the ATBTLC1000 SRAM memory

    Note  Before starting this assignment be sure to follow the steps mentioned in 2 Creating the Projectand Initializing and 3 Establishing Connection with Central Device

    Prototype ndashat_ble_status_t at_ble_primary_service_define(at_ble_uuid_t uuidat_ble_handle_t service_handleat_ble_included_service_t included_service_listuint16_t included_service_countat_ble_characteristic_t charactristic_listuint16_t charactristic_count)

    Description ndash Defines a new primary service along with its included services and characteristics inATBTLC1000 module

    Parameters

    bull Uuid [In] ndash primary service UUIDbull service_handle [Out] ndash service handle is returned herebull included_service_list [In] ndash array of included service referencesbull included_service_count [In] ndash number of elements in included_service_listbull charactristic_list [InOut] ndash an array of characteristics included in the service this array

    is update with respective characteristics handlesbull charactristic_count[In] ndash number of elements in charactristic_list

    ATBTLC1000Setting up and Handling Custom Service

    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 38

    Return ndash Execution Status

    bull Characteristics ndashndash Characteristics definition is done through specific array of following

    ldquoat_ble_characteristic_trdquo structure instancestypedef structat_ble_handle_t char_val_handle Handler (returned during service initialisation)at_ble_uuid_t uuid Characteristic UUID (type and value)at_ble_char_properties_t propertiesCharac Properties (read write notify)uint8_t init_value initial valueuint16_t value_init_len initial value lengthuint16_t value_max_len value max lengthat_ble_attr_permissions_t value_permissions access authorization and authenticationuint8_t user_desc User descriptionuint16_t user_desc_len User description lengthuint16_t user_desc_max_len User description max lengthat_ble_char_presentation_t presentation_format Presentation formatat_ble_attr_permissions_t user_desc_permissions User description permissionat_ble_attr_permissions_t client_config_permissions client permissionat_ble_attr_permissions_t server_config_permissions server permissionat_ble_handle_t user_desc_handle description handlerat_ble_handle_t client_config_handle Client config handlerat_ble_handle_t server_config_handle Server config handler at_ble_characteristic_t

    511 Procedure to Configure and Load Custom Environment Service1 Define the following service UUID and characteristic UUID in startup_templatec file

    define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

    2 Define the following environment service handler and characteristics variable as global instartup_templatec file Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

    3 Add the following service initialization function custom_environment_service_init instartup_templatecvoid custom_environment_service_init(void) at_ble_uuid_t environment_service_uuiduint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUIDuint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperatureenvironment_service_characs[0]user_desc_len = 10environment_service_characs[0]user_desc_max_len = 10environment_service_characs[0]uuidtype = AT_BLE_UUID_128memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16)environment_service_characs[0]properties = AT_BLE_CHAR_READ |AT_BLE_CHAR_NOTIFYenvironment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature valueenvironment_service_characs[0]value_permissions =(AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuidampenvironment_service_handlerNULL0environment_service_characs1)=AT_BLE_SUCCESS)printf(n Assignment 41 Failed to Initialize custom environment service)

    ATBTLC1000Setting up and Handling Custom Service

    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 39

    elseprintf(n Assignment 41 Initialize custom environment service)

    4 Declare and implement the following GATT event callback functioncustom_char_changed_app_event in startup_templatec file If a client (central) enablesnotifications for a server the server (peripheral) receives an AT_BLE_CHARACTERISTIC_CHANGEDevent and this event callback is called Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

    5 Declare and implement the following custom_notification_confirmation_handlerfunction in startup_templatec file Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param)at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )paramif (event_param-gtstatus == AT_BLE_SUCCESS)printf(n Assignment 41Notification Successfully sent over the air) else printf(n Assignment 41Sending Notification over the air failed)return AT_BLE_SUCCESS

    6 Declare the following GATT server callback structure in startup_templatec file Thisassignment uses two GATT callbacksstatic const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handlercharacteristic_changed = custom_char_changed_app_event

    7 Add the following register_gatt_server_callbacks function in startup_templatec toregister GATT server callback for notification confirmation event Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks)ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACKBLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle)if (ble_status = true)printf(nError when Registering ATBTLC1000 callbacks)

    8 Add custom_environment_service_init and register_gatt_server_callbacksfunction calls prior to start advertisement in the application main routine to initialize custom serviceand to register the GATT server callbacksint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()

    ATBTLC1000Setting up and Handling Custom Service

    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 40

    endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks() Custom service init custom_environment_service_init ( ) Register Gatt server callbacks register_gatt_server_callbacks ( ) Start Advertising process start_advertisement()while(true)ble_event_task()

    9 Click to save the project ltCtrl+Sgt

    10 Compile the project by pressing button ltF7gt11 Verify that no build error appears in the Atmel Studio output window

    Figure 5-3 Atmel Studio Output Window

    12 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt13 Open the ldquoMicrochip SmartConnectrdquo application on Android or iOS device14 Connect and pair to the peripheral (pass key 123456)15 Custom service must now be visible after pairing with peripheral under Microchip SmartConnect

    application

    ATBTLC1000Setting up and Handling Custom Service

    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 41

    Figure 5-4 Service List in Microchip SmartConnect Application

    Note  Custom service is displayed as unknown service in the above figure as this service is not aSIG-defined service

    Figure 5-5 General Information

    16 Serial terminal client must display the following Log output

    ATBTLC1000Setting up and Handling Custom Service

    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 42

    Figure 5-6 Log Output Window

    52 Updating the Temperature CharacteristicIn the previous assignment the custom Temperature characteristic is defined with a notify attribute Thistype of attribute requires notification to be sent to central when a new characteristic value is availableThe update of any ldquonotifyrdquo characteristic value is based on following interaction between the Host MCUand the ATBTLC1000Figure 5-7 Characteristic Notification

    521 Setting a Characteristic Value ( at_ble_characteristic_value_set)Prototype ndashat_ble_status_t at_ble_characteristic_value_setat_ble_handle_t handleuint8_t valueuint16_t len)

    Description ndash Sets a characteristic value in ATBTLC1000 memory

    Parameters ndash

    ATBTLC1000Setting up and Handling Custom Service

    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 43

    bull handle [inout] ndash Pointer to Characteristic handle to be changedbull value [in] ndash New valuebull len [in] ndash Value length in bytes

    Return ndash Execution Status

    522 Sending a Notification (at_ble_notification_send)Prototype ndashat_ble_status_t at_ble_notification_send(at_ble_handle_t conn_handleat_ble_handle_t attr_handle)

    Description ndash Sends a Notification

    Parameters ndash

    bull conn_handle[in] ndash handle of the connection to be notifiedbull attr_handle [in] ndash handle of the attribute originating the notification

    Return ndash Execution Status

    523 Sending Temperature Information Once in Every 10 Seconds to Central1 Modify the following ldquotimer_callback_fnrdquo callback function from the startup_templatec

    filestatic void timer_callback_fn(void)timer_flag = true

    2 hw_timer_init()in main routine of startup_templatec initializes the hardware timer3 If a client (Central) enables the notifications for a server the server (Peripheral) receives an

    AT_BLE_CHARACTERISTIC_CHANGED event callback then start the periodic 10 second timer forsending the notification Add the following code in previously definedcustom_char_changed_app_event function Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))timer_flag = falsehw_timer_start(10)printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

    4 Declare the following Temperature_value global variable in startup_templatec staticuint8_t Temperature_value = 25 as static

    5 Add the following send_temperature_notification function in startup_templatec tosend temperature every 10 seconds Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++

    ATBTLC1000Setting up and Handling Custom Service

    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 44

    if(Temperature_value gt 75)Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set(environment_service_characs[0]char_val_handle(uint8_t )ampTemperature_valuesizeof(Temperature_value))ble_status = at_ble_notification_send(0environment_service_characs[0]char_val_handle)if(ble_status = AT_BLE_SUCCESS)printf(fail to send temperature update notification )

    6 Add the following code in main routine to send temperature data every 10 secondswhile (1) ble_event_task()if(connected_flag == true ampamp timer_flag == truetimer_flag = falsesend_temperature_notification()

    7 Click to save the project ltCtrl+Sgt

    8 Compile the project by pressing the button ltF7gt9 Verify that no build error appears in Atmel Studio output window

    Figure 5-8 Atmel Studio Output Window

    10 Click to program the project binary on the L21 Xplained XSTK11 Open ldquoMicrochip SmartConnectrdquo Application on Android or iOS device12 Connect and pair to the peripheral (pass key 123456)13 Click NOTIFY to start the notification14 Temperature information in HEX values must be displayed in Microchip SmartConnect application

    ATBTLC1000Setting up and Handling Custom Service

    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 45

    Figure 5-9 Notification Window

    15 Serial terminal must display the following log outputFigure 5-10 Log Output Window

    ATBTLC1000Setting up and Handling Custom Service

    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 46

    6 Appendix A Software Solution - Pre-Defined SvcThe following is the code implementation for handling of pre-defined service done in 4 SettingHandlingof Pre-Defined Service

    - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehinclude device_infoh

    volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false Services handlers dis_gatt_service_handler_t dis_service_handler

    static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

    void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

    Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

    Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

    static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

    Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void) Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks)

    ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 47

    ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

    timer callback function static void timer_callback_fn(void) Add timer callback functionality here

    void button_cb(void) Add button callback functionality here

    int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

    Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

    DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks()

    Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service) dis_init_service(ampdis_service_handler) Define the primary service in the GATT server database if((dis_primary_service_define(ampdis_service_handler)) = AT_BLE_SUCCESS) printf(Device Information Service definition failed)

    Start Advertising process start_advertisement() while(true) ble_event_task()

    ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 48

    7 Appendix B Software Solution - Custom ServiceThe following is the code implementation for handling of pre-defined service done in 5 Setting up andHandling Custom Service

    - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templateh

    volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false

    static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

    define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0

    define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

    Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

    void custom_environment_service_init(void) at_ble_uuid_t environment_service_uuid uint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUID uint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128 memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperature environment_service_characs[0]user_desc_len = 10 environment_service_characs[0]user_desc_max_len = 10 environment_service_characs[0]uuidtype = AT_BLE_UUID_128 memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16) environment_service_characs[0]properties = AT_BLE_CHAR_READ | AT_BLE_CHAR_NOTIFY environment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature value environment_service_characs[0]value_permissions = (AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuid ampenvironment_service_handlerNULL0 environment_service_characs1)=AT_BLE_SUCCESS) printf(n Assignment 41 Failed to Initialize custom environment service) else printf(n Assignment 41 Initialize custom environment service)

    Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param) at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )param if (event_param-gtstatus == AT_BLE_SUCCESS) printf(n Assignment 41Notification Successfully sent over the air)

    ATBTLC1000Appendix B Software Solution - Custom Service

    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 49

    else printf(n Assignment 41Sending Notification over the air failed) return AT_BLE_SUCCESS

    static at_ble_status_t custom_char_changed_app_event(void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle -gt char_new_value[0])) timer_flag = false hw_timer_start(10) printf(n Assignment 41Characteristic changed event) return AT_BLE_SUCCESS

    static const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handler characteristic_changed = custom_char_changed_app_event

    Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

    void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

    Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

    Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

    static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

    Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void)

    ATBTLC1000Appendix B Software Solution - Custom Service

    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 50

    Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

    timer callback function static void timer_callback_fn(void) Add timer callback functionality here timer_flag = true

    void button_cb(void) Add button callback functionality here

    static uint8_t Temperature_value = 25

    Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++ if(Temperature_value gt 75) Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set( environment_service_characs[0]char_val_handle (uint8_t )ampTemperature_value sizeof(Temperature_value)) ble_status = at_ble_notification_send(0 environment_service_characs[0]char_val_handle) if(ble_status = AT_BLE_SUCCESS) printf(fail to send temperature update notification )

    int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

    Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

    DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register Gap ATBTLC1000 Callbacks register_btlc1000_callbacks()

    Custom service init custom_environment_service_init()

    ATBTLC1000Appendix B Software Solution - Custom Service

    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 51

    Register Gatt server callback register_gatt_server_callbacks()

    Start Advertising process start_advertisement() while(true) ble_event_task() if(connected_flag == true ampamp timer_flag == true) timer_flag = false send_temperature_notification()

    ATBTLC1000Appendix B Software Solution - Custom Service

    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 52

    8 Document Revision HistoryRev B - 42018

    Section Changes

    Document Revised contents to match various Bluetooth Low Energy standard versions

    Rev A - 122017

    Section Changes

    Document Initial release

    ATBTLC1000Document Revision History

    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 53

    The Microchip Web Site

    Microchip provides online support via our web site at httpwwwmicrochipcom This web site is used asa means to make files and information easily available to customers Accessible by using your favoriteInternet browser the web site contains the following information

    bull Product Support ndash Data sheets and errata application notes and sample programs designresources userrsquos guides and hardware support documents latest software releases and archivedsoftware

    bull General Technical Support ndash Frequently Asked Questions (FAQ) technical support requestsonline discussion groups Microchip consultant program member listing

    bull Business of Microchip ndash Product selector and ordering guides latest Microchip press releaseslisting of seminars and events listings of Microchip sales offices distributors and factoryrepresentatives

    Customer Change Notification Service

    Microchiprsquos customer notification service helps keep customers current on Microchip productsSubscribers will receive e-mail notification whenever there are changes updates revisions or erratarelated to a specified product family or development tool of interest

    To register access the Microchip web site at httpwwwmicrochipcom Under ldquoSupportrdquo click onldquoCustomer Change Notificationrdquo and follow the registration instructions

    Customer Support

    Users of Microchip products can receive assistance through several channels

    bull Distributor or Representativebull Local Sales Officebull Field Application Engineer (FAE)bull Technical Support

    Customers should contact their distributor representative or Field Application Engineer (FAE) for supportLocal sales offices are also available to help customers A listing of sales offices and locations is includedin the back of this document

    Technical support is available through the web site at httpwwwmicrochipcomsupport

    Microchip Devices Code Protection Feature

    Note the following details of the code protection feature on Microchip devices

    bull Microchip products meet the specification contained in their particular Microchip Data Sheetbull Microchip believes that its family of products is one of the most secure families of its kind on the

    market today when used in the intended manner and under normal conditionsbull There are dishonest and possibly illegal methods used to breach the code protection feature All of

    these methods to our knowledge require using the Microchip products in a manner outside theoperating specifications contained in Microchiprsquos Data Sheets Most likely the person doing so isengaged in theft of intellectual property

    bull Microchip is willing to work with the customer who is concerned about the integrity of their code

    ATBTLC1000

    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 54

    bull Neither Microchip nor any other semiconductor manufacturer can guarantee the security of theircode Code protection does not mean that we are guaranteeing the product as ldquounbreakablerdquo

    Code protection is constantly evolving We at Microchip are committed to continuously improving thecode protection features of our products Attempts to break Microchiprsquos code protection feature may be aviolation of the Digital Millennium Copyright Act If such acts allow unauthorized access to your softwareor other copyrighted work you may have a right to sue for relief under that Act

    Legal Notice

    Information contained in this publication regarding device applications and the like is provided only foryour convenience and may be superseded by updates It is your responsibility to ensure that yourapplication meets with your specifications MICROCHIP MAKES NO REPRESENTATIONS ORWARRANTIES OF ANY KIND WHETHER EXPRESS OR IMPLIED WRITTEN OR ORAL STATUTORYOR OTHERWISE RELATED TO THE INFORMATION INCLUDING BUT NOT LIMITED TO ITSCONDITION QUALITY PERFORMANCE MERCHANTABILITY OR FITNESS FOR PURPOSEMicrochip disclaims all liability arising from this information and its use Use of Microchip devices in lifesupport andor safety applications is entirely at the buyerrsquos risk and the buyer agrees to defendindemnify and hold harmless Microchip from any and all damages claims suits or expenses resultingfrom such use No licenses are conveyed implicitly or otherwise under any Microchip intellectualproperty rights unless otherwise stated

    Trademarks

    The Microchip name and logo the Microchip logo AnyRate AVR AVR logo AVR Freaks BeaconThingsBitCloud CryptoMemory CryptoRF dsPIC FlashFlex flexPWR Heldo JukeBlox KeeLoq KeeLoq logoKleer LANCheck LINK MD maXStylus maXTouch MediaLB megaAVR MOST MOST logo MPLABOptoLyzer PIC picoPower PICSTART PIC32 logo Prochip Designer QTouch RightTouch SAM-BASpyNIC SST SST Logo SuperFlash tinyAVR UNIO and XMEGA are registered trademarks ofMicrochip Technology Incorporated in the USA and other countries

    ClockWorks The Embedded Control Solutions Company EtherSynch Hyper Speed Control HyperLightLoad IntelliMOS mTouch Precision Edge and Quiet-Wire are registered trademarks of MicrochipTechnology Incorporated in the USA

    Adjacent Key Suppression AKS Analog-for-the-Digital Age Any Capacitor AnyIn AnyOut BodyComchipKIT chipKIT logo CodeGuard CryptoAuthentication CryptoCompanion CryptoControllerdsPICDEM dsPICDEMnet Dynamic Average Matching DAM ECAN EtherGREEN In-Circuit SerialProgramming ICSP Inter-Chip Connectivity JitterBlocker KleerNet KleerNet logo Mindi MiWimotorBench MPASM MPF MPLAB Certified logo MPLIB MPLINK MultiTRAK NetDetach OmniscientCode Generation PICDEM PICDEMnet PICkit PICtail PureSilicon QMatrix RightTouch logo REALICE Ripple Blocker SAM-ICE Serial Quad IO SMART-IS SQI SuperSwitcher SuperSwitcher II TotalEndurance TSHARC USBCheck VariSense ViewSpan WiperLock Wireless DNA and ZENA aretrademarks of Microchip Technology Incorporated in the USA and other countries

    SQTP is a service mark of Microchip Technology Incorporated in the USA

    Silicon Storage Technology is a registered trademark of Microchip Technology Inc in other countries

    GestIC is a registered trademark of Microchip Technology Germany II GmbH amp Co KG a subsidiary ofMicrochip Technology Inc in other countries

    All other trademarks mentioned herein are property of their respective companies

    ATBTLC1000

    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 55

    copy 2018 Microchip Technology Incorporated Printed in the USA All Rights Reserved

    ISBN 978-1-5224-2921-0

    Quality Management System Certified by DNV

    ISOTS 16949Microchip received ISOTS-169492009 certification for its worldwide headquarters design and waferfabrication facilities in Chandler and Tempe Arizona Gresham Oregon and design centers in Californiaand India The Companyrsquos quality system processes and procedures are for its PICreg MCUs and dsPICreg

    DSCs KEELOQreg code hopping devices Serial EEPROMs microperipherals nonvolatile memory andanalog products In addition Microchiprsquos quality system for the design and manufacture of developmentsystems is ISO 90012000 certified

    ATBTLC1000

    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 56

    AMERICAS ASIAPACIFIC ASIAPACIFIC EUROPECorporate Office2355 West Chandler BlvdChandler AZ 85224-6199Tel 480-792-7200Fax 480-792-7277Technical SupporthttpwwwmicrochipcomsupportWeb AddresswwwmicrochipcomAtlantaDuluth GATel 678-957-9614Fax 678-957-1455Austin TXTel 512-257-3370BostonWestborough MATel 774-760-0087Fax 774-760-0088ChicagoItasca ILTel 630-285-0071Fax 630-285-0075DallasAddison TXTel 972-818-7423Fax 972-818-2924DetroitNovi MITel 248-848-4000Houston TXTel 281-894-5983IndianapolisNoblesville INTel 317-773-8323Fax 317-773-5453Tel 317-536-2380Los AngelesMission Viejo CATel 949-462-9523Fax 949-462-9608Tel 951-273-7800Raleigh NCTel 919-844-7510New York NYTel 631-435-6000San Jose CATel 408-735-9110Tel 408-436-4270Canada - TorontoTel 905-695-1980Fax 905-695-2078

    Australia - SydneyTel 61-2-9868-6733China - BeijingTel 86-10-8569-7000China - ChengduTel 86-28-8665-5511China - ChongqingTel 86-23-8980-9588China - DongguanTel 86-769-8702-9880China - GuangzhouTel 86-20-8755-8029China - HangzhouTel 86-571-8792-8115China - Hong Kong SARTel 852-2943-5100China - NanjingTel 86-25-8473-2460China - QingdaoTel 86-532-8502-7355China - ShanghaiTel 86-21-3326-8000China - ShenyangTel 86-24-2334-2829China - ShenzhenTel 86-755-8864-2200China - SuzhouTel 86-186-6233-1526China - WuhanTel 86-27-5980-5300China - XianTel 86-29-8833-7252China - XiamenTel 86-592-2388138China - ZhuhaiTel 86-756-3210040

    India - BangaloreTel 91-80-3090-4444India - New DelhiTel 91-11-4160-8631India - PuneTel 91-20-4121-0141Japan - OsakaTel 81-6-6152-7160Japan - TokyoTel 81-3-6880- 3770Korea - DaeguTel 82-53-744-4301Korea - SeoulTel 82-2-554-7200Malaysia - Kuala LumpurTel 60-3-7651-7906Malaysia - PenangTel 60-4-227-8870Philippines - ManilaTel 63-2-634-9065SingaporeTel 65-6334-8870Taiwan - Hsin ChuTel 886-3-577-8366Taiwan - KaohsiungTel 886-7-213-7830Taiwan - TaipeiTel 886-2-2508-8600Thailand - BangkokTel 66-2-694-1351Vietnam - Ho Chi MinhTel 84-28-5448-2100

    Austria - WelsTel 43-7242-2244-39Fax 43-7242-2244-393Denmark - CopenhagenTel 45-4450-2828Fax 45-4485-2829Finland - EspooTel 358-9-4520-820France - ParisTel 33-1-69-53-63-20Fax 33-1-69-30-90-79Germany - GarchingTel 49-8931-9700Germany - HaanTel 49-2129-3766400Germany - HeilbronnTel 49-7131-67-3636Germany - KarlsruheTel 49-721-625370Germany - MunichTel 49-89-627-144-0Fax 49-89-627-144-44Germany - RosenheimTel 49-8031-354-560Israel - RarsquoananaTel 972-9-744-7705Italy - MilanTel 39-0331-742611Fax 39-0331-466781Italy - PadovaTel 39-049-7625286Netherlands - DrunenTel 31-416-690399Fax 31-416-690340Norway - TrondheimTel 47-7289-7561Poland - WarsawTel 48-22-3325737Romania - BucharestTel 40-21-407-87-50Spain - MadridTel 34-91-708-08-90Fax 34-91-708-08-91Sweden - GothenbergTel 46-31-704-60-40Sweden - StockholmTel 46-8-5090-4654UK - WokinghamTel 44-118-921-5800Fax 44-118-921-5820

    Worldwide Sales and Service

    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 57

    • Introduction
    • Table of Contents
    • 1 Getting Started
      • 11 Software Prerequisites
        • 111 Installation Steps of Atmel Studio 7
          • 12 Software Setup
            • 121 Installation of Microchip SmartConnect application on a Mobile device
              • 13 ATBTLC1000 Embedded Firmware
              • 14 ATBTLC1000 Host Software API
              • 15 Hardware Prerequisites
                • 151 SMARTtrade SAM L21 Xplained Pro
                • 152 ATBTLC1000ZR Xplained Pro Extension board
                  • 16 Hardware Setup
                    • 2 Creating the Project and Initializing
                      • 21 Creating Project from ASF
                      • 22 Configuring ASF for ATBTLC1000-ZR
                      • 23 Compiling and Testing the Project
                        • 3 Establishing Connection with Central Device
                          • 31 Configuring and Starting the Advertisement Process
                            • 311 Flags (AD Type 0x00)
                            • 312 Available Service UUID (AD Types 0x02 to 0x07)
                            • 313 Device Name (AD Types 0x08 to 0x09)
                              • 3131 Setting the Advertisement Payload (ble_advertisement_data_set)
                              • 3132 Starting the Advertisement Process (at_ble_adv_start)
                                • 314 Advertisement Process
                                  • 3141 Starting the Advertisement Process
                                      • 32 Managing GAP events
                                        • 321 Handling of Connected and Disconnected GAP Events
                                            • 4 SettingHandling of Pre-Defined Service
                                              • 41 Adding Device Info Service Component from ASF Wizard to Project
                                              • 42 Configuring and Loading Device Information Service
                                                • 421 Procedure to Configure and Load Device Info Service
                                                    • 5 Setting up and Handling Custom Service
                                                      • 51 Configuring and Loading the Custom Environment Service
                                                        • 511 Procedure to Configure and Load Custom Environment Service
                                                          • 52 Updating the Temperature Characteristic
                                                            • 521 Setting a Characteristic Value ( at_ble_characteristic_value_set)
                                                            • 522 Sending a Notification (at_ble_notification_send)
                                                            • 523 Sending Temperature Information Once in Every 10 Seconds to Central
                                                                • 6 Appendix A Software Solution - Pre-Defined Svc
                                                                • 7 Appendix B Software Solution - Custom Service
                                                                • 8 Document Revision History
                                                                • The Microchip Web Site
                                                                • Customer Change Notification Service
                                                                • Customer Support
                                                                • Microchip Devices Code Protection Feature
                                                                • Legal Notice
                                                                • Trademarks
                                                                • Quality Management System Certified by DNV
                                                                • Worldwide Sales and Service

      Worldwide Sales and Service57

      ATBTLC1000

      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 3

      1 Getting StartedThis chapter describes the basic software and hardware requirements and setup

      11 Software Prerequisites

      111 Installation Steps of Atmel Studio 71 Download and install the Atmel Studio software2 Install the Advanced Software Framework (ASF) package

      Note  The software for ATBTLC1000-ZR is supported with ASF 3351 and above

      Note  For more information on the previous releases refer to the Atmel Studio Release Notes availableon the Microchip web page

      12 Software Setup

      121 Installation of Microchip SmartConnect application on a Mobile device1 Open the Apple Storereg (iPhoneiOS) or Google Playtrade Store (Android) on the mobile device2 Search for ldquoMicrochip SmartConnectrdquo3 Click Install to install application on the device The Microchip SmartConnect application is now

      installed on the mobile deviceFigure 1-1 Microchip SmartConnect Dashboard

      ATBTLC1000Getting Started

      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 4

      13 ATBTLC1000 Embedded FirmwareThe management of Bluetooth Low Energy communication is based on the network stack stored inATBTLC1000 ROM This stack requires parameters such as GAP parameters and attributes to befunctional which are pushed from Host controller into ATBTLC1000 internal SRAM using GenericTransport Layer (GTL)

      The ROM coded firmware embeds the layers of Bluetooth Low Energy stack that runs on top of theinternal hardcoded peripheral drivers and RTOS scheduler

      bull Generic Access Profile (GAP)GAP controls the Bluetooth Low Energy connection advertising makes the device visible to theoutside world and determines how two devices interact with each other GAP defines two mainroles for the Bluetooth Low Energy device Central and Peripheral

      bull Generic Attribute Profile (GATT) and Attribute Protocol (ATT)GATT defines how the Bluetooth Low Energy device transfers the data The GATT process isbased on services and characteristics stored in Attribute Protocol (ATT) ATT is a simple lookuptable stored in device SRAM

      bull Security Manager (SM)The Security Manager defines the procedure for pairing authentication and encryption betweenBLE devices This layer is mainly used if security is requested on that particular connection

      bull Logical Link Control and Adaptation Protocol (L2CAP)L2CAP supports high-level protocol multiplexing packet segmentationreassembly and conveyingthe quality of service information L2CAP permits applications to transmit and receive the datapackets with channel flow control and retransmission

      bull Direct test mode (DTM)DTM allows testing of the radios Physical Layer (PHY) by transmitting and receiving the test packetsequences This is often used in compliance and production line testing without the need of goingthrough the complete Bluetooth Low Energy Protocol Stack

      14 ATBTLC1000 Host Software APIThe ATBTLC1000 is provided with a dedicated Host software API layer The purpose of this API layer isto provide an easy and reliable solution to add Bluetooth Low Energy capabilities to any user applicationThe API provides a set of high level Bluetooth function with abstraction of the transport protocol usedbetween the host MCU and the ATBTLC1000

      ATBTLC1000Getting Started

      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 5

      Figure 1-2 Host Software API

      Figure 1-3 BluSDK File Architecture

      The API operation relies on a request-response mechanism The specific requests are sent toATBTLC1000 through dedicated API function call The event messages are then returned by theATBTLC1000 on request processing or on specific Bluetooth Low Energy events These event messagesare to be handled by the host device according to the user application requirements The following figureillustrates a typical Bluetooth Low Energy peripheral application flowchart

      ATBTLC1000Getting Started

      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 6

      Figure 1-4 Bluetooth Low Energy Peripheral Application Flowchart

      WARNING The user application must be non-blocking to ensure that the Bluetooth Low Energy events arehandled in time

      15 Hardware PrerequisitesThis document uses the ATBTLC1000ZR-XSTK kit The ATBTLC1000ZR-XSTK kit is comprised of theSAM L21 Xplained Pro (XPRO) and ATBTLC1000ZR XPRO extension board The following sectionsprovide an overview of these kits and their features

      151 SMARTtrade SAM L21 Xplained ProThe SMARTtrade SAM L21 Xplained Pro evaluation kit is used to evaluate the ATSAML21J18Bmicrocontroller This kit includes an on-board embedded debugger to program and debugATSAML21J18B The kit also contains an on-board current measurement circuitry which enables theuser to measure current profile over time without any external tools The connection with any XplainedPro modules or external component is possible through available external connectors which makes theboard perfect for prototyping the low-power applications

      ATBTLC1000Getting Started

      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 7

      Figure 1-5 SAM L21 Xplained Pro Module

      152 ATBTLC1000ZR Xplained Pro Extension boardThe ATBTLC1000ZR Xplained Pro extension evaluation kit is Bluetooth Low Energy SoC ATBTLC1000-ZR110CA module This extension is plugged to any of the supported host MCU Xplained Pro evaluationboards to quickly add Bluetooth Low Energy connectivity to the platform This kit provides easy access tothe features of the ATBTLC1000-ZR110CA Bluetooth Low Energy module and illustrates how to integratethe device in a custom design which is supported by the Atmel Studio integrated development platform

      ATBTLC1000Getting Started

      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 8

      Figure 1-6 ATBTLC1000ZR Xpro Board

      The ATBTLC1000ZR Xplained Pro extension board contains

      bull ATBLTC1000-ZR110CA Module ndash Bluetooth Low Energy module with 24 GHz Bluetooth LowEnergy ATBTLC1000-XR1100A SiP

      bull AT30TSE758A Digital Temperature Sensor ndash Integrated temperature sensor with nonvolatileregisters and serial EEPROM Compatible with two-wire (I2C) and SMBus serial interfaces

      bull Current Measurement Header ndash Allows measurement of the current consumption of the board Itmust be closed to enable power to the ATBTLC1000-ZR110CA module

      16 Hardware Setup1 Ensure that ATBTLC1000ZR-XPRO power consumption header is closed and that jumpers are

      placed on pins 2 to 3 of headers J105 J106 J107 and J108 as shown in the following figure

      ATBTLC1000Getting Started

      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 9

      Figure 1-7 ATBTLC1000ZR-XPRO Extension

      2 Connect the ATBTLC1000ZR-XPRO extension to EXT1 of SAM L21 XPRO as illustrated in thefollowing figureFigure 1-8 ATBTLC1000ZR-XPRO Extension connected with SAM L21 XPRO

      3 Connect the board to PC using the ldquoDebug USB ConnectorrdquoFigure 1-9 SAM L21 XPRO Connection to PC

      ATBTLC1000Getting Started

      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 10

      4 Now the Hardware is ready for development

      ATBTLC1000Getting Started

      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 11

      2 Creating the Project and InitializingThis chapter provides the process of creating an application startup project using Atmel Studio Prior tocreating a project the user must know hardware architecture and software requirements to configuredrivers

      The hardware connection between the SAM L21 XPRO and the ATBTLC1000ZR XPRO board isillustrated in following figure This SAM L21 board is used as host MCUFigure 2-1 ATBTLC1000ZR Xpro Board Connection with SAM L21

      Note  For more details refer to module datasheet and XPRO board design documentation

      21 Creating Project from ASFAdvanced Software Framework has a pre-configured Bluetooth Low Energy Startup template project thatincludes Bluetooth Low Energy software API for Host and ATBTLC1000 and their peripheral driverdependencies This is used as starting project for any Bluetooth Low Energy project development

      To create the project follow the steps below

      1 Search for the ldquoBLE-Startup Templaterdquo from the File gt New gt Example Project menu in AtmelStudio

      ATBTLC1000Creating the Project and Initializing

      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 12

      Figure 2-2 Advanced Software Framework_New Example Project

      Note  ATBTLC1000SAMB11 related projects are prefixed with ldquoBLErdquo making it easier to filter theproject in the dialogue box

      2 Select the appropriate ldquoBLE-Startup Templaterdquo project corresponding to the intended Host MCUXplained Pro board and then press OK button to import the BLE startup template project SelectldquoBLE-Startup Template ndash SAM L21 Xplained Pro SAML21J18Brdquo for this hands-onNote  Rev B XPRO boards can be identified by SAML21J18B silk screen marking below SAML21MCU

      3 The BLE startup project is now created and loaded in Atmel StudioFigure 2-3 Startup_Template Project

      ATBTLC1000Creating the Project and Initializing

      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 13

      Note  The main project routine of ldquoStartup Template projectrdquo already includes host MCU low levelinitialization BLE and ATBTLC1000 initialization The added ASF components in project can beviewed from ldquoASFgtASF Wizardrdquo Select the created project from Project drop down box

      Figure 2-4 ASF Wizard Window

      ndash BLE_STACK Platform Interface ndash Core manager of Bluetooth Low Energy Host API Itmanages ATBTLC1000 device initialization GAP and GATT events

      ndash Timer Driver ndash Task timer functionality by using a Timer Counter (TC) or Timer Counter forControl (TCC) peripheral

      ndash Console UART ndash Universal Asynchronous ReceiverTransmitter (UART) communication insynchronousblocking mode

      ndash Generic Board Support ndash Host MCU Board specific initializationndash System Drivers ndash Select MCUrsquos System peripheral drivers These drivers are included by

      default in ASF projects and manage the clocks and oscillator of the system4 The main routine contains the MCU low level initialization and ATBTLC1000 initialization The

      following figure illustrates the flowchart of the main routine

      ATBTLC1000Creating the Project and Initializing

      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 14

      Figure 2-5 Main Routine Flowchart

      22 Configuring ASF for ATBTLC1000-ZR1 The default ldquoStartup Template Projectrdquo is configured for ATBTLC1000-MR module with 6-Wire

      mode2 Navigate to Project properties Project gt Project properties gt Toolchain gt ARMGNU C Compiler gt

      Symbols3 The ATBTLC1000ZR-XSTK kit uses the ATBTLC1000-ZR110CA module Change symbol

      BLE_MODULE to BTLC1000_ZR and enable UART_FLOWCONTROL_4WIRE_MODE forATBTLC1000-ZR module as shown in the figure belowFigure 2-6 Startup Template Project Window

      Note  This configuration change is not required for ATBTLC1000-MR module

      ATBTLC1000Creating the Project and Initializing

      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 15

      23 Compiling and Testing the Project

      1 Click the ldquo rdquo button ltF7gt to compile the project2 Verify that no build error appears in Atmel Studio output window

      Figure 2-7 Atmel Studio Output Window

      3 Connect the SAM L21 XPRO to PC (if not already done)4 To access the project properties go to Project gt

      STARTUP_TEMPLATE_SAML21_XPLAINED_PRO_B1 PropertiesFigure 2-8 Compiling the Project

      5 In project properties click the Tool tab and select the EDBG of SAM L21 Xplained Pro board asdebuggerprogrammerFigure 2-9 Selection of DebuggerProgrammer

      6 Open any Terminal application (for example TeraTerm) Select the COM port enumerated on thePC and set the following parameters

      ndash EDBG associated COM Port (Check Windows Device Manager)

      ATBTLC1000Creating the Project and Initializing

      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 16

      ndash Baudrate 115200ndash Parity Nonendash One Stop bitndash Enable Hardware Flow Control

      7 Click to save the project ltCtrl+Sgt

      8 Click rdquo to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt9 The initialization of the ATBTLC1000ZR module must return the Bluetooth Device Address and

      Address typeFigure 2-10 Console Log Window

      Note 1 If initialization fails make sure to verify the hardware configuration is aligned with the

      description refer to 16 Hardware Setup2 The initialization of ATBTLC1000 takes few seconds due to patch download process

      ATBTLC1000Creating the Project and Initializing

      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 17

      3 Establishing Connection with Central DeviceThe Bluetooth Low Energy connectivity is added to the application that is used to connect with theBluetooth Low Energy central The first step is about the management of Bluetooth connection with acentral device When using ATBTLC1000 device this process is managed by dedicated API function callsassociated with ATBTLC1000 events handling

      The interaction between Host MCU ATBTLC1000 and Bluetooth Low Energy central during connectionestablishment is as follows

      Figure 3-1 Establishing Connection with Central Device

      On host MCU side the management of the Bluetooth connection is performed through three main steps1 GAP callback registration2 Advertisement configuration3 ATBTLC1000 event handling

      In the existing project main routine the integration of these steps are highlighted in red in the followingflowchart

      ATBTLC1000Establishing Connection with Central Device

      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 18

      Figure 3-2 Main Routine Flow Chart

      31 Configuring and Starting the Advertisement ProcessThe Bluetooth Low Energy devices transmit advertisement packets to show their presence to nearbydevices The advertisement packet is sent periodically at a time interval defined by variableldquoadvintervalrdquo defined in Bluetooth SIG specification To avoid any collision with other wireless networksuch as Wi-Fireg a channel change is performed for each advertisement packet sent (data frequencyhopping) as illustrated in the following figureFigure 3-3 Advertisement Process

      During advertisement the payload structure to be sent differs from application to application and is set byusing encapsulated packet data unit type information (PDU_TYPE)

      ATBTLC1000Establishing Connection with Central Device

      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 19

      Figure 3-4 PDU Advertising

      The following table lists the different PDU types used according to device role

      Advertising event types (PDU_TYPE) Broadcaster Observer Peripheral Central

      Connectible undirected event (ADV_IND) Excluded Excluded Mandatory Excluded

      Connectible directed event(ADV_DIRECT_IND) Excluded Excluded Optional Excluded

      Non-connectible undirected event(ADV_NONCONN_IND) Mandatory Excluded Optional Excluded

      Scannable undirected event (ADV_SCAN_IND) Optional Excluded Optional Excluded

      As our device acts as a Bluetooth Low Energy peripheral the connectable undirected event (ADV_IND)advertising type is used See the following description about the ADV_IND advertisement packetFigure 3-5 ADV_IND Advertisement Packet

      The ADV_IND payload contains different Advertisement Data types (AD0 - ADn) which provide specificinformation to the central device such as device short name Tx power level and list of availableservices UUIDs The number of advertisement data types that can be added to the advertisementpayload are limited by the advertisement payload size of 31 octets

      Following is a list of advertisement data types that are commonly found in ADV_IND payload

      ATBTLC1000Establishing Connection with Central Device

      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 20

      311 Flags (AD Type 0x00)The flags describe the basic device capability such as BLE support BLE discoverable mode BREDRsupport and simultaneous BRED

      312 Available Service UUID (AD Types 0x02 to 0x07)The Bluetooth Low Energy advertisement payloads are limited to 31 bytes Therefore only two 128-bitUUID values can be added to the payload For this purpose the specific AD types describe the length ofthe advertised UUID and provide information as to whether the payload contains a incompletecompletelist of UUID supported by the GATT server

      bull 0x02 - Incomplete list of 16-bit UUIDs (adopted GATT services)bull 0x03 - Complete list of 16-bit UUIDs (adopted GATT services)bull 0x06 - Incomplete list of 128-bit UUIDs (custom GATT services)bull 0x07 - Complete list of 128-bit UUIDs (custom GATT services)

      Note  When a 16-bit UUID is transmitted only the unique 2-byte value is sent The client knows that it isrequired to be injected into the base UUID For example the Health Thermometer Service is assigned as0x1809 so its equivalent UUID is 00001809-0000-1000-8000-00805F9B34FB

      313 Device Name (AD Types 0x08 to 0x09)This AD type field is used to advertise the Local name of device in the network The Local name datatype value indicates if the name is complete or shortened If the name is shortened the complete namecan be read after the connection is established

      bull 0x08 - Shortened Local Namebull 0x09 - Complete Local Name

      Note 1 A shortened name contains only continuous characters from the beginning of the full name For

      example if the device name is BT_Device_Name then the shortened name can beBT_Device or BT_Dev

      2 Complete data type list are available at httpswwwbluetoothcomspecificationsassigned-numbersgeneric-access-profile

      For management of advertisement process and cover the different configurations specified by SIG theATBTLC1000 Host driver provides the two functions elaborated in the following sections

      In the application use these two functions to setup the following ADV_IN type payloadFigure 3-6 ADV_IN Type Payload Process

      ATBTLC1000Establishing Connection with Central Device

      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 21

      3131 Setting the Advertisement Payload (ble_advertisement_data_set)Prototype ndashat_ble_status_t at_ble_adv_data_set (uint8_t const const adv_datauint8_t adv_data_lenuint8_t const const scan_resp_datauint8_t scan_response_data_len)

      Description ndash Set clear or update the advertisement and scan response data

      Parameters ndash

      bull adv_data ndash Raw data to be placed in advertisement packetbull adv_data_len ndash Data length for adv_data Max size 28 bytes (3 bytes are reserved to set

      advertising AD type flags based on the selected Advertising mode and the user is not required toconfigure AD type flags in the advertisement payload)

      bull scan_resp_data ndash Raw data to be placed in the scan response packet If NULL no changes aremade to the current scan response packet data

      bull scan_response_data_len ndash Data length for scan_resp_data Max size 31 bytes

      Return ndash Execution Status

      This function requires a parameter raw adv_data to be sent to central Following is an example of itsdefinition

      static uint8_t adv_data[] = 0x11 AD1 length = 170x03 AD1 Type = Complete list of 128-bit UUIDs0x1b0xc50xd50xa50x020x000xa60x87 AD1 = UUID MSBs0xe50x110x360x390xc00xba0x5a0xf00x0A AD2 Length = 100x09 AD2 Type = Complete local NamelsquoMrsquorsquoyrsquorsquo_rsquorsquoDrsquorsquoErsquorsquoVrsquo AD2 = ldquoMy_DEVrdquo

      3132 Starting the Advertisement Process (at_ble_adv_start)Prototype ndashat_ble_status_t at_ble_adv_start (at_ble_adv_type_t typeat_ble_adv_mode_t modeat_ble_addr_t peer_addrat_ble_filter_type_t filtereduint16_t intervaluint16_t timeoutbool disable_randomness)

      Description ndash Start advertisement process

      Parameters ndash

      bull type ndash Advertising type to be used can bendash AT_BLE_ADV_TYPE_UNDIRECTEDndash AT_BLE_ADV_TYPE_DIRECTEDndash AT_BLE_ADV_TYPE_SCANNABLE_UNDIRECTEDndash AT_BLE_ADV_TYPE_NONCONN_UNDIRECTEDndash AT_BLE_ADV_TYPE_DIRECTED_LDCndash AT_BLE_ADV_TYPE_SCAN_RESPONSE

      bull mode ndash Advertising mode to be used can be

      ATBTLC1000Establishing Connection with Central Device

      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 22

      ndash AT_BLE_ADV_NON_DISCOVERABLEndash AT_BLE_ADV_GEN_DISCOVERABLEndash AT_BLE_ADV_LIM_DISCOVERABLEndash AT_BLE_ADV_BROADCASTER_MODE

      bull peer_addr ndash Specify peer address when advertising type is AT_BLE_ADV_TYPE_DIRECTEDbull filtered ndash

      ndash AT_BLE_ADV_FP_ANY ndash Allow scan and connection requests from anyonendash AT_BLE_ADV_FP_FILTER_SCANREQ ndash Allow scan request from White List devices onlyndash AT_BLE_ADV_FP_FILTER_CONNREQ ndash Allow connection request from White List devices

      onlyndash AT_BLE_ADV_FP_FILTER_BOTH ndash Allow scan and connection requests from White List

      devices onlybull interval ndash Advertisement interval (in 0625 ms units)bull timeout ndash Advertising timeout between 0x0001 and 0x028F in scale of seconds This parameter

      must be set to 0 if type equals AT_BLE_ADV_TYPE_DIRECTEDbull disable_randomness ndash When disabled advertisements are performed at the exact interval

      without adding random 10 ms tempo

      Return ndash Execution Status

      314 Advertisement ProcessIn this assignment the advertisement process is performed in the following configuration

      bull Undirected (Type AT_BLE_ADV_TYPE_UNDIRECTED)bull Discoverable (Mode AT_BLE_ADV_GEN_DISCOVERABLE)bull No peer Address (peer_addr = NULL)bull No filtering (filtered = AT_BLE_ADV_FP_ANY)bull Advertisement interval 1s (interval = 1600)bull Maximum timeout (timeout 655)bull Randomness enabled (disable_randomness = FALSE)

      3141 Starting the Advertisement Process1 Open startup_templatec file2 Declare the following ble_status global variable in startup_templatec as volatile

      include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehvolatile at_ble_status_t ble_status

      3 Declare the following adv_data global variable in startup_templatec as staticstatic uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD)0x09 AD2 Type = Complete local Name

      ATBTLC1000Establishing Connection with Central Device

      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 23

      My_SENS AD2 = ldquoMy_SENSrdquo

      Note 1 The name of the device is to be changed (AD2 field)2 According to the new name AD2 length must be adapted to new AD2 content

      4 Add the following start_advertisement function in startup_templatec prototype for thefunction void start_advertisement (void) also this can be added to avoid warningsvoid start_advertisement (void)printf(n Assignment 21 Start Advertisement)Set advertisement datable_status = at_ble_adv_data_set(adv_datasizeof(adv_data)NULL0)Start Advertisementble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550)if(ble_status = AT_BLE_SUCCESS)printf(n Failed to start advertisement)

      5 Start the advertisement process by adding the following highlighted code to the application mainroutineint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Start Advertising process start_advertisement() Register PrimaryIncluded service in case of GATT Server while(true) Write application task

      6 Click to save the project ltCtrl+Sgt

      7 Click button to compile the project ltF7gt8 Verify that no build error appears in Atmel Studio output window

      Figure 3-7 Atmel Studio Output Window

      ATBTLC1000Establishing Connection with Central Device

      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 24

      9 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt10 Open Microchip SmartConnect Application on Android or iOS device and tap START SCAN button

      Note  The device must appear in Microchip SmartConnect Application

      Figure 3-8 Microchip SmartConnect Application

      11 Terminal must display the following Log outputFigure 3-9 Log Output Window

      32 Managing GAP eventsThe management of the Bluetooth connection at the host MCU level is done through reception andhandling of events reported by the ATBTLC1000 These events are generated by ATBTLC1000 GAPGATT and L2CAP layers to notify the host about the ongoing Bluetooth interaction with other devices inits vicinity

      ATBTLC1000Establishing Connection with Central Device

      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 25

      To manage events coming from the ATBTLC1000 module the host driver must provide able_mgr_events_callback_handler function that allows registration of application callback functionto be executed on each event reported by the ATBTLC1000 module

      Prototype ndashbool ble_mgr_events_callback_handler(ble_mgr_event_cb_t event_cb_typeble_mgr_event_t event_typeconst voidble_event_handler)

      Description ndash Used by ProfileServiceApplication to register the Bluetooth Low Energy eventsrsquocallbacks

      Parameters ndash

      event_cb_type ndash types of actions to perform on callbacks can be either

      REGISTER_CALL_BACK or

      UNREGISTER_CALL_BACKevent_type ndash Any one of the event types can be used

      BLE_GAP_EVENT_TYPEBLE_GATT_CLIENT_EVENT_TYPEBLE_GATT_SERVER_EVENT_TYPEBLE_L2CAP_EVENT_TYPEBLE_GATT_HTPT_EVENT_TYPEBLE_DTM_EVENT_TYPEBLE_CUSTOM_EVENT_TYPEble_event_handler ndash pointer to handler list

      Structure ble_gap_event_cb_t defines the GAP callbacks Similarly structuresble_gatt_client_event_cb_t and ble_gatt_server_event_cb_t define the callbacks of GATTevents

      typedef struct ble_gap_event_cb BLE Undefined events received from ATBTLC1000 which is not handled in Libraryble_event_callback_t undefined BLE scan information contains the peer device scan information Refer ref at_ble_scan_info_tble_event_callback_t scan_info Once the BLE scan timeout or scan stop triggers the scan report event Refer ref at_ble_scan_report_tble_event_callback_t scan_report Advertisement complete event Refer ref at_ble_adv_cmp_evt_tble_event_callback_t advt_cmp Advertisement report in case of advertisement stopped due to advertisement timeout Refer ref at_ble_adv_report_tble_event_callback_t adv_report BLE device own random address changed event Refer ref at_ble_rand_addr_changed_tble_event_callback_t rand_addr_changed BLE connected event device connected to peer device Refer ref at_ble_connected_tble_event_callback_t connected BLE disconnected event device disconnected from peer device Refer ref at_ble_disconnected_tble_event_callback_t disconnected Connection parameter update done on peer device and own device Refer ref at_ble_conn_param_update_done_t

      ATBTLC1000Establishing Connection with Central Device

      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 26

      ble_event_callback_t conn_parameter_update_done Connection parameter update request from peer device Refer ref at_ble_conn_param_update_request_tble_event_callback_t conn_param_update_request Pair complete event as part of end of pairing process Refer ref at_ble_pair_done_tble_event_callback_t pair_done Pair request event from Central device Refer ref at_ble_pair_request_tble_event_callback_t pair_request Slave security request received from peer Peripheral device Refer ref at_ble_slave_sec_request_tble_event_callback_t slave_sec_request Pair Key request event from Peer central device Refer ref at_ble_pair_key_request_tble_event_callback_t pair_key_request encryption request comes from the peer device Needs to supply the bonding information which is stored earlier ref at_ble_encryption_request_tble_event_callback_t encryption_request encryption status changed event received from SMP once the encryption is started ref at_ble_encryption_status_changed_tble_event_callback_t encryption_status_changed Event triggered once the Resolve random address is resolved using supplied IRKs ref at_ble_resolv_rand_addr_status_tble_event_callback_t resolv_rand_addr_status Event is triggered once the connection signature information indication received ref at_ble_sign_counter_tble_event_callback_t sign_counters_ind Peer attribute information indication received Event ref at_ble_peer_att_info_ind_tble_event_callback_t peer_att_info_ind Peer device channel map received indication ref at_ble_channel_map_tble_event_callback_t con_channel_map_indble_gap_event_cb_t

      Note  Callback definition is application-specific If the application layer requires a specific event callbackthen the specific member of the structure is to be assigned with the address of the callback function

      In this assignment two callback functions on Connected and Disconnected GAP events are usedThis allows the application to restart the advertising process on Disconnect manage connectioninformation and startstop of sensor data update

      321 Handling of Connected and Disconnected GAP Events1 Open the startup_templatec file2 Define the following software flags as global variables in startup_templatec file volatile

      bool timer_flag = false and volatile bool connected_flag = false3 Declare and implement the following ble_connected_cb function in the

      startup_templatec file Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param)printf(n Assignment 22 Application connected )connected_flag = trueALL_UNUSED(param)return AT_BLE_SUCCESS

      4 Declare and implement the following ble_disconnected_cb function instartup_templatec file Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param)printf(n Assignment 22 Application disconnected )connected_flag = falsestart_advertisement()ALL_UNUSED(param)return AT_BLE_SUCCESS

      ATBTLC1000Establishing Connection with Central Device

      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 27

      5 Declare the following static GAP callback structure in ldquostartup_templatecrdquo filestatic const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTEDdisconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

      6 Add the following register_btlc1000_callbacks function in startup_templatec Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void) Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks)ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACKBLE_GAP_EVENT_TYPEampapp_gap_handle)if (ble_status = true)printf(nError when Registering ATBTLC1000 callbacks)

      7 Add the register_btlc1000_callbacks function call prior to start advertisement in theapplication main routineint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Gap Callbacks register_btlc1000_callbacks ( ) Start Advertising process start_advertisement() Register PrimaryIncluded service in case of GATT Server while(true) Write application task

      8 Add the ble_event_task function call in the project main loop to handle the different incomingevents from ATBTLC1000while(true)ble_event_task()

      9 Press button ltF7gt to compile the project and verify that no build error appear in the AtmelStudio output window

      ATBTLC1000Establishing Connection with Central Device

      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 28

      Figure 3-10 Atmel Studio Output Window

      10 Click ldquo rdquo to save the project ltCtrl+Sgt

      11 Click ldquo rdquo to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt and checkcorrect initialization of the ATBTLC1000

      12 Open the Microchip SmartConnect application on Androidtrade or iOS device13 Press the ltStart Scangt button and pair peripherals by selecting them in the device list (pass key

      123456)Note 

      1 Pairing event handling is carried out by ble_managerc Refer toble_pair_key_request_handler() for code implementation The default pass key of123456 is also fixed inside this function This can be changed here

      Figure 3-11 Console Log Window

      Note  After peripheral pairing no services information are displayed in Microchip SmartConnectapplication as no service is currently defined and started on peripheral side

      ATBTLC1000Establishing Connection with Central Device

      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 29

      4 SettingHandling of Pre-Defined ServiceThe management of services are done in the GATT layer of the ATBTLC1000 ROM coded Bluetooth LowEnergy Stack The GATT transactions are based on high-level nested objects called Profiles Servicesand Characteristics stored in SRAM memory of ATBTLC1000 device This assignment adds the pre-defined service of information service from ASF library

      Figure 4-1 ATBTLC1000 GATT Layers

      bull ProfilesProfiles are not available in the Bluetooth Low Energy peripheral they are simply a pre-definedcollection of services that have been compiled by either the Bluetooth SIG (adopted GATT basedprofile) or by the application developer (custom profiles) For example the Heart Rate Profilecombines the Heart Rate Service and the Device Information Service

      Note  The complete list of officially adopted GATT-based profiles is available on the BluetoothDeveloper Portal

      bull ServicesA service is a collection of data and associated behaviors which accomplish a particular function orfeature of a device or portions of a device A service may reference other primary or secondaryservices andor a set of characteristics that make up the service Each service distinguishes itselffrom other services by means of a unique numeric ID called as UUID which can be either 16-bit(for officially adopted Bluetooth Low Energy Services) or 128-bit (for custom services)

      Note  A full list of officially adopted services and their UUID are seen on the Bluetooth DeveloperPortal

      bull CharacteristicsA characteristic is the lowest level concept in GATT transactions It contains a single data point withdifferent attributes such as notify read or write capabilities Similar to Services each characteristiccan be distinguished by a SIG-defined adopted UUID (16-bit) or custom (128-bit) UUID This UUIDensures interoperability across Bluetooth Low Energy devices The characteristics are important tointeract with in a Bluetooth Low Energy network In addition to standard UUID the custom UUID isused in case of specific application When characteristics with custom UUID are used in a devicethen it will be interoperable only with those devices that support these characteristics with customUUID

      ATBTLC1000SettingHandling of Pre-Defined Service

      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 30

      In this assignment the following steps are added to the Host MCU application to set up and handle adevice information service within the ATBTLC1000 module The following steps are added to the startupproject

      bull Adding device info service component from ASFbull Configuring and loading the service

      Figure 4-2 Device Information Service

      41 Adding Device Info Service Component from ASF Wizard to ProjectTo use the ldquoofficially adopted GATT-based profilesrdquo from SIG ASF provides Bluetooth Low Energy servicecomponents including init functions that pre-define services in Host memory

      Note  Before starting this assignment be sure to follow the steps mentioned in 2 Creating the Projectand Initializing and 3 Establishing Connection with Central Device

      1 Click ASF gt ASF Wizard2 Search for ldquoBLE-Device Information Servicesrdquo and then click Add

      ATBTLC1000SettingHandling of Pre-Defined Service

      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 31

      Figure 4-3 Available Modules

      3 Now ldquoBLE-Device Information Servicesrdquo (component) appears in ldquoSelected ModulesrdquoFigure 4-4 Selected Modules

      4 Click Apply to add the component to the projectFigure 4-5 Adding the Modules to Project

      5 The ldquoDevice Information Servicerdquo component is added to the project and is confirmed bydevice_information folder added in Solution Explorer

      ATBTLC1000SettingHandling of Pre-Defined Service

      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 32

      Figure 4-6 Device Information Service Added to Project

      42 Configuring and Loading Device Information ServiceThe ATBTLC1000 Host driver provides a set of GATT functions that allows storing and updating theservices in ATBTLC1000 memories

      Prototype at_ble_status_t at_ble_primary_service_define(at_ble_uuid_t uuidat_ble_handle_t service_handleat_ble_included_service_t included_service_listuint16_t included_service_countat_ble_characteristic_t charactristic_listuint16_t charactristic_count)

      Description Defines a new primary service along with its included services and characteristics inATBTLC1000

      Parameters

      bull Uuid [In] ndash primary service UUIDbull service_handle [Out] ndash Service handle is returned herebull included_service_list [In] ndash an array of included service referencesbull included_service_count [In] ndash number of elements in included_service_listbull charactristic_list [InOut] ndash an array of characteristics included in the service this array

      is updated with respective characteristics handlesbull charactristic_count[In] ndash number of elements in charactristic_list

      Return Execution Status

      This function requires an argument as GATT description structure of the service that is implemented Thepreviously added Device Info service component provides Bluetooth Low Energy service middlewareincluding the init functions that predefine the services See below ldquodis_init_servicerdquo from device infoBLE service (device_infohc)

      Prototype ndash void dis_init_service(dis_gatt_service_handler_t device_info_serv)Description ndash Initialize the device information service handler in the host MCU memory

      Parameters ndash

      ATBTLC1000SettingHandling of Pre-Defined Service

      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 33

      bull device_info_serv [Inout] pointer to device info GATT description handler to beupdated

      Return None

      Here is a picture of GATT device info service descriptor definition in Host memory

      device_info_serv-gtserv_handle = 0device_info_serv-gtserv_uuidtype = AT_BLE_UUID_16device_info_serv-gtserv_uuiduuid[0] = (uint8_t) DIS_SERVICE_UUIDdevice_info_serv-gtserv_uuiduuid[1] = (uint8_t) (DIS_SERVICE_UUID gtgt 8)Characteristic Info for Manufacturer Name Stringdevice_info_serv-gtserv_chars[0]char_val_handle = 0 handle stored here device_info_serv-gtserv_chars[0]uuidtype = AT_BLE_UUID_16device_info_serv-gtserv_chars[0]uuiduuid[0] = (uint8_t) IS_CHAR_MANUFACTURER_NAME_UUID UUID Manufacturer Name String device_info_serv-gtserv_chars[0]uuiduuid[1] = (uint8_t) (DIS_CHAR_MANUFACTURER_NAME_UUID gtgt 8) UUID Manufacturer Name String device_info_serv-gtserv_chars[0]properties = AT_BLE_CHAR_READ Properties memcpy(char_valuemanufacturer_nameDEFAULT_MANUFACTURER_NAMEDIS_CHAR_MANUFACTURER_NAME_INIT_LEN)device_info_serv-gtserv_chars[0]init_value = char_valuemanufacturer_namedevice_info_serv-gtserv_chars[0]value_init_len = DIS_CHAR_MANUFACTURER_NAME_INIT_LENdevice_info_serv-gtserv_chars[0]value_max_len = DIS_CHAR_MANUFACTURER_NAME_MAX_LENif BLE_PAIR_ENABLEdevice_info_serv-gtserv_chars[0]value_permissions = AT_BLE_ATTR_READABLE_REQ_AUTHN_NO_AUTHR permissions elsedevice_info_serv-gtserv_chars[0]value_permissions = AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR permissions endifdevice_info_serv-gtserv_chars[0]user_desc = NULL user defined name device_info_serv-gtserv_chars[0]user_desc_len = 0device_info_serv-gtserv_chars[0]user_desc_max_len = 0device_info_serv-gtserv_chars[0]user_desc_permissions = AT_BLE_ATTR_NO_PERMISSIONS user description permissionsdevice_info_serv-gtserv_chars[0]client_config_permissions = AT_BLE_ATTR_NO_PERMISSIONS client config permissionsdevice_info_serm hdsv-gtserv_chars[0]server_config_permissions = AT_BLE_ATTR_NO_PERMISSIONS server config permissionsdevice_info_serv-gtserv_chars[0]user_desc_handle = 0 user desc handlesdevice_info_serv-gtserv_chars[0]client_config_handle = 0 client config handlesdevice_info_serv-gtserv_chars[0]server_config_handle = 0 server config handlesdevice_info_serv-gtserv_chars[0]presentation_format = NULL presentation format

      Note  In case of custom service the above definition initialization must be taken care of by thedeveloper

      421 Procedure to Configure and Load Device Info Service1 Include device info service header file (device_infoh) at the beginning of

      startup_templatec fileinclude ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehinclude device_infoh

      2 Define a device info service handler as global in startup_templatec file Serviceshandlers dis_gatt_service_handler_t dis_service_handler

      ATBTLC1000SettingHandling of Pre-Defined Service

      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 34

      3 Add dis_init_service and at_ble_primary_service_define functions as called abovethe advertisement start in main routine Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service)dis_init_service (ampdis_service_handler) Define the primary service in the GATT server database if ((dis_primary_service_define (ampdis_service_handler)) = AT_BLE_SUCCESS)printf(Device Information Service definition failed) Start Advertising process start_advertisement()

      4 Click to save the project ltCtrl+Sgt and compile the project by pressing button ltF7gt5 Verify that no build error appears in Atmel Studio output window

      Figure 4-7 Atmel Studio Output Window

      6 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt7 Open ldquoMicrochip SmartConnectrdquo application on Android or iOS device8 Press ltStart Scangt button and connect to peripheral

      Note  The device name is a characteristic and contains the name of the device This device namecan be read by the central device to know the name of the device in order to differentiate thedevices This is being set using at_ble_device_name_set()API The device name is set bydefault when ble_device_init is called and the value is pre-defined using BLE_DEVICE_NAMEThe device name can also be sent as part of advertisement payload to be same as the oneconfigured in at_ble_adv_data_set() API It is the responsibility of users to keep the devicename set in advertisement payload the same as that configured inat_ble_device_name_set()

      9 The Service must now be visible after pairing with peripheral under Microchip SmartConnectapplication

      ATBTLC1000SettingHandling of Pre-Defined Service

      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 35

      Figure 4-8 Service List in Microchip SmartConnect Application

      Note  If the pairing of ATBTLC1000 with Microchip Smart connect is not successful then removethe pairing information from mobile by selecting ldquoForget Devicerdquo from the mobile settings Thereason for this is that the mobile app stores the previous pairing information but the ATBTLC1000device lost the previous pairing information due to RESET since it was stored on temporary storage(RAM)

      10 The serial terminal must display the following log output windowFigure 4-9 Console Log Window

      ATBTLC1000SettingHandling of Pre-Defined Service

      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 36

      5 Setting up and Handling Custom ServiceThe previous assignment describes the handling of Bluetooth Low Energy SIG defined device infoservice which is the predefined service available in ASF component This assignment describes thecustom service So the service initialization needs to be implemented In the context of customizedenvironment service the following service description is pushed in ATBTLC1000 memory

      Figure 5-1 Custom Service

      Custom Environment Service Description

      bull UUID type ndash Custom UUID (128-bit)bull UUID ndash 1bc5d5a5-0200-a687-e511-3639c1ba5af0

      Characteristic 0 (Temperature)

      bull User Description ndash Temperaturebull UUID type ndash Custom UUID (128-bit)bull UUID ndash 1bc5d5a5-0200-a687-e511-3639d8ba5af0bull Properties ndash Read Notifybull Value permission ndash No authorization requiredbull Client config permission ndash No permissionbull Server config permission ndash No permission

      Note  In this definition UUIDs are generated randomly Custom servicescharacteristics are free to useany 128-bit UUID less than the base UUID There is no reserved space for vendors to use 16-bit or 32-bitUUIDs

      With this definition any temperature change is notified to the central The notify mechanism allows thecentral to know when the data changes When notify property of the Client Characteristic ConfigurationDescriptor is enabled by the central and the device writes the new value then this updated value isautomatically sent to the central through a notification The central is not required to send readcharacteristic commands explicitly to the peripheral (GATT server)

      To setup and handle the custom environment service in ATBTLC1000 module the following steps areadded to the Host MCU application

      bull Configure and load the custom servicebull Update Temperature characteristic and notify to the central devicebull Receive and handle notification from the Host device

      ATBTLC1000Setting up and Handling Custom Service

      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 37

      Figure 5-2 Custom Service Flowchart

      51 Configuring and Loading the Custom Environment ServiceThe ATBTLC1000 Host driver provides the following set of GATT functions that allows it to push andupdate the service descriptions in the ATBTLC1000 SRAM memory

      Note  Before starting this assignment be sure to follow the steps mentioned in 2 Creating the Projectand Initializing and 3 Establishing Connection with Central Device

      Prototype ndashat_ble_status_t at_ble_primary_service_define(at_ble_uuid_t uuidat_ble_handle_t service_handleat_ble_included_service_t included_service_listuint16_t included_service_countat_ble_characteristic_t charactristic_listuint16_t charactristic_count)

      Description ndash Defines a new primary service along with its included services and characteristics inATBTLC1000 module

      Parameters

      bull Uuid [In] ndash primary service UUIDbull service_handle [Out] ndash service handle is returned herebull included_service_list [In] ndash array of included service referencesbull included_service_count [In] ndash number of elements in included_service_listbull charactristic_list [InOut] ndash an array of characteristics included in the service this array

      is update with respective characteristics handlesbull charactristic_count[In] ndash number of elements in charactristic_list

      ATBTLC1000Setting up and Handling Custom Service

      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 38

      Return ndash Execution Status

      bull Characteristics ndashndash Characteristics definition is done through specific array of following

      ldquoat_ble_characteristic_trdquo structure instancestypedef structat_ble_handle_t char_val_handle Handler (returned during service initialisation)at_ble_uuid_t uuid Characteristic UUID (type and value)at_ble_char_properties_t propertiesCharac Properties (read write notify)uint8_t init_value initial valueuint16_t value_init_len initial value lengthuint16_t value_max_len value max lengthat_ble_attr_permissions_t value_permissions access authorization and authenticationuint8_t user_desc User descriptionuint16_t user_desc_len User description lengthuint16_t user_desc_max_len User description max lengthat_ble_char_presentation_t presentation_format Presentation formatat_ble_attr_permissions_t user_desc_permissions User description permissionat_ble_attr_permissions_t client_config_permissions client permissionat_ble_attr_permissions_t server_config_permissions server permissionat_ble_handle_t user_desc_handle description handlerat_ble_handle_t client_config_handle Client config handlerat_ble_handle_t server_config_handle Server config handler at_ble_characteristic_t

      511 Procedure to Configure and Load Custom Environment Service1 Define the following service UUID and characteristic UUID in startup_templatec file

      define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

      2 Define the following environment service handler and characteristics variable as global instartup_templatec file Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

      3 Add the following service initialization function custom_environment_service_init instartup_templatecvoid custom_environment_service_init(void) at_ble_uuid_t environment_service_uuiduint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUIDuint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperatureenvironment_service_characs[0]user_desc_len = 10environment_service_characs[0]user_desc_max_len = 10environment_service_characs[0]uuidtype = AT_BLE_UUID_128memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16)environment_service_characs[0]properties = AT_BLE_CHAR_READ |AT_BLE_CHAR_NOTIFYenvironment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature valueenvironment_service_characs[0]value_permissions =(AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuidampenvironment_service_handlerNULL0environment_service_characs1)=AT_BLE_SUCCESS)printf(n Assignment 41 Failed to Initialize custom environment service)

      ATBTLC1000Setting up and Handling Custom Service

      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 39

      elseprintf(n Assignment 41 Initialize custom environment service)

      4 Declare and implement the following GATT event callback functioncustom_char_changed_app_event in startup_templatec file If a client (central) enablesnotifications for a server the server (peripheral) receives an AT_BLE_CHARACTERISTIC_CHANGEDevent and this event callback is called Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

      5 Declare and implement the following custom_notification_confirmation_handlerfunction in startup_templatec file Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param)at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )paramif (event_param-gtstatus == AT_BLE_SUCCESS)printf(n Assignment 41Notification Successfully sent over the air) else printf(n Assignment 41Sending Notification over the air failed)return AT_BLE_SUCCESS

      6 Declare the following GATT server callback structure in startup_templatec file Thisassignment uses two GATT callbacksstatic const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handlercharacteristic_changed = custom_char_changed_app_event

      7 Add the following register_gatt_server_callbacks function in startup_templatec toregister GATT server callback for notification confirmation event Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks)ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACKBLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle)if (ble_status = true)printf(nError when Registering ATBTLC1000 callbacks)

      8 Add custom_environment_service_init and register_gatt_server_callbacksfunction calls prior to start advertisement in the application main routine to initialize custom serviceand to register the GATT server callbacksint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()

      ATBTLC1000Setting up and Handling Custom Service

      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 40

      endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks() Custom service init custom_environment_service_init ( ) Register Gatt server callbacks register_gatt_server_callbacks ( ) Start Advertising process start_advertisement()while(true)ble_event_task()

      9 Click to save the project ltCtrl+Sgt

      10 Compile the project by pressing button ltF7gt11 Verify that no build error appears in the Atmel Studio output window

      Figure 5-3 Atmel Studio Output Window

      12 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt13 Open the ldquoMicrochip SmartConnectrdquo application on Android or iOS device14 Connect and pair to the peripheral (pass key 123456)15 Custom service must now be visible after pairing with peripheral under Microchip SmartConnect

      application

      ATBTLC1000Setting up and Handling Custom Service

      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 41

      Figure 5-4 Service List in Microchip SmartConnect Application

      Note  Custom service is displayed as unknown service in the above figure as this service is not aSIG-defined service

      Figure 5-5 General Information

      16 Serial terminal client must display the following Log output

      ATBTLC1000Setting up and Handling Custom Service

      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 42

      Figure 5-6 Log Output Window

      52 Updating the Temperature CharacteristicIn the previous assignment the custom Temperature characteristic is defined with a notify attribute Thistype of attribute requires notification to be sent to central when a new characteristic value is availableThe update of any ldquonotifyrdquo characteristic value is based on following interaction between the Host MCUand the ATBTLC1000Figure 5-7 Characteristic Notification

      521 Setting a Characteristic Value ( at_ble_characteristic_value_set)Prototype ndashat_ble_status_t at_ble_characteristic_value_setat_ble_handle_t handleuint8_t valueuint16_t len)

      Description ndash Sets a characteristic value in ATBTLC1000 memory

      Parameters ndash

      ATBTLC1000Setting up and Handling Custom Service

      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 43

      bull handle [inout] ndash Pointer to Characteristic handle to be changedbull value [in] ndash New valuebull len [in] ndash Value length in bytes

      Return ndash Execution Status

      522 Sending a Notification (at_ble_notification_send)Prototype ndashat_ble_status_t at_ble_notification_send(at_ble_handle_t conn_handleat_ble_handle_t attr_handle)

      Description ndash Sends a Notification

      Parameters ndash

      bull conn_handle[in] ndash handle of the connection to be notifiedbull attr_handle [in] ndash handle of the attribute originating the notification

      Return ndash Execution Status

      523 Sending Temperature Information Once in Every 10 Seconds to Central1 Modify the following ldquotimer_callback_fnrdquo callback function from the startup_templatec

      filestatic void timer_callback_fn(void)timer_flag = true

      2 hw_timer_init()in main routine of startup_templatec initializes the hardware timer3 If a client (Central) enables the notifications for a server the server (Peripheral) receives an

      AT_BLE_CHARACTERISTIC_CHANGED event callback then start the periodic 10 second timer forsending the notification Add the following code in previously definedcustom_char_changed_app_event function Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))timer_flag = falsehw_timer_start(10)printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

      4 Declare the following Temperature_value global variable in startup_templatec staticuint8_t Temperature_value = 25 as static

      5 Add the following send_temperature_notification function in startup_templatec tosend temperature every 10 seconds Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++

      ATBTLC1000Setting up and Handling Custom Service

      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 44

      if(Temperature_value gt 75)Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set(environment_service_characs[0]char_val_handle(uint8_t )ampTemperature_valuesizeof(Temperature_value))ble_status = at_ble_notification_send(0environment_service_characs[0]char_val_handle)if(ble_status = AT_BLE_SUCCESS)printf(fail to send temperature update notification )

      6 Add the following code in main routine to send temperature data every 10 secondswhile (1) ble_event_task()if(connected_flag == true ampamp timer_flag == truetimer_flag = falsesend_temperature_notification()

      7 Click to save the project ltCtrl+Sgt

      8 Compile the project by pressing the button ltF7gt9 Verify that no build error appears in Atmel Studio output window

      Figure 5-8 Atmel Studio Output Window

      10 Click to program the project binary on the L21 Xplained XSTK11 Open ldquoMicrochip SmartConnectrdquo Application on Android or iOS device12 Connect and pair to the peripheral (pass key 123456)13 Click NOTIFY to start the notification14 Temperature information in HEX values must be displayed in Microchip SmartConnect application

      ATBTLC1000Setting up and Handling Custom Service

      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 45

      Figure 5-9 Notification Window

      15 Serial terminal must display the following log outputFigure 5-10 Log Output Window

      ATBTLC1000Setting up and Handling Custom Service

      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 46

      6 Appendix A Software Solution - Pre-Defined SvcThe following is the code implementation for handling of pre-defined service done in 4 SettingHandlingof Pre-Defined Service

      - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehinclude device_infoh

      volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false Services handlers dis_gatt_service_handler_t dis_service_handler

      static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

      void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

      Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

      Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

      static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

      Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void) Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks)

      ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 47

      ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

      timer callback function static void timer_callback_fn(void) Add timer callback functionality here

      void button_cb(void) Add button callback functionality here

      int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

      Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

      DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks()

      Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service) dis_init_service(ampdis_service_handler) Define the primary service in the GATT server database if((dis_primary_service_define(ampdis_service_handler)) = AT_BLE_SUCCESS) printf(Device Information Service definition failed)

      Start Advertising process start_advertisement() while(true) ble_event_task()

      ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 48

      7 Appendix B Software Solution - Custom ServiceThe following is the code implementation for handling of pre-defined service done in 5 Setting up andHandling Custom Service

      - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templateh

      volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false

      static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

      define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0

      define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

      Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

      void custom_environment_service_init(void) at_ble_uuid_t environment_service_uuid uint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUID uint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128 memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperature environment_service_characs[0]user_desc_len = 10 environment_service_characs[0]user_desc_max_len = 10 environment_service_characs[0]uuidtype = AT_BLE_UUID_128 memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16) environment_service_characs[0]properties = AT_BLE_CHAR_READ | AT_BLE_CHAR_NOTIFY environment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature value environment_service_characs[0]value_permissions = (AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuid ampenvironment_service_handlerNULL0 environment_service_characs1)=AT_BLE_SUCCESS) printf(n Assignment 41 Failed to Initialize custom environment service) else printf(n Assignment 41 Initialize custom environment service)

      Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param) at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )param if (event_param-gtstatus == AT_BLE_SUCCESS) printf(n Assignment 41Notification Successfully sent over the air)

      ATBTLC1000Appendix B Software Solution - Custom Service

      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 49

      else printf(n Assignment 41Sending Notification over the air failed) return AT_BLE_SUCCESS

      static at_ble_status_t custom_char_changed_app_event(void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle -gt char_new_value[0])) timer_flag = false hw_timer_start(10) printf(n Assignment 41Characteristic changed event) return AT_BLE_SUCCESS

      static const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handler characteristic_changed = custom_char_changed_app_event

      Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

      void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

      Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

      Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

      static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

      Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void)

      ATBTLC1000Appendix B Software Solution - Custom Service

      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 50

      Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

      timer callback function static void timer_callback_fn(void) Add timer callback functionality here timer_flag = true

      void button_cb(void) Add button callback functionality here

      static uint8_t Temperature_value = 25

      Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++ if(Temperature_value gt 75) Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set( environment_service_characs[0]char_val_handle (uint8_t )ampTemperature_value sizeof(Temperature_value)) ble_status = at_ble_notification_send(0 environment_service_characs[0]char_val_handle) if(ble_status = AT_BLE_SUCCESS) printf(fail to send temperature update notification )

      int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

      Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

      DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register Gap ATBTLC1000 Callbacks register_btlc1000_callbacks()

      Custom service init custom_environment_service_init()

      ATBTLC1000Appendix B Software Solution - Custom Service

      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 51

      Register Gatt server callback register_gatt_server_callbacks()

      Start Advertising process start_advertisement() while(true) ble_event_task() if(connected_flag == true ampamp timer_flag == true) timer_flag = false send_temperature_notification()

      ATBTLC1000Appendix B Software Solution - Custom Service

      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 52

      8 Document Revision HistoryRev B - 42018

      Section Changes

      Document Revised contents to match various Bluetooth Low Energy standard versions

      Rev A - 122017

      Section Changes

      Document Initial release

      ATBTLC1000Document Revision History

      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 53

      The Microchip Web Site

      Microchip provides online support via our web site at httpwwwmicrochipcom This web site is used asa means to make files and information easily available to customers Accessible by using your favoriteInternet browser the web site contains the following information

      bull Product Support ndash Data sheets and errata application notes and sample programs designresources userrsquos guides and hardware support documents latest software releases and archivedsoftware

      bull General Technical Support ndash Frequently Asked Questions (FAQ) technical support requestsonline discussion groups Microchip consultant program member listing

      bull Business of Microchip ndash Product selector and ordering guides latest Microchip press releaseslisting of seminars and events listings of Microchip sales offices distributors and factoryrepresentatives

      Customer Change Notification Service

      Microchiprsquos customer notification service helps keep customers current on Microchip productsSubscribers will receive e-mail notification whenever there are changes updates revisions or erratarelated to a specified product family or development tool of interest

      To register access the Microchip web site at httpwwwmicrochipcom Under ldquoSupportrdquo click onldquoCustomer Change Notificationrdquo and follow the registration instructions

      Customer Support

      Users of Microchip products can receive assistance through several channels

      bull Distributor or Representativebull Local Sales Officebull Field Application Engineer (FAE)bull Technical Support

      Customers should contact their distributor representative or Field Application Engineer (FAE) for supportLocal sales offices are also available to help customers A listing of sales offices and locations is includedin the back of this document

      Technical support is available through the web site at httpwwwmicrochipcomsupport

      Microchip Devices Code Protection Feature

      Note the following details of the code protection feature on Microchip devices

      bull Microchip products meet the specification contained in their particular Microchip Data Sheetbull Microchip believes that its family of products is one of the most secure families of its kind on the

      market today when used in the intended manner and under normal conditionsbull There are dishonest and possibly illegal methods used to breach the code protection feature All of

      these methods to our knowledge require using the Microchip products in a manner outside theoperating specifications contained in Microchiprsquos Data Sheets Most likely the person doing so isengaged in theft of intellectual property

      bull Microchip is willing to work with the customer who is concerned about the integrity of their code

      ATBTLC1000

      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 54

      bull Neither Microchip nor any other semiconductor manufacturer can guarantee the security of theircode Code protection does not mean that we are guaranteeing the product as ldquounbreakablerdquo

      Code protection is constantly evolving We at Microchip are committed to continuously improving thecode protection features of our products Attempts to break Microchiprsquos code protection feature may be aviolation of the Digital Millennium Copyright Act If such acts allow unauthorized access to your softwareor other copyrighted work you may have a right to sue for relief under that Act

      Legal Notice

      Information contained in this publication regarding device applications and the like is provided only foryour convenience and may be superseded by updates It is your responsibility to ensure that yourapplication meets with your specifications MICROCHIP MAKES NO REPRESENTATIONS ORWARRANTIES OF ANY KIND WHETHER EXPRESS OR IMPLIED WRITTEN OR ORAL STATUTORYOR OTHERWISE RELATED TO THE INFORMATION INCLUDING BUT NOT LIMITED TO ITSCONDITION QUALITY PERFORMANCE MERCHANTABILITY OR FITNESS FOR PURPOSEMicrochip disclaims all liability arising from this information and its use Use of Microchip devices in lifesupport andor safety applications is entirely at the buyerrsquos risk and the buyer agrees to defendindemnify and hold harmless Microchip from any and all damages claims suits or expenses resultingfrom such use No licenses are conveyed implicitly or otherwise under any Microchip intellectualproperty rights unless otherwise stated

      Trademarks

      The Microchip name and logo the Microchip logo AnyRate AVR AVR logo AVR Freaks BeaconThingsBitCloud CryptoMemory CryptoRF dsPIC FlashFlex flexPWR Heldo JukeBlox KeeLoq KeeLoq logoKleer LANCheck LINK MD maXStylus maXTouch MediaLB megaAVR MOST MOST logo MPLABOptoLyzer PIC picoPower PICSTART PIC32 logo Prochip Designer QTouch RightTouch SAM-BASpyNIC SST SST Logo SuperFlash tinyAVR UNIO and XMEGA are registered trademarks ofMicrochip Technology Incorporated in the USA and other countries

      ClockWorks The Embedded Control Solutions Company EtherSynch Hyper Speed Control HyperLightLoad IntelliMOS mTouch Precision Edge and Quiet-Wire are registered trademarks of MicrochipTechnology Incorporated in the USA

      Adjacent Key Suppression AKS Analog-for-the-Digital Age Any Capacitor AnyIn AnyOut BodyComchipKIT chipKIT logo CodeGuard CryptoAuthentication CryptoCompanion CryptoControllerdsPICDEM dsPICDEMnet Dynamic Average Matching DAM ECAN EtherGREEN In-Circuit SerialProgramming ICSP Inter-Chip Connectivity JitterBlocker KleerNet KleerNet logo Mindi MiWimotorBench MPASM MPF MPLAB Certified logo MPLIB MPLINK MultiTRAK NetDetach OmniscientCode Generation PICDEM PICDEMnet PICkit PICtail PureSilicon QMatrix RightTouch logo REALICE Ripple Blocker SAM-ICE Serial Quad IO SMART-IS SQI SuperSwitcher SuperSwitcher II TotalEndurance TSHARC USBCheck VariSense ViewSpan WiperLock Wireless DNA and ZENA aretrademarks of Microchip Technology Incorporated in the USA and other countries

      SQTP is a service mark of Microchip Technology Incorporated in the USA

      Silicon Storage Technology is a registered trademark of Microchip Technology Inc in other countries

      GestIC is a registered trademark of Microchip Technology Germany II GmbH amp Co KG a subsidiary ofMicrochip Technology Inc in other countries

      All other trademarks mentioned herein are property of their respective companies

      ATBTLC1000

      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 55

      copy 2018 Microchip Technology Incorporated Printed in the USA All Rights Reserved

      ISBN 978-1-5224-2921-0

      Quality Management System Certified by DNV

      ISOTS 16949Microchip received ISOTS-169492009 certification for its worldwide headquarters design and waferfabrication facilities in Chandler and Tempe Arizona Gresham Oregon and design centers in Californiaand India The Companyrsquos quality system processes and procedures are for its PICreg MCUs and dsPICreg

      DSCs KEELOQreg code hopping devices Serial EEPROMs microperipherals nonvolatile memory andanalog products In addition Microchiprsquos quality system for the design and manufacture of developmentsystems is ISO 90012000 certified

      ATBTLC1000

      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 56

      AMERICAS ASIAPACIFIC ASIAPACIFIC EUROPECorporate Office2355 West Chandler BlvdChandler AZ 85224-6199Tel 480-792-7200Fax 480-792-7277Technical SupporthttpwwwmicrochipcomsupportWeb AddresswwwmicrochipcomAtlantaDuluth GATel 678-957-9614Fax 678-957-1455Austin TXTel 512-257-3370BostonWestborough MATel 774-760-0087Fax 774-760-0088ChicagoItasca ILTel 630-285-0071Fax 630-285-0075DallasAddison TXTel 972-818-7423Fax 972-818-2924DetroitNovi MITel 248-848-4000Houston TXTel 281-894-5983IndianapolisNoblesville INTel 317-773-8323Fax 317-773-5453Tel 317-536-2380Los AngelesMission Viejo CATel 949-462-9523Fax 949-462-9608Tel 951-273-7800Raleigh NCTel 919-844-7510New York NYTel 631-435-6000San Jose CATel 408-735-9110Tel 408-436-4270Canada - TorontoTel 905-695-1980Fax 905-695-2078

      Australia - SydneyTel 61-2-9868-6733China - BeijingTel 86-10-8569-7000China - ChengduTel 86-28-8665-5511China - ChongqingTel 86-23-8980-9588China - DongguanTel 86-769-8702-9880China - GuangzhouTel 86-20-8755-8029China - HangzhouTel 86-571-8792-8115China - Hong Kong SARTel 852-2943-5100China - NanjingTel 86-25-8473-2460China - QingdaoTel 86-532-8502-7355China - ShanghaiTel 86-21-3326-8000China - ShenyangTel 86-24-2334-2829China - ShenzhenTel 86-755-8864-2200China - SuzhouTel 86-186-6233-1526China - WuhanTel 86-27-5980-5300China - XianTel 86-29-8833-7252China - XiamenTel 86-592-2388138China - ZhuhaiTel 86-756-3210040

      India - BangaloreTel 91-80-3090-4444India - New DelhiTel 91-11-4160-8631India - PuneTel 91-20-4121-0141Japan - OsakaTel 81-6-6152-7160Japan - TokyoTel 81-3-6880- 3770Korea - DaeguTel 82-53-744-4301Korea - SeoulTel 82-2-554-7200Malaysia - Kuala LumpurTel 60-3-7651-7906Malaysia - PenangTel 60-4-227-8870Philippines - ManilaTel 63-2-634-9065SingaporeTel 65-6334-8870Taiwan - Hsin ChuTel 886-3-577-8366Taiwan - KaohsiungTel 886-7-213-7830Taiwan - TaipeiTel 886-2-2508-8600Thailand - BangkokTel 66-2-694-1351Vietnam - Ho Chi MinhTel 84-28-5448-2100

      Austria - WelsTel 43-7242-2244-39Fax 43-7242-2244-393Denmark - CopenhagenTel 45-4450-2828Fax 45-4485-2829Finland - EspooTel 358-9-4520-820France - ParisTel 33-1-69-53-63-20Fax 33-1-69-30-90-79Germany - GarchingTel 49-8931-9700Germany - HaanTel 49-2129-3766400Germany - HeilbronnTel 49-7131-67-3636Germany - KarlsruheTel 49-721-625370Germany - MunichTel 49-89-627-144-0Fax 49-89-627-144-44Germany - RosenheimTel 49-8031-354-560Israel - RarsquoananaTel 972-9-744-7705Italy - MilanTel 39-0331-742611Fax 39-0331-466781Italy - PadovaTel 39-049-7625286Netherlands - DrunenTel 31-416-690399Fax 31-416-690340Norway - TrondheimTel 47-7289-7561Poland - WarsawTel 48-22-3325737Romania - BucharestTel 40-21-407-87-50Spain - MadridTel 34-91-708-08-90Fax 34-91-708-08-91Sweden - GothenbergTel 46-31-704-60-40Sweden - StockholmTel 46-8-5090-4654UK - WokinghamTel 44-118-921-5800Fax 44-118-921-5820

      Worldwide Sales and Service

      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 57

      • Introduction
      • Table of Contents
      • 1 Getting Started
        • 11 Software Prerequisites
          • 111 Installation Steps of Atmel Studio 7
            • 12 Software Setup
              • 121 Installation of Microchip SmartConnect application on a Mobile device
                • 13 ATBTLC1000 Embedded Firmware
                • 14 ATBTLC1000 Host Software API
                • 15 Hardware Prerequisites
                  • 151 SMARTtrade SAM L21 Xplained Pro
                  • 152 ATBTLC1000ZR Xplained Pro Extension board
                    • 16 Hardware Setup
                      • 2 Creating the Project and Initializing
                        • 21 Creating Project from ASF
                        • 22 Configuring ASF for ATBTLC1000-ZR
                        • 23 Compiling and Testing the Project
                          • 3 Establishing Connection with Central Device
                            • 31 Configuring and Starting the Advertisement Process
                              • 311 Flags (AD Type 0x00)
                              • 312 Available Service UUID (AD Types 0x02 to 0x07)
                              • 313 Device Name (AD Types 0x08 to 0x09)
                                • 3131 Setting the Advertisement Payload (ble_advertisement_data_set)
                                • 3132 Starting the Advertisement Process (at_ble_adv_start)
                                  • 314 Advertisement Process
                                    • 3141 Starting the Advertisement Process
                                        • 32 Managing GAP events
                                          • 321 Handling of Connected and Disconnected GAP Events
                                              • 4 SettingHandling of Pre-Defined Service
                                                • 41 Adding Device Info Service Component from ASF Wizard to Project
                                                • 42 Configuring and Loading Device Information Service
                                                  • 421 Procedure to Configure and Load Device Info Service
                                                      • 5 Setting up and Handling Custom Service
                                                        • 51 Configuring and Loading the Custom Environment Service
                                                          • 511 Procedure to Configure and Load Custom Environment Service
                                                            • 52 Updating the Temperature Characteristic
                                                              • 521 Setting a Characteristic Value ( at_ble_characteristic_value_set)
                                                              • 522 Sending a Notification (at_ble_notification_send)
                                                              • 523 Sending Temperature Information Once in Every 10 Seconds to Central
                                                                  • 6 Appendix A Software Solution - Pre-Defined Svc
                                                                  • 7 Appendix B Software Solution - Custom Service
                                                                  • 8 Document Revision History
                                                                  • The Microchip Web Site
                                                                  • Customer Change Notification Service
                                                                  • Customer Support
                                                                  • Microchip Devices Code Protection Feature
                                                                  • Legal Notice
                                                                  • Trademarks
                                                                  • Quality Management System Certified by DNV
                                                                  • Worldwide Sales and Service

        1 Getting StartedThis chapter describes the basic software and hardware requirements and setup

        11 Software Prerequisites

        111 Installation Steps of Atmel Studio 71 Download and install the Atmel Studio software2 Install the Advanced Software Framework (ASF) package

        Note  The software for ATBTLC1000-ZR is supported with ASF 3351 and above

        Note  For more information on the previous releases refer to the Atmel Studio Release Notes availableon the Microchip web page

        12 Software Setup

        121 Installation of Microchip SmartConnect application on a Mobile device1 Open the Apple Storereg (iPhoneiOS) or Google Playtrade Store (Android) on the mobile device2 Search for ldquoMicrochip SmartConnectrdquo3 Click Install to install application on the device The Microchip SmartConnect application is now

        installed on the mobile deviceFigure 1-1 Microchip SmartConnect Dashboard

        ATBTLC1000Getting Started

        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 4

        13 ATBTLC1000 Embedded FirmwareThe management of Bluetooth Low Energy communication is based on the network stack stored inATBTLC1000 ROM This stack requires parameters such as GAP parameters and attributes to befunctional which are pushed from Host controller into ATBTLC1000 internal SRAM using GenericTransport Layer (GTL)

        The ROM coded firmware embeds the layers of Bluetooth Low Energy stack that runs on top of theinternal hardcoded peripheral drivers and RTOS scheduler

        bull Generic Access Profile (GAP)GAP controls the Bluetooth Low Energy connection advertising makes the device visible to theoutside world and determines how two devices interact with each other GAP defines two mainroles for the Bluetooth Low Energy device Central and Peripheral

        bull Generic Attribute Profile (GATT) and Attribute Protocol (ATT)GATT defines how the Bluetooth Low Energy device transfers the data The GATT process isbased on services and characteristics stored in Attribute Protocol (ATT) ATT is a simple lookuptable stored in device SRAM

        bull Security Manager (SM)The Security Manager defines the procedure for pairing authentication and encryption betweenBLE devices This layer is mainly used if security is requested on that particular connection

        bull Logical Link Control and Adaptation Protocol (L2CAP)L2CAP supports high-level protocol multiplexing packet segmentationreassembly and conveyingthe quality of service information L2CAP permits applications to transmit and receive the datapackets with channel flow control and retransmission

        bull Direct test mode (DTM)DTM allows testing of the radios Physical Layer (PHY) by transmitting and receiving the test packetsequences This is often used in compliance and production line testing without the need of goingthrough the complete Bluetooth Low Energy Protocol Stack

        14 ATBTLC1000 Host Software APIThe ATBTLC1000 is provided with a dedicated Host software API layer The purpose of this API layer isto provide an easy and reliable solution to add Bluetooth Low Energy capabilities to any user applicationThe API provides a set of high level Bluetooth function with abstraction of the transport protocol usedbetween the host MCU and the ATBTLC1000

        ATBTLC1000Getting Started

        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 5

        Figure 1-2 Host Software API

        Figure 1-3 BluSDK File Architecture

        The API operation relies on a request-response mechanism The specific requests are sent toATBTLC1000 through dedicated API function call The event messages are then returned by theATBTLC1000 on request processing or on specific Bluetooth Low Energy events These event messagesare to be handled by the host device according to the user application requirements The following figureillustrates a typical Bluetooth Low Energy peripheral application flowchart

        ATBTLC1000Getting Started

        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 6

        Figure 1-4 Bluetooth Low Energy Peripheral Application Flowchart

        WARNING The user application must be non-blocking to ensure that the Bluetooth Low Energy events arehandled in time

        15 Hardware PrerequisitesThis document uses the ATBTLC1000ZR-XSTK kit The ATBTLC1000ZR-XSTK kit is comprised of theSAM L21 Xplained Pro (XPRO) and ATBTLC1000ZR XPRO extension board The following sectionsprovide an overview of these kits and their features

        151 SMARTtrade SAM L21 Xplained ProThe SMARTtrade SAM L21 Xplained Pro evaluation kit is used to evaluate the ATSAML21J18Bmicrocontroller This kit includes an on-board embedded debugger to program and debugATSAML21J18B The kit also contains an on-board current measurement circuitry which enables theuser to measure current profile over time without any external tools The connection with any XplainedPro modules or external component is possible through available external connectors which makes theboard perfect for prototyping the low-power applications

        ATBTLC1000Getting Started

        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 7

        Figure 1-5 SAM L21 Xplained Pro Module

        152 ATBTLC1000ZR Xplained Pro Extension boardThe ATBTLC1000ZR Xplained Pro extension evaluation kit is Bluetooth Low Energy SoC ATBTLC1000-ZR110CA module This extension is plugged to any of the supported host MCU Xplained Pro evaluationboards to quickly add Bluetooth Low Energy connectivity to the platform This kit provides easy access tothe features of the ATBTLC1000-ZR110CA Bluetooth Low Energy module and illustrates how to integratethe device in a custom design which is supported by the Atmel Studio integrated development platform

        ATBTLC1000Getting Started

        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 8

        Figure 1-6 ATBTLC1000ZR Xpro Board

        The ATBTLC1000ZR Xplained Pro extension board contains

        bull ATBLTC1000-ZR110CA Module ndash Bluetooth Low Energy module with 24 GHz Bluetooth LowEnergy ATBTLC1000-XR1100A SiP

        bull AT30TSE758A Digital Temperature Sensor ndash Integrated temperature sensor with nonvolatileregisters and serial EEPROM Compatible with two-wire (I2C) and SMBus serial interfaces

        bull Current Measurement Header ndash Allows measurement of the current consumption of the board Itmust be closed to enable power to the ATBTLC1000-ZR110CA module

        16 Hardware Setup1 Ensure that ATBTLC1000ZR-XPRO power consumption header is closed and that jumpers are

        placed on pins 2 to 3 of headers J105 J106 J107 and J108 as shown in the following figure

        ATBTLC1000Getting Started

        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 9

        Figure 1-7 ATBTLC1000ZR-XPRO Extension

        2 Connect the ATBTLC1000ZR-XPRO extension to EXT1 of SAM L21 XPRO as illustrated in thefollowing figureFigure 1-8 ATBTLC1000ZR-XPRO Extension connected with SAM L21 XPRO

        3 Connect the board to PC using the ldquoDebug USB ConnectorrdquoFigure 1-9 SAM L21 XPRO Connection to PC

        ATBTLC1000Getting Started

        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 10

        4 Now the Hardware is ready for development

        ATBTLC1000Getting Started

        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 11

        2 Creating the Project and InitializingThis chapter provides the process of creating an application startup project using Atmel Studio Prior tocreating a project the user must know hardware architecture and software requirements to configuredrivers

        The hardware connection between the SAM L21 XPRO and the ATBTLC1000ZR XPRO board isillustrated in following figure This SAM L21 board is used as host MCUFigure 2-1 ATBTLC1000ZR Xpro Board Connection with SAM L21

        Note  For more details refer to module datasheet and XPRO board design documentation

        21 Creating Project from ASFAdvanced Software Framework has a pre-configured Bluetooth Low Energy Startup template project thatincludes Bluetooth Low Energy software API for Host and ATBTLC1000 and their peripheral driverdependencies This is used as starting project for any Bluetooth Low Energy project development

        To create the project follow the steps below

        1 Search for the ldquoBLE-Startup Templaterdquo from the File gt New gt Example Project menu in AtmelStudio

        ATBTLC1000Creating the Project and Initializing

        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 12

        Figure 2-2 Advanced Software Framework_New Example Project

        Note  ATBTLC1000SAMB11 related projects are prefixed with ldquoBLErdquo making it easier to filter theproject in the dialogue box

        2 Select the appropriate ldquoBLE-Startup Templaterdquo project corresponding to the intended Host MCUXplained Pro board and then press OK button to import the BLE startup template project SelectldquoBLE-Startup Template ndash SAM L21 Xplained Pro SAML21J18Brdquo for this hands-onNote  Rev B XPRO boards can be identified by SAML21J18B silk screen marking below SAML21MCU

        3 The BLE startup project is now created and loaded in Atmel StudioFigure 2-3 Startup_Template Project

        ATBTLC1000Creating the Project and Initializing

        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 13

        Note  The main project routine of ldquoStartup Template projectrdquo already includes host MCU low levelinitialization BLE and ATBTLC1000 initialization The added ASF components in project can beviewed from ldquoASFgtASF Wizardrdquo Select the created project from Project drop down box

        Figure 2-4 ASF Wizard Window

        ndash BLE_STACK Platform Interface ndash Core manager of Bluetooth Low Energy Host API Itmanages ATBTLC1000 device initialization GAP and GATT events

        ndash Timer Driver ndash Task timer functionality by using a Timer Counter (TC) or Timer Counter forControl (TCC) peripheral

        ndash Console UART ndash Universal Asynchronous ReceiverTransmitter (UART) communication insynchronousblocking mode

        ndash Generic Board Support ndash Host MCU Board specific initializationndash System Drivers ndash Select MCUrsquos System peripheral drivers These drivers are included by

        default in ASF projects and manage the clocks and oscillator of the system4 The main routine contains the MCU low level initialization and ATBTLC1000 initialization The

        following figure illustrates the flowchart of the main routine

        ATBTLC1000Creating the Project and Initializing

        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 14

        Figure 2-5 Main Routine Flowchart

        22 Configuring ASF for ATBTLC1000-ZR1 The default ldquoStartup Template Projectrdquo is configured for ATBTLC1000-MR module with 6-Wire

        mode2 Navigate to Project properties Project gt Project properties gt Toolchain gt ARMGNU C Compiler gt

        Symbols3 The ATBTLC1000ZR-XSTK kit uses the ATBTLC1000-ZR110CA module Change symbol

        BLE_MODULE to BTLC1000_ZR and enable UART_FLOWCONTROL_4WIRE_MODE forATBTLC1000-ZR module as shown in the figure belowFigure 2-6 Startup Template Project Window

        Note  This configuration change is not required for ATBTLC1000-MR module

        ATBTLC1000Creating the Project and Initializing

        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 15

        23 Compiling and Testing the Project

        1 Click the ldquo rdquo button ltF7gt to compile the project2 Verify that no build error appears in Atmel Studio output window

        Figure 2-7 Atmel Studio Output Window

        3 Connect the SAM L21 XPRO to PC (if not already done)4 To access the project properties go to Project gt

        STARTUP_TEMPLATE_SAML21_XPLAINED_PRO_B1 PropertiesFigure 2-8 Compiling the Project

        5 In project properties click the Tool tab and select the EDBG of SAM L21 Xplained Pro board asdebuggerprogrammerFigure 2-9 Selection of DebuggerProgrammer

        6 Open any Terminal application (for example TeraTerm) Select the COM port enumerated on thePC and set the following parameters

        ndash EDBG associated COM Port (Check Windows Device Manager)

        ATBTLC1000Creating the Project and Initializing

        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 16

        ndash Baudrate 115200ndash Parity Nonendash One Stop bitndash Enable Hardware Flow Control

        7 Click to save the project ltCtrl+Sgt

        8 Click rdquo to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt9 The initialization of the ATBTLC1000ZR module must return the Bluetooth Device Address and

        Address typeFigure 2-10 Console Log Window

        Note 1 If initialization fails make sure to verify the hardware configuration is aligned with the

        description refer to 16 Hardware Setup2 The initialization of ATBTLC1000 takes few seconds due to patch download process

        ATBTLC1000Creating the Project and Initializing

        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 17

        3 Establishing Connection with Central DeviceThe Bluetooth Low Energy connectivity is added to the application that is used to connect with theBluetooth Low Energy central The first step is about the management of Bluetooth connection with acentral device When using ATBTLC1000 device this process is managed by dedicated API function callsassociated with ATBTLC1000 events handling

        The interaction between Host MCU ATBTLC1000 and Bluetooth Low Energy central during connectionestablishment is as follows

        Figure 3-1 Establishing Connection with Central Device

        On host MCU side the management of the Bluetooth connection is performed through three main steps1 GAP callback registration2 Advertisement configuration3 ATBTLC1000 event handling

        In the existing project main routine the integration of these steps are highlighted in red in the followingflowchart

        ATBTLC1000Establishing Connection with Central Device

        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 18

        Figure 3-2 Main Routine Flow Chart

        31 Configuring and Starting the Advertisement ProcessThe Bluetooth Low Energy devices transmit advertisement packets to show their presence to nearbydevices The advertisement packet is sent periodically at a time interval defined by variableldquoadvintervalrdquo defined in Bluetooth SIG specification To avoid any collision with other wireless networksuch as Wi-Fireg a channel change is performed for each advertisement packet sent (data frequencyhopping) as illustrated in the following figureFigure 3-3 Advertisement Process

        During advertisement the payload structure to be sent differs from application to application and is set byusing encapsulated packet data unit type information (PDU_TYPE)

        ATBTLC1000Establishing Connection with Central Device

        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 19

        Figure 3-4 PDU Advertising

        The following table lists the different PDU types used according to device role

        Advertising event types (PDU_TYPE) Broadcaster Observer Peripheral Central

        Connectible undirected event (ADV_IND) Excluded Excluded Mandatory Excluded

        Connectible directed event(ADV_DIRECT_IND) Excluded Excluded Optional Excluded

        Non-connectible undirected event(ADV_NONCONN_IND) Mandatory Excluded Optional Excluded

        Scannable undirected event (ADV_SCAN_IND) Optional Excluded Optional Excluded

        As our device acts as a Bluetooth Low Energy peripheral the connectable undirected event (ADV_IND)advertising type is used See the following description about the ADV_IND advertisement packetFigure 3-5 ADV_IND Advertisement Packet

        The ADV_IND payload contains different Advertisement Data types (AD0 - ADn) which provide specificinformation to the central device such as device short name Tx power level and list of availableservices UUIDs The number of advertisement data types that can be added to the advertisementpayload are limited by the advertisement payload size of 31 octets

        Following is a list of advertisement data types that are commonly found in ADV_IND payload

        ATBTLC1000Establishing Connection with Central Device

        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 20

        311 Flags (AD Type 0x00)The flags describe the basic device capability such as BLE support BLE discoverable mode BREDRsupport and simultaneous BRED

        312 Available Service UUID (AD Types 0x02 to 0x07)The Bluetooth Low Energy advertisement payloads are limited to 31 bytes Therefore only two 128-bitUUID values can be added to the payload For this purpose the specific AD types describe the length ofthe advertised UUID and provide information as to whether the payload contains a incompletecompletelist of UUID supported by the GATT server

        bull 0x02 - Incomplete list of 16-bit UUIDs (adopted GATT services)bull 0x03 - Complete list of 16-bit UUIDs (adopted GATT services)bull 0x06 - Incomplete list of 128-bit UUIDs (custom GATT services)bull 0x07 - Complete list of 128-bit UUIDs (custom GATT services)

        Note  When a 16-bit UUID is transmitted only the unique 2-byte value is sent The client knows that it isrequired to be injected into the base UUID For example the Health Thermometer Service is assigned as0x1809 so its equivalent UUID is 00001809-0000-1000-8000-00805F9B34FB

        313 Device Name (AD Types 0x08 to 0x09)This AD type field is used to advertise the Local name of device in the network The Local name datatype value indicates if the name is complete or shortened If the name is shortened the complete namecan be read after the connection is established

        bull 0x08 - Shortened Local Namebull 0x09 - Complete Local Name

        Note 1 A shortened name contains only continuous characters from the beginning of the full name For

        example if the device name is BT_Device_Name then the shortened name can beBT_Device or BT_Dev

        2 Complete data type list are available at httpswwwbluetoothcomspecificationsassigned-numbersgeneric-access-profile

        For management of advertisement process and cover the different configurations specified by SIG theATBTLC1000 Host driver provides the two functions elaborated in the following sections

        In the application use these two functions to setup the following ADV_IN type payloadFigure 3-6 ADV_IN Type Payload Process

        ATBTLC1000Establishing Connection with Central Device

        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 21

        3131 Setting the Advertisement Payload (ble_advertisement_data_set)Prototype ndashat_ble_status_t at_ble_adv_data_set (uint8_t const const adv_datauint8_t adv_data_lenuint8_t const const scan_resp_datauint8_t scan_response_data_len)

        Description ndash Set clear or update the advertisement and scan response data

        Parameters ndash

        bull adv_data ndash Raw data to be placed in advertisement packetbull adv_data_len ndash Data length for adv_data Max size 28 bytes (3 bytes are reserved to set

        advertising AD type flags based on the selected Advertising mode and the user is not required toconfigure AD type flags in the advertisement payload)

        bull scan_resp_data ndash Raw data to be placed in the scan response packet If NULL no changes aremade to the current scan response packet data

        bull scan_response_data_len ndash Data length for scan_resp_data Max size 31 bytes

        Return ndash Execution Status

        This function requires a parameter raw adv_data to be sent to central Following is an example of itsdefinition

        static uint8_t adv_data[] = 0x11 AD1 length = 170x03 AD1 Type = Complete list of 128-bit UUIDs0x1b0xc50xd50xa50x020x000xa60x87 AD1 = UUID MSBs0xe50x110x360x390xc00xba0x5a0xf00x0A AD2 Length = 100x09 AD2 Type = Complete local NamelsquoMrsquorsquoyrsquorsquo_rsquorsquoDrsquorsquoErsquorsquoVrsquo AD2 = ldquoMy_DEVrdquo

        3132 Starting the Advertisement Process (at_ble_adv_start)Prototype ndashat_ble_status_t at_ble_adv_start (at_ble_adv_type_t typeat_ble_adv_mode_t modeat_ble_addr_t peer_addrat_ble_filter_type_t filtereduint16_t intervaluint16_t timeoutbool disable_randomness)

        Description ndash Start advertisement process

        Parameters ndash

        bull type ndash Advertising type to be used can bendash AT_BLE_ADV_TYPE_UNDIRECTEDndash AT_BLE_ADV_TYPE_DIRECTEDndash AT_BLE_ADV_TYPE_SCANNABLE_UNDIRECTEDndash AT_BLE_ADV_TYPE_NONCONN_UNDIRECTEDndash AT_BLE_ADV_TYPE_DIRECTED_LDCndash AT_BLE_ADV_TYPE_SCAN_RESPONSE

        bull mode ndash Advertising mode to be used can be

        ATBTLC1000Establishing Connection with Central Device

        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 22

        ndash AT_BLE_ADV_NON_DISCOVERABLEndash AT_BLE_ADV_GEN_DISCOVERABLEndash AT_BLE_ADV_LIM_DISCOVERABLEndash AT_BLE_ADV_BROADCASTER_MODE

        bull peer_addr ndash Specify peer address when advertising type is AT_BLE_ADV_TYPE_DIRECTEDbull filtered ndash

        ndash AT_BLE_ADV_FP_ANY ndash Allow scan and connection requests from anyonendash AT_BLE_ADV_FP_FILTER_SCANREQ ndash Allow scan request from White List devices onlyndash AT_BLE_ADV_FP_FILTER_CONNREQ ndash Allow connection request from White List devices

        onlyndash AT_BLE_ADV_FP_FILTER_BOTH ndash Allow scan and connection requests from White List

        devices onlybull interval ndash Advertisement interval (in 0625 ms units)bull timeout ndash Advertising timeout between 0x0001 and 0x028F in scale of seconds This parameter

        must be set to 0 if type equals AT_BLE_ADV_TYPE_DIRECTEDbull disable_randomness ndash When disabled advertisements are performed at the exact interval

        without adding random 10 ms tempo

        Return ndash Execution Status

        314 Advertisement ProcessIn this assignment the advertisement process is performed in the following configuration

        bull Undirected (Type AT_BLE_ADV_TYPE_UNDIRECTED)bull Discoverable (Mode AT_BLE_ADV_GEN_DISCOVERABLE)bull No peer Address (peer_addr = NULL)bull No filtering (filtered = AT_BLE_ADV_FP_ANY)bull Advertisement interval 1s (interval = 1600)bull Maximum timeout (timeout 655)bull Randomness enabled (disable_randomness = FALSE)

        3141 Starting the Advertisement Process1 Open startup_templatec file2 Declare the following ble_status global variable in startup_templatec as volatile

        include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehvolatile at_ble_status_t ble_status

        3 Declare the following adv_data global variable in startup_templatec as staticstatic uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD)0x09 AD2 Type = Complete local Name

        ATBTLC1000Establishing Connection with Central Device

        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 23

        My_SENS AD2 = ldquoMy_SENSrdquo

        Note 1 The name of the device is to be changed (AD2 field)2 According to the new name AD2 length must be adapted to new AD2 content

        4 Add the following start_advertisement function in startup_templatec prototype for thefunction void start_advertisement (void) also this can be added to avoid warningsvoid start_advertisement (void)printf(n Assignment 21 Start Advertisement)Set advertisement datable_status = at_ble_adv_data_set(adv_datasizeof(adv_data)NULL0)Start Advertisementble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550)if(ble_status = AT_BLE_SUCCESS)printf(n Failed to start advertisement)

        5 Start the advertisement process by adding the following highlighted code to the application mainroutineint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Start Advertising process start_advertisement() Register PrimaryIncluded service in case of GATT Server while(true) Write application task

        6 Click to save the project ltCtrl+Sgt

        7 Click button to compile the project ltF7gt8 Verify that no build error appears in Atmel Studio output window

        Figure 3-7 Atmel Studio Output Window

        ATBTLC1000Establishing Connection with Central Device

        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 24

        9 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt10 Open Microchip SmartConnect Application on Android or iOS device and tap START SCAN button

        Note  The device must appear in Microchip SmartConnect Application

        Figure 3-8 Microchip SmartConnect Application

        11 Terminal must display the following Log outputFigure 3-9 Log Output Window

        32 Managing GAP eventsThe management of the Bluetooth connection at the host MCU level is done through reception andhandling of events reported by the ATBTLC1000 These events are generated by ATBTLC1000 GAPGATT and L2CAP layers to notify the host about the ongoing Bluetooth interaction with other devices inits vicinity

        ATBTLC1000Establishing Connection with Central Device

        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 25

        To manage events coming from the ATBTLC1000 module the host driver must provide able_mgr_events_callback_handler function that allows registration of application callback functionto be executed on each event reported by the ATBTLC1000 module

        Prototype ndashbool ble_mgr_events_callback_handler(ble_mgr_event_cb_t event_cb_typeble_mgr_event_t event_typeconst voidble_event_handler)

        Description ndash Used by ProfileServiceApplication to register the Bluetooth Low Energy eventsrsquocallbacks

        Parameters ndash

        event_cb_type ndash types of actions to perform on callbacks can be either

        REGISTER_CALL_BACK or

        UNREGISTER_CALL_BACKevent_type ndash Any one of the event types can be used

        BLE_GAP_EVENT_TYPEBLE_GATT_CLIENT_EVENT_TYPEBLE_GATT_SERVER_EVENT_TYPEBLE_L2CAP_EVENT_TYPEBLE_GATT_HTPT_EVENT_TYPEBLE_DTM_EVENT_TYPEBLE_CUSTOM_EVENT_TYPEble_event_handler ndash pointer to handler list

        Structure ble_gap_event_cb_t defines the GAP callbacks Similarly structuresble_gatt_client_event_cb_t and ble_gatt_server_event_cb_t define the callbacks of GATTevents

        typedef struct ble_gap_event_cb BLE Undefined events received from ATBTLC1000 which is not handled in Libraryble_event_callback_t undefined BLE scan information contains the peer device scan information Refer ref at_ble_scan_info_tble_event_callback_t scan_info Once the BLE scan timeout or scan stop triggers the scan report event Refer ref at_ble_scan_report_tble_event_callback_t scan_report Advertisement complete event Refer ref at_ble_adv_cmp_evt_tble_event_callback_t advt_cmp Advertisement report in case of advertisement stopped due to advertisement timeout Refer ref at_ble_adv_report_tble_event_callback_t adv_report BLE device own random address changed event Refer ref at_ble_rand_addr_changed_tble_event_callback_t rand_addr_changed BLE connected event device connected to peer device Refer ref at_ble_connected_tble_event_callback_t connected BLE disconnected event device disconnected from peer device Refer ref at_ble_disconnected_tble_event_callback_t disconnected Connection parameter update done on peer device and own device Refer ref at_ble_conn_param_update_done_t

        ATBTLC1000Establishing Connection with Central Device

        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 26

        ble_event_callback_t conn_parameter_update_done Connection parameter update request from peer device Refer ref at_ble_conn_param_update_request_tble_event_callback_t conn_param_update_request Pair complete event as part of end of pairing process Refer ref at_ble_pair_done_tble_event_callback_t pair_done Pair request event from Central device Refer ref at_ble_pair_request_tble_event_callback_t pair_request Slave security request received from peer Peripheral device Refer ref at_ble_slave_sec_request_tble_event_callback_t slave_sec_request Pair Key request event from Peer central device Refer ref at_ble_pair_key_request_tble_event_callback_t pair_key_request encryption request comes from the peer device Needs to supply the bonding information which is stored earlier ref at_ble_encryption_request_tble_event_callback_t encryption_request encryption status changed event received from SMP once the encryption is started ref at_ble_encryption_status_changed_tble_event_callback_t encryption_status_changed Event triggered once the Resolve random address is resolved using supplied IRKs ref at_ble_resolv_rand_addr_status_tble_event_callback_t resolv_rand_addr_status Event is triggered once the connection signature information indication received ref at_ble_sign_counter_tble_event_callback_t sign_counters_ind Peer attribute information indication received Event ref at_ble_peer_att_info_ind_tble_event_callback_t peer_att_info_ind Peer device channel map received indication ref at_ble_channel_map_tble_event_callback_t con_channel_map_indble_gap_event_cb_t

        Note  Callback definition is application-specific If the application layer requires a specific event callbackthen the specific member of the structure is to be assigned with the address of the callback function

        In this assignment two callback functions on Connected and Disconnected GAP events are usedThis allows the application to restart the advertising process on Disconnect manage connectioninformation and startstop of sensor data update

        321 Handling of Connected and Disconnected GAP Events1 Open the startup_templatec file2 Define the following software flags as global variables in startup_templatec file volatile

        bool timer_flag = false and volatile bool connected_flag = false3 Declare and implement the following ble_connected_cb function in the

        startup_templatec file Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param)printf(n Assignment 22 Application connected )connected_flag = trueALL_UNUSED(param)return AT_BLE_SUCCESS

        4 Declare and implement the following ble_disconnected_cb function instartup_templatec file Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param)printf(n Assignment 22 Application disconnected )connected_flag = falsestart_advertisement()ALL_UNUSED(param)return AT_BLE_SUCCESS

        ATBTLC1000Establishing Connection with Central Device

        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 27

        5 Declare the following static GAP callback structure in ldquostartup_templatecrdquo filestatic const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTEDdisconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

        6 Add the following register_btlc1000_callbacks function in startup_templatec Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void) Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks)ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACKBLE_GAP_EVENT_TYPEampapp_gap_handle)if (ble_status = true)printf(nError when Registering ATBTLC1000 callbacks)

        7 Add the register_btlc1000_callbacks function call prior to start advertisement in theapplication main routineint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Gap Callbacks register_btlc1000_callbacks ( ) Start Advertising process start_advertisement() Register PrimaryIncluded service in case of GATT Server while(true) Write application task

        8 Add the ble_event_task function call in the project main loop to handle the different incomingevents from ATBTLC1000while(true)ble_event_task()

        9 Press button ltF7gt to compile the project and verify that no build error appear in the AtmelStudio output window

        ATBTLC1000Establishing Connection with Central Device

        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 28

        Figure 3-10 Atmel Studio Output Window

        10 Click ldquo rdquo to save the project ltCtrl+Sgt

        11 Click ldquo rdquo to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt and checkcorrect initialization of the ATBTLC1000

        12 Open the Microchip SmartConnect application on Androidtrade or iOS device13 Press the ltStart Scangt button and pair peripherals by selecting them in the device list (pass key

        123456)Note 

        1 Pairing event handling is carried out by ble_managerc Refer toble_pair_key_request_handler() for code implementation The default pass key of123456 is also fixed inside this function This can be changed here

        Figure 3-11 Console Log Window

        Note  After peripheral pairing no services information are displayed in Microchip SmartConnectapplication as no service is currently defined and started on peripheral side

        ATBTLC1000Establishing Connection with Central Device

        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 29

        4 SettingHandling of Pre-Defined ServiceThe management of services are done in the GATT layer of the ATBTLC1000 ROM coded Bluetooth LowEnergy Stack The GATT transactions are based on high-level nested objects called Profiles Servicesand Characteristics stored in SRAM memory of ATBTLC1000 device This assignment adds the pre-defined service of information service from ASF library

        Figure 4-1 ATBTLC1000 GATT Layers

        bull ProfilesProfiles are not available in the Bluetooth Low Energy peripheral they are simply a pre-definedcollection of services that have been compiled by either the Bluetooth SIG (adopted GATT basedprofile) or by the application developer (custom profiles) For example the Heart Rate Profilecombines the Heart Rate Service and the Device Information Service

        Note  The complete list of officially adopted GATT-based profiles is available on the BluetoothDeveloper Portal

        bull ServicesA service is a collection of data and associated behaviors which accomplish a particular function orfeature of a device or portions of a device A service may reference other primary or secondaryservices andor a set of characteristics that make up the service Each service distinguishes itselffrom other services by means of a unique numeric ID called as UUID which can be either 16-bit(for officially adopted Bluetooth Low Energy Services) or 128-bit (for custom services)

        Note  A full list of officially adopted services and their UUID are seen on the Bluetooth DeveloperPortal

        bull CharacteristicsA characteristic is the lowest level concept in GATT transactions It contains a single data point withdifferent attributes such as notify read or write capabilities Similar to Services each characteristiccan be distinguished by a SIG-defined adopted UUID (16-bit) or custom (128-bit) UUID This UUIDensures interoperability across Bluetooth Low Energy devices The characteristics are important tointeract with in a Bluetooth Low Energy network In addition to standard UUID the custom UUID isused in case of specific application When characteristics with custom UUID are used in a devicethen it will be interoperable only with those devices that support these characteristics with customUUID

        ATBTLC1000SettingHandling of Pre-Defined Service

        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 30

        In this assignment the following steps are added to the Host MCU application to set up and handle adevice information service within the ATBTLC1000 module The following steps are added to the startupproject

        bull Adding device info service component from ASFbull Configuring and loading the service

        Figure 4-2 Device Information Service

        41 Adding Device Info Service Component from ASF Wizard to ProjectTo use the ldquoofficially adopted GATT-based profilesrdquo from SIG ASF provides Bluetooth Low Energy servicecomponents including init functions that pre-define services in Host memory

        Note  Before starting this assignment be sure to follow the steps mentioned in 2 Creating the Projectand Initializing and 3 Establishing Connection with Central Device

        1 Click ASF gt ASF Wizard2 Search for ldquoBLE-Device Information Servicesrdquo and then click Add

        ATBTLC1000SettingHandling of Pre-Defined Service

        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 31

        Figure 4-3 Available Modules

        3 Now ldquoBLE-Device Information Servicesrdquo (component) appears in ldquoSelected ModulesrdquoFigure 4-4 Selected Modules

        4 Click Apply to add the component to the projectFigure 4-5 Adding the Modules to Project

        5 The ldquoDevice Information Servicerdquo component is added to the project and is confirmed bydevice_information folder added in Solution Explorer

        ATBTLC1000SettingHandling of Pre-Defined Service

        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 32

        Figure 4-6 Device Information Service Added to Project

        42 Configuring and Loading Device Information ServiceThe ATBTLC1000 Host driver provides a set of GATT functions that allows storing and updating theservices in ATBTLC1000 memories

        Prototype at_ble_status_t at_ble_primary_service_define(at_ble_uuid_t uuidat_ble_handle_t service_handleat_ble_included_service_t included_service_listuint16_t included_service_countat_ble_characteristic_t charactristic_listuint16_t charactristic_count)

        Description Defines a new primary service along with its included services and characteristics inATBTLC1000

        Parameters

        bull Uuid [In] ndash primary service UUIDbull service_handle [Out] ndash Service handle is returned herebull included_service_list [In] ndash an array of included service referencesbull included_service_count [In] ndash number of elements in included_service_listbull charactristic_list [InOut] ndash an array of characteristics included in the service this array

        is updated with respective characteristics handlesbull charactristic_count[In] ndash number of elements in charactristic_list

        Return Execution Status

        This function requires an argument as GATT description structure of the service that is implemented Thepreviously added Device Info service component provides Bluetooth Low Energy service middlewareincluding the init functions that predefine the services See below ldquodis_init_servicerdquo from device infoBLE service (device_infohc)

        Prototype ndash void dis_init_service(dis_gatt_service_handler_t device_info_serv)Description ndash Initialize the device information service handler in the host MCU memory

        Parameters ndash

        ATBTLC1000SettingHandling of Pre-Defined Service

        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 33

        bull device_info_serv [Inout] pointer to device info GATT description handler to beupdated

        Return None

        Here is a picture of GATT device info service descriptor definition in Host memory

        device_info_serv-gtserv_handle = 0device_info_serv-gtserv_uuidtype = AT_BLE_UUID_16device_info_serv-gtserv_uuiduuid[0] = (uint8_t) DIS_SERVICE_UUIDdevice_info_serv-gtserv_uuiduuid[1] = (uint8_t) (DIS_SERVICE_UUID gtgt 8)Characteristic Info for Manufacturer Name Stringdevice_info_serv-gtserv_chars[0]char_val_handle = 0 handle stored here device_info_serv-gtserv_chars[0]uuidtype = AT_BLE_UUID_16device_info_serv-gtserv_chars[0]uuiduuid[0] = (uint8_t) IS_CHAR_MANUFACTURER_NAME_UUID UUID Manufacturer Name String device_info_serv-gtserv_chars[0]uuiduuid[1] = (uint8_t) (DIS_CHAR_MANUFACTURER_NAME_UUID gtgt 8) UUID Manufacturer Name String device_info_serv-gtserv_chars[0]properties = AT_BLE_CHAR_READ Properties memcpy(char_valuemanufacturer_nameDEFAULT_MANUFACTURER_NAMEDIS_CHAR_MANUFACTURER_NAME_INIT_LEN)device_info_serv-gtserv_chars[0]init_value = char_valuemanufacturer_namedevice_info_serv-gtserv_chars[0]value_init_len = DIS_CHAR_MANUFACTURER_NAME_INIT_LENdevice_info_serv-gtserv_chars[0]value_max_len = DIS_CHAR_MANUFACTURER_NAME_MAX_LENif BLE_PAIR_ENABLEdevice_info_serv-gtserv_chars[0]value_permissions = AT_BLE_ATTR_READABLE_REQ_AUTHN_NO_AUTHR permissions elsedevice_info_serv-gtserv_chars[0]value_permissions = AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR permissions endifdevice_info_serv-gtserv_chars[0]user_desc = NULL user defined name device_info_serv-gtserv_chars[0]user_desc_len = 0device_info_serv-gtserv_chars[0]user_desc_max_len = 0device_info_serv-gtserv_chars[0]user_desc_permissions = AT_BLE_ATTR_NO_PERMISSIONS user description permissionsdevice_info_serv-gtserv_chars[0]client_config_permissions = AT_BLE_ATTR_NO_PERMISSIONS client config permissionsdevice_info_serm hdsv-gtserv_chars[0]server_config_permissions = AT_BLE_ATTR_NO_PERMISSIONS server config permissionsdevice_info_serv-gtserv_chars[0]user_desc_handle = 0 user desc handlesdevice_info_serv-gtserv_chars[0]client_config_handle = 0 client config handlesdevice_info_serv-gtserv_chars[0]server_config_handle = 0 server config handlesdevice_info_serv-gtserv_chars[0]presentation_format = NULL presentation format

        Note  In case of custom service the above definition initialization must be taken care of by thedeveloper

        421 Procedure to Configure and Load Device Info Service1 Include device info service header file (device_infoh) at the beginning of

        startup_templatec fileinclude ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehinclude device_infoh

        2 Define a device info service handler as global in startup_templatec file Serviceshandlers dis_gatt_service_handler_t dis_service_handler

        ATBTLC1000SettingHandling of Pre-Defined Service

        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 34

        3 Add dis_init_service and at_ble_primary_service_define functions as called abovethe advertisement start in main routine Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service)dis_init_service (ampdis_service_handler) Define the primary service in the GATT server database if ((dis_primary_service_define (ampdis_service_handler)) = AT_BLE_SUCCESS)printf(Device Information Service definition failed) Start Advertising process start_advertisement()

        4 Click to save the project ltCtrl+Sgt and compile the project by pressing button ltF7gt5 Verify that no build error appears in Atmel Studio output window

        Figure 4-7 Atmel Studio Output Window

        6 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt7 Open ldquoMicrochip SmartConnectrdquo application on Android or iOS device8 Press ltStart Scangt button and connect to peripheral

        Note  The device name is a characteristic and contains the name of the device This device namecan be read by the central device to know the name of the device in order to differentiate thedevices This is being set using at_ble_device_name_set()API The device name is set bydefault when ble_device_init is called and the value is pre-defined using BLE_DEVICE_NAMEThe device name can also be sent as part of advertisement payload to be same as the oneconfigured in at_ble_adv_data_set() API It is the responsibility of users to keep the devicename set in advertisement payload the same as that configured inat_ble_device_name_set()

        9 The Service must now be visible after pairing with peripheral under Microchip SmartConnectapplication

        ATBTLC1000SettingHandling of Pre-Defined Service

        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 35

        Figure 4-8 Service List in Microchip SmartConnect Application

        Note  If the pairing of ATBTLC1000 with Microchip Smart connect is not successful then removethe pairing information from mobile by selecting ldquoForget Devicerdquo from the mobile settings Thereason for this is that the mobile app stores the previous pairing information but the ATBTLC1000device lost the previous pairing information due to RESET since it was stored on temporary storage(RAM)

        10 The serial terminal must display the following log output windowFigure 4-9 Console Log Window

        ATBTLC1000SettingHandling of Pre-Defined Service

        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 36

        5 Setting up and Handling Custom ServiceThe previous assignment describes the handling of Bluetooth Low Energy SIG defined device infoservice which is the predefined service available in ASF component This assignment describes thecustom service So the service initialization needs to be implemented In the context of customizedenvironment service the following service description is pushed in ATBTLC1000 memory

        Figure 5-1 Custom Service

        Custom Environment Service Description

        bull UUID type ndash Custom UUID (128-bit)bull UUID ndash 1bc5d5a5-0200-a687-e511-3639c1ba5af0

        Characteristic 0 (Temperature)

        bull User Description ndash Temperaturebull UUID type ndash Custom UUID (128-bit)bull UUID ndash 1bc5d5a5-0200-a687-e511-3639d8ba5af0bull Properties ndash Read Notifybull Value permission ndash No authorization requiredbull Client config permission ndash No permissionbull Server config permission ndash No permission

        Note  In this definition UUIDs are generated randomly Custom servicescharacteristics are free to useany 128-bit UUID less than the base UUID There is no reserved space for vendors to use 16-bit or 32-bitUUIDs

        With this definition any temperature change is notified to the central The notify mechanism allows thecentral to know when the data changes When notify property of the Client Characteristic ConfigurationDescriptor is enabled by the central and the device writes the new value then this updated value isautomatically sent to the central through a notification The central is not required to send readcharacteristic commands explicitly to the peripheral (GATT server)

        To setup and handle the custom environment service in ATBTLC1000 module the following steps areadded to the Host MCU application

        bull Configure and load the custom servicebull Update Temperature characteristic and notify to the central devicebull Receive and handle notification from the Host device

        ATBTLC1000Setting up and Handling Custom Service

        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 37

        Figure 5-2 Custom Service Flowchart

        51 Configuring and Loading the Custom Environment ServiceThe ATBTLC1000 Host driver provides the following set of GATT functions that allows it to push andupdate the service descriptions in the ATBTLC1000 SRAM memory

        Note  Before starting this assignment be sure to follow the steps mentioned in 2 Creating the Projectand Initializing and 3 Establishing Connection with Central Device

        Prototype ndashat_ble_status_t at_ble_primary_service_define(at_ble_uuid_t uuidat_ble_handle_t service_handleat_ble_included_service_t included_service_listuint16_t included_service_countat_ble_characteristic_t charactristic_listuint16_t charactristic_count)

        Description ndash Defines a new primary service along with its included services and characteristics inATBTLC1000 module

        Parameters

        bull Uuid [In] ndash primary service UUIDbull service_handle [Out] ndash service handle is returned herebull included_service_list [In] ndash array of included service referencesbull included_service_count [In] ndash number of elements in included_service_listbull charactristic_list [InOut] ndash an array of characteristics included in the service this array

        is update with respective characteristics handlesbull charactristic_count[In] ndash number of elements in charactristic_list

        ATBTLC1000Setting up and Handling Custom Service

        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 38

        Return ndash Execution Status

        bull Characteristics ndashndash Characteristics definition is done through specific array of following

        ldquoat_ble_characteristic_trdquo structure instancestypedef structat_ble_handle_t char_val_handle Handler (returned during service initialisation)at_ble_uuid_t uuid Characteristic UUID (type and value)at_ble_char_properties_t propertiesCharac Properties (read write notify)uint8_t init_value initial valueuint16_t value_init_len initial value lengthuint16_t value_max_len value max lengthat_ble_attr_permissions_t value_permissions access authorization and authenticationuint8_t user_desc User descriptionuint16_t user_desc_len User description lengthuint16_t user_desc_max_len User description max lengthat_ble_char_presentation_t presentation_format Presentation formatat_ble_attr_permissions_t user_desc_permissions User description permissionat_ble_attr_permissions_t client_config_permissions client permissionat_ble_attr_permissions_t server_config_permissions server permissionat_ble_handle_t user_desc_handle description handlerat_ble_handle_t client_config_handle Client config handlerat_ble_handle_t server_config_handle Server config handler at_ble_characteristic_t

        511 Procedure to Configure and Load Custom Environment Service1 Define the following service UUID and characteristic UUID in startup_templatec file

        define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

        2 Define the following environment service handler and characteristics variable as global instartup_templatec file Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

        3 Add the following service initialization function custom_environment_service_init instartup_templatecvoid custom_environment_service_init(void) at_ble_uuid_t environment_service_uuiduint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUIDuint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperatureenvironment_service_characs[0]user_desc_len = 10environment_service_characs[0]user_desc_max_len = 10environment_service_characs[0]uuidtype = AT_BLE_UUID_128memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16)environment_service_characs[0]properties = AT_BLE_CHAR_READ |AT_BLE_CHAR_NOTIFYenvironment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature valueenvironment_service_characs[0]value_permissions =(AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuidampenvironment_service_handlerNULL0environment_service_characs1)=AT_BLE_SUCCESS)printf(n Assignment 41 Failed to Initialize custom environment service)

        ATBTLC1000Setting up and Handling Custom Service

        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 39

        elseprintf(n Assignment 41 Initialize custom environment service)

        4 Declare and implement the following GATT event callback functioncustom_char_changed_app_event in startup_templatec file If a client (central) enablesnotifications for a server the server (peripheral) receives an AT_BLE_CHARACTERISTIC_CHANGEDevent and this event callback is called Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

        5 Declare and implement the following custom_notification_confirmation_handlerfunction in startup_templatec file Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param)at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )paramif (event_param-gtstatus == AT_BLE_SUCCESS)printf(n Assignment 41Notification Successfully sent over the air) else printf(n Assignment 41Sending Notification over the air failed)return AT_BLE_SUCCESS

        6 Declare the following GATT server callback structure in startup_templatec file Thisassignment uses two GATT callbacksstatic const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handlercharacteristic_changed = custom_char_changed_app_event

        7 Add the following register_gatt_server_callbacks function in startup_templatec toregister GATT server callback for notification confirmation event Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks)ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACKBLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle)if (ble_status = true)printf(nError when Registering ATBTLC1000 callbacks)

        8 Add custom_environment_service_init and register_gatt_server_callbacksfunction calls prior to start advertisement in the application main routine to initialize custom serviceand to register the GATT server callbacksint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()

        ATBTLC1000Setting up and Handling Custom Service

        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 40

        endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks() Custom service init custom_environment_service_init ( ) Register Gatt server callbacks register_gatt_server_callbacks ( ) Start Advertising process start_advertisement()while(true)ble_event_task()

        9 Click to save the project ltCtrl+Sgt

        10 Compile the project by pressing button ltF7gt11 Verify that no build error appears in the Atmel Studio output window

        Figure 5-3 Atmel Studio Output Window

        12 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt13 Open the ldquoMicrochip SmartConnectrdquo application on Android or iOS device14 Connect and pair to the peripheral (pass key 123456)15 Custom service must now be visible after pairing with peripheral under Microchip SmartConnect

        application

        ATBTLC1000Setting up and Handling Custom Service

        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 41

        Figure 5-4 Service List in Microchip SmartConnect Application

        Note  Custom service is displayed as unknown service in the above figure as this service is not aSIG-defined service

        Figure 5-5 General Information

        16 Serial terminal client must display the following Log output

        ATBTLC1000Setting up and Handling Custom Service

        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 42

        Figure 5-6 Log Output Window

        52 Updating the Temperature CharacteristicIn the previous assignment the custom Temperature characteristic is defined with a notify attribute Thistype of attribute requires notification to be sent to central when a new characteristic value is availableThe update of any ldquonotifyrdquo characteristic value is based on following interaction between the Host MCUand the ATBTLC1000Figure 5-7 Characteristic Notification

        521 Setting a Characteristic Value ( at_ble_characteristic_value_set)Prototype ndashat_ble_status_t at_ble_characteristic_value_setat_ble_handle_t handleuint8_t valueuint16_t len)

        Description ndash Sets a characteristic value in ATBTLC1000 memory

        Parameters ndash

        ATBTLC1000Setting up and Handling Custom Service

        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 43

        bull handle [inout] ndash Pointer to Characteristic handle to be changedbull value [in] ndash New valuebull len [in] ndash Value length in bytes

        Return ndash Execution Status

        522 Sending a Notification (at_ble_notification_send)Prototype ndashat_ble_status_t at_ble_notification_send(at_ble_handle_t conn_handleat_ble_handle_t attr_handle)

        Description ndash Sends a Notification

        Parameters ndash

        bull conn_handle[in] ndash handle of the connection to be notifiedbull attr_handle [in] ndash handle of the attribute originating the notification

        Return ndash Execution Status

        523 Sending Temperature Information Once in Every 10 Seconds to Central1 Modify the following ldquotimer_callback_fnrdquo callback function from the startup_templatec

        filestatic void timer_callback_fn(void)timer_flag = true

        2 hw_timer_init()in main routine of startup_templatec initializes the hardware timer3 If a client (Central) enables the notifications for a server the server (Peripheral) receives an

        AT_BLE_CHARACTERISTIC_CHANGED event callback then start the periodic 10 second timer forsending the notification Add the following code in previously definedcustom_char_changed_app_event function Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))timer_flag = falsehw_timer_start(10)printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

        4 Declare the following Temperature_value global variable in startup_templatec staticuint8_t Temperature_value = 25 as static

        5 Add the following send_temperature_notification function in startup_templatec tosend temperature every 10 seconds Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++

        ATBTLC1000Setting up and Handling Custom Service

        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 44

        if(Temperature_value gt 75)Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set(environment_service_characs[0]char_val_handle(uint8_t )ampTemperature_valuesizeof(Temperature_value))ble_status = at_ble_notification_send(0environment_service_characs[0]char_val_handle)if(ble_status = AT_BLE_SUCCESS)printf(fail to send temperature update notification )

        6 Add the following code in main routine to send temperature data every 10 secondswhile (1) ble_event_task()if(connected_flag == true ampamp timer_flag == truetimer_flag = falsesend_temperature_notification()

        7 Click to save the project ltCtrl+Sgt

        8 Compile the project by pressing the button ltF7gt9 Verify that no build error appears in Atmel Studio output window

        Figure 5-8 Atmel Studio Output Window

        10 Click to program the project binary on the L21 Xplained XSTK11 Open ldquoMicrochip SmartConnectrdquo Application on Android or iOS device12 Connect and pair to the peripheral (pass key 123456)13 Click NOTIFY to start the notification14 Temperature information in HEX values must be displayed in Microchip SmartConnect application

        ATBTLC1000Setting up and Handling Custom Service

        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 45

        Figure 5-9 Notification Window

        15 Serial terminal must display the following log outputFigure 5-10 Log Output Window

        ATBTLC1000Setting up and Handling Custom Service

        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 46

        6 Appendix A Software Solution - Pre-Defined SvcThe following is the code implementation for handling of pre-defined service done in 4 SettingHandlingof Pre-Defined Service

        - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehinclude device_infoh

        volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false Services handlers dis_gatt_service_handler_t dis_service_handler

        static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

        void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

        Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

        Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

        static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

        Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void) Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks)

        ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 47

        ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

        timer callback function static void timer_callback_fn(void) Add timer callback functionality here

        void button_cb(void) Add button callback functionality here

        int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

        Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

        DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks()

        Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service) dis_init_service(ampdis_service_handler) Define the primary service in the GATT server database if((dis_primary_service_define(ampdis_service_handler)) = AT_BLE_SUCCESS) printf(Device Information Service definition failed)

        Start Advertising process start_advertisement() while(true) ble_event_task()

        ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 48

        7 Appendix B Software Solution - Custom ServiceThe following is the code implementation for handling of pre-defined service done in 5 Setting up andHandling Custom Service

        - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templateh

        volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false

        static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

        define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0

        define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

        Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

        void custom_environment_service_init(void) at_ble_uuid_t environment_service_uuid uint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUID uint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128 memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperature environment_service_characs[0]user_desc_len = 10 environment_service_characs[0]user_desc_max_len = 10 environment_service_characs[0]uuidtype = AT_BLE_UUID_128 memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16) environment_service_characs[0]properties = AT_BLE_CHAR_READ | AT_BLE_CHAR_NOTIFY environment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature value environment_service_characs[0]value_permissions = (AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuid ampenvironment_service_handlerNULL0 environment_service_characs1)=AT_BLE_SUCCESS) printf(n Assignment 41 Failed to Initialize custom environment service) else printf(n Assignment 41 Initialize custom environment service)

        Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param) at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )param if (event_param-gtstatus == AT_BLE_SUCCESS) printf(n Assignment 41Notification Successfully sent over the air)

        ATBTLC1000Appendix B Software Solution - Custom Service

        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 49

        else printf(n Assignment 41Sending Notification over the air failed) return AT_BLE_SUCCESS

        static at_ble_status_t custom_char_changed_app_event(void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle -gt char_new_value[0])) timer_flag = false hw_timer_start(10) printf(n Assignment 41Characteristic changed event) return AT_BLE_SUCCESS

        static const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handler characteristic_changed = custom_char_changed_app_event

        Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

        void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

        Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

        Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

        static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

        Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void)

        ATBTLC1000Appendix B Software Solution - Custom Service

        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 50

        Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

        timer callback function static void timer_callback_fn(void) Add timer callback functionality here timer_flag = true

        void button_cb(void) Add button callback functionality here

        static uint8_t Temperature_value = 25

        Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++ if(Temperature_value gt 75) Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set( environment_service_characs[0]char_val_handle (uint8_t )ampTemperature_value sizeof(Temperature_value)) ble_status = at_ble_notification_send(0 environment_service_characs[0]char_val_handle) if(ble_status = AT_BLE_SUCCESS) printf(fail to send temperature update notification )

        int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

        Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

        DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register Gap ATBTLC1000 Callbacks register_btlc1000_callbacks()

        Custom service init custom_environment_service_init()

        ATBTLC1000Appendix B Software Solution - Custom Service

        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 51

        Register Gatt server callback register_gatt_server_callbacks()

        Start Advertising process start_advertisement() while(true) ble_event_task() if(connected_flag == true ampamp timer_flag == true) timer_flag = false send_temperature_notification()

        ATBTLC1000Appendix B Software Solution - Custom Service

        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 52

        8 Document Revision HistoryRev B - 42018

        Section Changes

        Document Revised contents to match various Bluetooth Low Energy standard versions

        Rev A - 122017

        Section Changes

        Document Initial release

        ATBTLC1000Document Revision History

        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 53

        The Microchip Web Site

        Microchip provides online support via our web site at httpwwwmicrochipcom This web site is used asa means to make files and information easily available to customers Accessible by using your favoriteInternet browser the web site contains the following information

        bull Product Support ndash Data sheets and errata application notes and sample programs designresources userrsquos guides and hardware support documents latest software releases and archivedsoftware

        bull General Technical Support ndash Frequently Asked Questions (FAQ) technical support requestsonline discussion groups Microchip consultant program member listing

        bull Business of Microchip ndash Product selector and ordering guides latest Microchip press releaseslisting of seminars and events listings of Microchip sales offices distributors and factoryrepresentatives

        Customer Change Notification Service

        Microchiprsquos customer notification service helps keep customers current on Microchip productsSubscribers will receive e-mail notification whenever there are changes updates revisions or erratarelated to a specified product family or development tool of interest

        To register access the Microchip web site at httpwwwmicrochipcom Under ldquoSupportrdquo click onldquoCustomer Change Notificationrdquo and follow the registration instructions

        Customer Support

        Users of Microchip products can receive assistance through several channels

        bull Distributor or Representativebull Local Sales Officebull Field Application Engineer (FAE)bull Technical Support

        Customers should contact their distributor representative or Field Application Engineer (FAE) for supportLocal sales offices are also available to help customers A listing of sales offices and locations is includedin the back of this document

        Technical support is available through the web site at httpwwwmicrochipcomsupport

        Microchip Devices Code Protection Feature

        Note the following details of the code protection feature on Microchip devices

        bull Microchip products meet the specification contained in their particular Microchip Data Sheetbull Microchip believes that its family of products is one of the most secure families of its kind on the

        market today when used in the intended manner and under normal conditionsbull There are dishonest and possibly illegal methods used to breach the code protection feature All of

        these methods to our knowledge require using the Microchip products in a manner outside theoperating specifications contained in Microchiprsquos Data Sheets Most likely the person doing so isengaged in theft of intellectual property

        bull Microchip is willing to work with the customer who is concerned about the integrity of their code

        ATBTLC1000

        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 54

        bull Neither Microchip nor any other semiconductor manufacturer can guarantee the security of theircode Code protection does not mean that we are guaranteeing the product as ldquounbreakablerdquo

        Code protection is constantly evolving We at Microchip are committed to continuously improving thecode protection features of our products Attempts to break Microchiprsquos code protection feature may be aviolation of the Digital Millennium Copyright Act If such acts allow unauthorized access to your softwareor other copyrighted work you may have a right to sue for relief under that Act

        Legal Notice

        Information contained in this publication regarding device applications and the like is provided only foryour convenience and may be superseded by updates It is your responsibility to ensure that yourapplication meets with your specifications MICROCHIP MAKES NO REPRESENTATIONS ORWARRANTIES OF ANY KIND WHETHER EXPRESS OR IMPLIED WRITTEN OR ORAL STATUTORYOR OTHERWISE RELATED TO THE INFORMATION INCLUDING BUT NOT LIMITED TO ITSCONDITION QUALITY PERFORMANCE MERCHANTABILITY OR FITNESS FOR PURPOSEMicrochip disclaims all liability arising from this information and its use Use of Microchip devices in lifesupport andor safety applications is entirely at the buyerrsquos risk and the buyer agrees to defendindemnify and hold harmless Microchip from any and all damages claims suits or expenses resultingfrom such use No licenses are conveyed implicitly or otherwise under any Microchip intellectualproperty rights unless otherwise stated

        Trademarks

        The Microchip name and logo the Microchip logo AnyRate AVR AVR logo AVR Freaks BeaconThingsBitCloud CryptoMemory CryptoRF dsPIC FlashFlex flexPWR Heldo JukeBlox KeeLoq KeeLoq logoKleer LANCheck LINK MD maXStylus maXTouch MediaLB megaAVR MOST MOST logo MPLABOptoLyzer PIC picoPower PICSTART PIC32 logo Prochip Designer QTouch RightTouch SAM-BASpyNIC SST SST Logo SuperFlash tinyAVR UNIO and XMEGA are registered trademarks ofMicrochip Technology Incorporated in the USA and other countries

        ClockWorks The Embedded Control Solutions Company EtherSynch Hyper Speed Control HyperLightLoad IntelliMOS mTouch Precision Edge and Quiet-Wire are registered trademarks of MicrochipTechnology Incorporated in the USA

        Adjacent Key Suppression AKS Analog-for-the-Digital Age Any Capacitor AnyIn AnyOut BodyComchipKIT chipKIT logo CodeGuard CryptoAuthentication CryptoCompanion CryptoControllerdsPICDEM dsPICDEMnet Dynamic Average Matching DAM ECAN EtherGREEN In-Circuit SerialProgramming ICSP Inter-Chip Connectivity JitterBlocker KleerNet KleerNet logo Mindi MiWimotorBench MPASM MPF MPLAB Certified logo MPLIB MPLINK MultiTRAK NetDetach OmniscientCode Generation PICDEM PICDEMnet PICkit PICtail PureSilicon QMatrix RightTouch logo REALICE Ripple Blocker SAM-ICE Serial Quad IO SMART-IS SQI SuperSwitcher SuperSwitcher II TotalEndurance TSHARC USBCheck VariSense ViewSpan WiperLock Wireless DNA and ZENA aretrademarks of Microchip Technology Incorporated in the USA and other countries

        SQTP is a service mark of Microchip Technology Incorporated in the USA

        Silicon Storage Technology is a registered trademark of Microchip Technology Inc in other countries

        GestIC is a registered trademark of Microchip Technology Germany II GmbH amp Co KG a subsidiary ofMicrochip Technology Inc in other countries

        All other trademarks mentioned herein are property of their respective companies

        ATBTLC1000

        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 55

        copy 2018 Microchip Technology Incorporated Printed in the USA All Rights Reserved

        ISBN 978-1-5224-2921-0

        Quality Management System Certified by DNV

        ISOTS 16949Microchip received ISOTS-169492009 certification for its worldwide headquarters design and waferfabrication facilities in Chandler and Tempe Arizona Gresham Oregon and design centers in Californiaand India The Companyrsquos quality system processes and procedures are for its PICreg MCUs and dsPICreg

        DSCs KEELOQreg code hopping devices Serial EEPROMs microperipherals nonvolatile memory andanalog products In addition Microchiprsquos quality system for the design and manufacture of developmentsystems is ISO 90012000 certified

        ATBTLC1000

        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 56

        AMERICAS ASIAPACIFIC ASIAPACIFIC EUROPECorporate Office2355 West Chandler BlvdChandler AZ 85224-6199Tel 480-792-7200Fax 480-792-7277Technical SupporthttpwwwmicrochipcomsupportWeb AddresswwwmicrochipcomAtlantaDuluth GATel 678-957-9614Fax 678-957-1455Austin TXTel 512-257-3370BostonWestborough MATel 774-760-0087Fax 774-760-0088ChicagoItasca ILTel 630-285-0071Fax 630-285-0075DallasAddison TXTel 972-818-7423Fax 972-818-2924DetroitNovi MITel 248-848-4000Houston TXTel 281-894-5983IndianapolisNoblesville INTel 317-773-8323Fax 317-773-5453Tel 317-536-2380Los AngelesMission Viejo CATel 949-462-9523Fax 949-462-9608Tel 951-273-7800Raleigh NCTel 919-844-7510New York NYTel 631-435-6000San Jose CATel 408-735-9110Tel 408-436-4270Canada - TorontoTel 905-695-1980Fax 905-695-2078

        Australia - SydneyTel 61-2-9868-6733China - BeijingTel 86-10-8569-7000China - ChengduTel 86-28-8665-5511China - ChongqingTel 86-23-8980-9588China - DongguanTel 86-769-8702-9880China - GuangzhouTel 86-20-8755-8029China - HangzhouTel 86-571-8792-8115China - Hong Kong SARTel 852-2943-5100China - NanjingTel 86-25-8473-2460China - QingdaoTel 86-532-8502-7355China - ShanghaiTel 86-21-3326-8000China - ShenyangTel 86-24-2334-2829China - ShenzhenTel 86-755-8864-2200China - SuzhouTel 86-186-6233-1526China - WuhanTel 86-27-5980-5300China - XianTel 86-29-8833-7252China - XiamenTel 86-592-2388138China - ZhuhaiTel 86-756-3210040

        India - BangaloreTel 91-80-3090-4444India - New DelhiTel 91-11-4160-8631India - PuneTel 91-20-4121-0141Japan - OsakaTel 81-6-6152-7160Japan - TokyoTel 81-3-6880- 3770Korea - DaeguTel 82-53-744-4301Korea - SeoulTel 82-2-554-7200Malaysia - Kuala LumpurTel 60-3-7651-7906Malaysia - PenangTel 60-4-227-8870Philippines - ManilaTel 63-2-634-9065SingaporeTel 65-6334-8870Taiwan - Hsin ChuTel 886-3-577-8366Taiwan - KaohsiungTel 886-7-213-7830Taiwan - TaipeiTel 886-2-2508-8600Thailand - BangkokTel 66-2-694-1351Vietnam - Ho Chi MinhTel 84-28-5448-2100

        Austria - WelsTel 43-7242-2244-39Fax 43-7242-2244-393Denmark - CopenhagenTel 45-4450-2828Fax 45-4485-2829Finland - EspooTel 358-9-4520-820France - ParisTel 33-1-69-53-63-20Fax 33-1-69-30-90-79Germany - GarchingTel 49-8931-9700Germany - HaanTel 49-2129-3766400Germany - HeilbronnTel 49-7131-67-3636Germany - KarlsruheTel 49-721-625370Germany - MunichTel 49-89-627-144-0Fax 49-89-627-144-44Germany - RosenheimTel 49-8031-354-560Israel - RarsquoananaTel 972-9-744-7705Italy - MilanTel 39-0331-742611Fax 39-0331-466781Italy - PadovaTel 39-049-7625286Netherlands - DrunenTel 31-416-690399Fax 31-416-690340Norway - TrondheimTel 47-7289-7561Poland - WarsawTel 48-22-3325737Romania - BucharestTel 40-21-407-87-50Spain - MadridTel 34-91-708-08-90Fax 34-91-708-08-91Sweden - GothenbergTel 46-31-704-60-40Sweden - StockholmTel 46-8-5090-4654UK - WokinghamTel 44-118-921-5800Fax 44-118-921-5820

        Worldwide Sales and Service

        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 57

        • Introduction
        • Table of Contents
        • 1 Getting Started
          • 11 Software Prerequisites
            • 111 Installation Steps of Atmel Studio 7
              • 12 Software Setup
                • 121 Installation of Microchip SmartConnect application on a Mobile device
                  • 13 ATBTLC1000 Embedded Firmware
                  • 14 ATBTLC1000 Host Software API
                  • 15 Hardware Prerequisites
                    • 151 SMARTtrade SAM L21 Xplained Pro
                    • 152 ATBTLC1000ZR Xplained Pro Extension board
                      • 16 Hardware Setup
                        • 2 Creating the Project and Initializing
                          • 21 Creating Project from ASF
                          • 22 Configuring ASF for ATBTLC1000-ZR
                          • 23 Compiling and Testing the Project
                            • 3 Establishing Connection with Central Device
                              • 31 Configuring and Starting the Advertisement Process
                                • 311 Flags (AD Type 0x00)
                                • 312 Available Service UUID (AD Types 0x02 to 0x07)
                                • 313 Device Name (AD Types 0x08 to 0x09)
                                  • 3131 Setting the Advertisement Payload (ble_advertisement_data_set)
                                  • 3132 Starting the Advertisement Process (at_ble_adv_start)
                                    • 314 Advertisement Process
                                      • 3141 Starting the Advertisement Process
                                          • 32 Managing GAP events
                                            • 321 Handling of Connected and Disconnected GAP Events
                                                • 4 SettingHandling of Pre-Defined Service
                                                  • 41 Adding Device Info Service Component from ASF Wizard to Project
                                                  • 42 Configuring and Loading Device Information Service
                                                    • 421 Procedure to Configure and Load Device Info Service
                                                        • 5 Setting up and Handling Custom Service
                                                          • 51 Configuring and Loading the Custom Environment Service
                                                            • 511 Procedure to Configure and Load Custom Environment Service
                                                              • 52 Updating the Temperature Characteristic
                                                                • 521 Setting a Characteristic Value ( at_ble_characteristic_value_set)
                                                                • 522 Sending a Notification (at_ble_notification_send)
                                                                • 523 Sending Temperature Information Once in Every 10 Seconds to Central
                                                                    • 6 Appendix A Software Solution - Pre-Defined Svc
                                                                    • 7 Appendix B Software Solution - Custom Service
                                                                    • 8 Document Revision History
                                                                    • The Microchip Web Site
                                                                    • Customer Change Notification Service
                                                                    • Customer Support
                                                                    • Microchip Devices Code Protection Feature
                                                                    • Legal Notice
                                                                    • Trademarks
                                                                    • Quality Management System Certified by DNV
                                                                    • Worldwide Sales and Service

          13 ATBTLC1000 Embedded FirmwareThe management of Bluetooth Low Energy communication is based on the network stack stored inATBTLC1000 ROM This stack requires parameters such as GAP parameters and attributes to befunctional which are pushed from Host controller into ATBTLC1000 internal SRAM using GenericTransport Layer (GTL)

          The ROM coded firmware embeds the layers of Bluetooth Low Energy stack that runs on top of theinternal hardcoded peripheral drivers and RTOS scheduler

          bull Generic Access Profile (GAP)GAP controls the Bluetooth Low Energy connection advertising makes the device visible to theoutside world and determines how two devices interact with each other GAP defines two mainroles for the Bluetooth Low Energy device Central and Peripheral

          bull Generic Attribute Profile (GATT) and Attribute Protocol (ATT)GATT defines how the Bluetooth Low Energy device transfers the data The GATT process isbased on services and characteristics stored in Attribute Protocol (ATT) ATT is a simple lookuptable stored in device SRAM

          bull Security Manager (SM)The Security Manager defines the procedure for pairing authentication and encryption betweenBLE devices This layer is mainly used if security is requested on that particular connection

          bull Logical Link Control and Adaptation Protocol (L2CAP)L2CAP supports high-level protocol multiplexing packet segmentationreassembly and conveyingthe quality of service information L2CAP permits applications to transmit and receive the datapackets with channel flow control and retransmission

          bull Direct test mode (DTM)DTM allows testing of the radios Physical Layer (PHY) by transmitting and receiving the test packetsequences This is often used in compliance and production line testing without the need of goingthrough the complete Bluetooth Low Energy Protocol Stack

          14 ATBTLC1000 Host Software APIThe ATBTLC1000 is provided with a dedicated Host software API layer The purpose of this API layer isto provide an easy and reliable solution to add Bluetooth Low Energy capabilities to any user applicationThe API provides a set of high level Bluetooth function with abstraction of the transport protocol usedbetween the host MCU and the ATBTLC1000

          ATBTLC1000Getting Started

          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 5

          Figure 1-2 Host Software API

          Figure 1-3 BluSDK File Architecture

          The API operation relies on a request-response mechanism The specific requests are sent toATBTLC1000 through dedicated API function call The event messages are then returned by theATBTLC1000 on request processing or on specific Bluetooth Low Energy events These event messagesare to be handled by the host device according to the user application requirements The following figureillustrates a typical Bluetooth Low Energy peripheral application flowchart

          ATBTLC1000Getting Started

          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 6

          Figure 1-4 Bluetooth Low Energy Peripheral Application Flowchart

          WARNING The user application must be non-blocking to ensure that the Bluetooth Low Energy events arehandled in time

          15 Hardware PrerequisitesThis document uses the ATBTLC1000ZR-XSTK kit The ATBTLC1000ZR-XSTK kit is comprised of theSAM L21 Xplained Pro (XPRO) and ATBTLC1000ZR XPRO extension board The following sectionsprovide an overview of these kits and their features

          151 SMARTtrade SAM L21 Xplained ProThe SMARTtrade SAM L21 Xplained Pro evaluation kit is used to evaluate the ATSAML21J18Bmicrocontroller This kit includes an on-board embedded debugger to program and debugATSAML21J18B The kit also contains an on-board current measurement circuitry which enables theuser to measure current profile over time without any external tools The connection with any XplainedPro modules or external component is possible through available external connectors which makes theboard perfect for prototyping the low-power applications

          ATBTLC1000Getting Started

          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 7

          Figure 1-5 SAM L21 Xplained Pro Module

          152 ATBTLC1000ZR Xplained Pro Extension boardThe ATBTLC1000ZR Xplained Pro extension evaluation kit is Bluetooth Low Energy SoC ATBTLC1000-ZR110CA module This extension is plugged to any of the supported host MCU Xplained Pro evaluationboards to quickly add Bluetooth Low Energy connectivity to the platform This kit provides easy access tothe features of the ATBTLC1000-ZR110CA Bluetooth Low Energy module and illustrates how to integratethe device in a custom design which is supported by the Atmel Studio integrated development platform

          ATBTLC1000Getting Started

          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 8

          Figure 1-6 ATBTLC1000ZR Xpro Board

          The ATBTLC1000ZR Xplained Pro extension board contains

          bull ATBLTC1000-ZR110CA Module ndash Bluetooth Low Energy module with 24 GHz Bluetooth LowEnergy ATBTLC1000-XR1100A SiP

          bull AT30TSE758A Digital Temperature Sensor ndash Integrated temperature sensor with nonvolatileregisters and serial EEPROM Compatible with two-wire (I2C) and SMBus serial interfaces

          bull Current Measurement Header ndash Allows measurement of the current consumption of the board Itmust be closed to enable power to the ATBTLC1000-ZR110CA module

          16 Hardware Setup1 Ensure that ATBTLC1000ZR-XPRO power consumption header is closed and that jumpers are

          placed on pins 2 to 3 of headers J105 J106 J107 and J108 as shown in the following figure

          ATBTLC1000Getting Started

          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 9

          Figure 1-7 ATBTLC1000ZR-XPRO Extension

          2 Connect the ATBTLC1000ZR-XPRO extension to EXT1 of SAM L21 XPRO as illustrated in thefollowing figureFigure 1-8 ATBTLC1000ZR-XPRO Extension connected with SAM L21 XPRO

          3 Connect the board to PC using the ldquoDebug USB ConnectorrdquoFigure 1-9 SAM L21 XPRO Connection to PC

          ATBTLC1000Getting Started

          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 10

          4 Now the Hardware is ready for development

          ATBTLC1000Getting Started

          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 11

          2 Creating the Project and InitializingThis chapter provides the process of creating an application startup project using Atmel Studio Prior tocreating a project the user must know hardware architecture and software requirements to configuredrivers

          The hardware connection between the SAM L21 XPRO and the ATBTLC1000ZR XPRO board isillustrated in following figure This SAM L21 board is used as host MCUFigure 2-1 ATBTLC1000ZR Xpro Board Connection with SAM L21

          Note  For more details refer to module datasheet and XPRO board design documentation

          21 Creating Project from ASFAdvanced Software Framework has a pre-configured Bluetooth Low Energy Startup template project thatincludes Bluetooth Low Energy software API for Host and ATBTLC1000 and their peripheral driverdependencies This is used as starting project for any Bluetooth Low Energy project development

          To create the project follow the steps below

          1 Search for the ldquoBLE-Startup Templaterdquo from the File gt New gt Example Project menu in AtmelStudio

          ATBTLC1000Creating the Project and Initializing

          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 12

          Figure 2-2 Advanced Software Framework_New Example Project

          Note  ATBTLC1000SAMB11 related projects are prefixed with ldquoBLErdquo making it easier to filter theproject in the dialogue box

          2 Select the appropriate ldquoBLE-Startup Templaterdquo project corresponding to the intended Host MCUXplained Pro board and then press OK button to import the BLE startup template project SelectldquoBLE-Startup Template ndash SAM L21 Xplained Pro SAML21J18Brdquo for this hands-onNote  Rev B XPRO boards can be identified by SAML21J18B silk screen marking below SAML21MCU

          3 The BLE startup project is now created and loaded in Atmel StudioFigure 2-3 Startup_Template Project

          ATBTLC1000Creating the Project and Initializing

          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 13

          Note  The main project routine of ldquoStartup Template projectrdquo already includes host MCU low levelinitialization BLE and ATBTLC1000 initialization The added ASF components in project can beviewed from ldquoASFgtASF Wizardrdquo Select the created project from Project drop down box

          Figure 2-4 ASF Wizard Window

          ndash BLE_STACK Platform Interface ndash Core manager of Bluetooth Low Energy Host API Itmanages ATBTLC1000 device initialization GAP and GATT events

          ndash Timer Driver ndash Task timer functionality by using a Timer Counter (TC) or Timer Counter forControl (TCC) peripheral

          ndash Console UART ndash Universal Asynchronous ReceiverTransmitter (UART) communication insynchronousblocking mode

          ndash Generic Board Support ndash Host MCU Board specific initializationndash System Drivers ndash Select MCUrsquos System peripheral drivers These drivers are included by

          default in ASF projects and manage the clocks and oscillator of the system4 The main routine contains the MCU low level initialization and ATBTLC1000 initialization The

          following figure illustrates the flowchart of the main routine

          ATBTLC1000Creating the Project and Initializing

          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 14

          Figure 2-5 Main Routine Flowchart

          22 Configuring ASF for ATBTLC1000-ZR1 The default ldquoStartup Template Projectrdquo is configured for ATBTLC1000-MR module with 6-Wire

          mode2 Navigate to Project properties Project gt Project properties gt Toolchain gt ARMGNU C Compiler gt

          Symbols3 The ATBTLC1000ZR-XSTK kit uses the ATBTLC1000-ZR110CA module Change symbol

          BLE_MODULE to BTLC1000_ZR and enable UART_FLOWCONTROL_4WIRE_MODE forATBTLC1000-ZR module as shown in the figure belowFigure 2-6 Startup Template Project Window

          Note  This configuration change is not required for ATBTLC1000-MR module

          ATBTLC1000Creating the Project and Initializing

          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 15

          23 Compiling and Testing the Project

          1 Click the ldquo rdquo button ltF7gt to compile the project2 Verify that no build error appears in Atmel Studio output window

          Figure 2-7 Atmel Studio Output Window

          3 Connect the SAM L21 XPRO to PC (if not already done)4 To access the project properties go to Project gt

          STARTUP_TEMPLATE_SAML21_XPLAINED_PRO_B1 PropertiesFigure 2-8 Compiling the Project

          5 In project properties click the Tool tab and select the EDBG of SAM L21 Xplained Pro board asdebuggerprogrammerFigure 2-9 Selection of DebuggerProgrammer

          6 Open any Terminal application (for example TeraTerm) Select the COM port enumerated on thePC and set the following parameters

          ndash EDBG associated COM Port (Check Windows Device Manager)

          ATBTLC1000Creating the Project and Initializing

          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 16

          ndash Baudrate 115200ndash Parity Nonendash One Stop bitndash Enable Hardware Flow Control

          7 Click to save the project ltCtrl+Sgt

          8 Click rdquo to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt9 The initialization of the ATBTLC1000ZR module must return the Bluetooth Device Address and

          Address typeFigure 2-10 Console Log Window

          Note 1 If initialization fails make sure to verify the hardware configuration is aligned with the

          description refer to 16 Hardware Setup2 The initialization of ATBTLC1000 takes few seconds due to patch download process

          ATBTLC1000Creating the Project and Initializing

          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 17

          3 Establishing Connection with Central DeviceThe Bluetooth Low Energy connectivity is added to the application that is used to connect with theBluetooth Low Energy central The first step is about the management of Bluetooth connection with acentral device When using ATBTLC1000 device this process is managed by dedicated API function callsassociated with ATBTLC1000 events handling

          The interaction between Host MCU ATBTLC1000 and Bluetooth Low Energy central during connectionestablishment is as follows

          Figure 3-1 Establishing Connection with Central Device

          On host MCU side the management of the Bluetooth connection is performed through three main steps1 GAP callback registration2 Advertisement configuration3 ATBTLC1000 event handling

          In the existing project main routine the integration of these steps are highlighted in red in the followingflowchart

          ATBTLC1000Establishing Connection with Central Device

          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 18

          Figure 3-2 Main Routine Flow Chart

          31 Configuring and Starting the Advertisement ProcessThe Bluetooth Low Energy devices transmit advertisement packets to show their presence to nearbydevices The advertisement packet is sent periodically at a time interval defined by variableldquoadvintervalrdquo defined in Bluetooth SIG specification To avoid any collision with other wireless networksuch as Wi-Fireg a channel change is performed for each advertisement packet sent (data frequencyhopping) as illustrated in the following figureFigure 3-3 Advertisement Process

          During advertisement the payload structure to be sent differs from application to application and is set byusing encapsulated packet data unit type information (PDU_TYPE)

          ATBTLC1000Establishing Connection with Central Device

          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 19

          Figure 3-4 PDU Advertising

          The following table lists the different PDU types used according to device role

          Advertising event types (PDU_TYPE) Broadcaster Observer Peripheral Central

          Connectible undirected event (ADV_IND) Excluded Excluded Mandatory Excluded

          Connectible directed event(ADV_DIRECT_IND) Excluded Excluded Optional Excluded

          Non-connectible undirected event(ADV_NONCONN_IND) Mandatory Excluded Optional Excluded

          Scannable undirected event (ADV_SCAN_IND) Optional Excluded Optional Excluded

          As our device acts as a Bluetooth Low Energy peripheral the connectable undirected event (ADV_IND)advertising type is used See the following description about the ADV_IND advertisement packetFigure 3-5 ADV_IND Advertisement Packet

          The ADV_IND payload contains different Advertisement Data types (AD0 - ADn) which provide specificinformation to the central device such as device short name Tx power level and list of availableservices UUIDs The number of advertisement data types that can be added to the advertisementpayload are limited by the advertisement payload size of 31 octets

          Following is a list of advertisement data types that are commonly found in ADV_IND payload

          ATBTLC1000Establishing Connection with Central Device

          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 20

          311 Flags (AD Type 0x00)The flags describe the basic device capability such as BLE support BLE discoverable mode BREDRsupport and simultaneous BRED

          312 Available Service UUID (AD Types 0x02 to 0x07)The Bluetooth Low Energy advertisement payloads are limited to 31 bytes Therefore only two 128-bitUUID values can be added to the payload For this purpose the specific AD types describe the length ofthe advertised UUID and provide information as to whether the payload contains a incompletecompletelist of UUID supported by the GATT server

          bull 0x02 - Incomplete list of 16-bit UUIDs (adopted GATT services)bull 0x03 - Complete list of 16-bit UUIDs (adopted GATT services)bull 0x06 - Incomplete list of 128-bit UUIDs (custom GATT services)bull 0x07 - Complete list of 128-bit UUIDs (custom GATT services)

          Note  When a 16-bit UUID is transmitted only the unique 2-byte value is sent The client knows that it isrequired to be injected into the base UUID For example the Health Thermometer Service is assigned as0x1809 so its equivalent UUID is 00001809-0000-1000-8000-00805F9B34FB

          313 Device Name (AD Types 0x08 to 0x09)This AD type field is used to advertise the Local name of device in the network The Local name datatype value indicates if the name is complete or shortened If the name is shortened the complete namecan be read after the connection is established

          bull 0x08 - Shortened Local Namebull 0x09 - Complete Local Name

          Note 1 A shortened name contains only continuous characters from the beginning of the full name For

          example if the device name is BT_Device_Name then the shortened name can beBT_Device or BT_Dev

          2 Complete data type list are available at httpswwwbluetoothcomspecificationsassigned-numbersgeneric-access-profile

          For management of advertisement process and cover the different configurations specified by SIG theATBTLC1000 Host driver provides the two functions elaborated in the following sections

          In the application use these two functions to setup the following ADV_IN type payloadFigure 3-6 ADV_IN Type Payload Process

          ATBTLC1000Establishing Connection with Central Device

          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 21

          3131 Setting the Advertisement Payload (ble_advertisement_data_set)Prototype ndashat_ble_status_t at_ble_adv_data_set (uint8_t const const adv_datauint8_t adv_data_lenuint8_t const const scan_resp_datauint8_t scan_response_data_len)

          Description ndash Set clear or update the advertisement and scan response data

          Parameters ndash

          bull adv_data ndash Raw data to be placed in advertisement packetbull adv_data_len ndash Data length for adv_data Max size 28 bytes (3 bytes are reserved to set

          advertising AD type flags based on the selected Advertising mode and the user is not required toconfigure AD type flags in the advertisement payload)

          bull scan_resp_data ndash Raw data to be placed in the scan response packet If NULL no changes aremade to the current scan response packet data

          bull scan_response_data_len ndash Data length for scan_resp_data Max size 31 bytes

          Return ndash Execution Status

          This function requires a parameter raw adv_data to be sent to central Following is an example of itsdefinition

          static uint8_t adv_data[] = 0x11 AD1 length = 170x03 AD1 Type = Complete list of 128-bit UUIDs0x1b0xc50xd50xa50x020x000xa60x87 AD1 = UUID MSBs0xe50x110x360x390xc00xba0x5a0xf00x0A AD2 Length = 100x09 AD2 Type = Complete local NamelsquoMrsquorsquoyrsquorsquo_rsquorsquoDrsquorsquoErsquorsquoVrsquo AD2 = ldquoMy_DEVrdquo

          3132 Starting the Advertisement Process (at_ble_adv_start)Prototype ndashat_ble_status_t at_ble_adv_start (at_ble_adv_type_t typeat_ble_adv_mode_t modeat_ble_addr_t peer_addrat_ble_filter_type_t filtereduint16_t intervaluint16_t timeoutbool disable_randomness)

          Description ndash Start advertisement process

          Parameters ndash

          bull type ndash Advertising type to be used can bendash AT_BLE_ADV_TYPE_UNDIRECTEDndash AT_BLE_ADV_TYPE_DIRECTEDndash AT_BLE_ADV_TYPE_SCANNABLE_UNDIRECTEDndash AT_BLE_ADV_TYPE_NONCONN_UNDIRECTEDndash AT_BLE_ADV_TYPE_DIRECTED_LDCndash AT_BLE_ADV_TYPE_SCAN_RESPONSE

          bull mode ndash Advertising mode to be used can be

          ATBTLC1000Establishing Connection with Central Device

          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 22

          ndash AT_BLE_ADV_NON_DISCOVERABLEndash AT_BLE_ADV_GEN_DISCOVERABLEndash AT_BLE_ADV_LIM_DISCOVERABLEndash AT_BLE_ADV_BROADCASTER_MODE

          bull peer_addr ndash Specify peer address when advertising type is AT_BLE_ADV_TYPE_DIRECTEDbull filtered ndash

          ndash AT_BLE_ADV_FP_ANY ndash Allow scan and connection requests from anyonendash AT_BLE_ADV_FP_FILTER_SCANREQ ndash Allow scan request from White List devices onlyndash AT_BLE_ADV_FP_FILTER_CONNREQ ndash Allow connection request from White List devices

          onlyndash AT_BLE_ADV_FP_FILTER_BOTH ndash Allow scan and connection requests from White List

          devices onlybull interval ndash Advertisement interval (in 0625 ms units)bull timeout ndash Advertising timeout between 0x0001 and 0x028F in scale of seconds This parameter

          must be set to 0 if type equals AT_BLE_ADV_TYPE_DIRECTEDbull disable_randomness ndash When disabled advertisements are performed at the exact interval

          without adding random 10 ms tempo

          Return ndash Execution Status

          314 Advertisement ProcessIn this assignment the advertisement process is performed in the following configuration

          bull Undirected (Type AT_BLE_ADV_TYPE_UNDIRECTED)bull Discoverable (Mode AT_BLE_ADV_GEN_DISCOVERABLE)bull No peer Address (peer_addr = NULL)bull No filtering (filtered = AT_BLE_ADV_FP_ANY)bull Advertisement interval 1s (interval = 1600)bull Maximum timeout (timeout 655)bull Randomness enabled (disable_randomness = FALSE)

          3141 Starting the Advertisement Process1 Open startup_templatec file2 Declare the following ble_status global variable in startup_templatec as volatile

          include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehvolatile at_ble_status_t ble_status

          3 Declare the following adv_data global variable in startup_templatec as staticstatic uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD)0x09 AD2 Type = Complete local Name

          ATBTLC1000Establishing Connection with Central Device

          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 23

          My_SENS AD2 = ldquoMy_SENSrdquo

          Note 1 The name of the device is to be changed (AD2 field)2 According to the new name AD2 length must be adapted to new AD2 content

          4 Add the following start_advertisement function in startup_templatec prototype for thefunction void start_advertisement (void) also this can be added to avoid warningsvoid start_advertisement (void)printf(n Assignment 21 Start Advertisement)Set advertisement datable_status = at_ble_adv_data_set(adv_datasizeof(adv_data)NULL0)Start Advertisementble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550)if(ble_status = AT_BLE_SUCCESS)printf(n Failed to start advertisement)

          5 Start the advertisement process by adding the following highlighted code to the application mainroutineint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Start Advertising process start_advertisement() Register PrimaryIncluded service in case of GATT Server while(true) Write application task

          6 Click to save the project ltCtrl+Sgt

          7 Click button to compile the project ltF7gt8 Verify that no build error appears in Atmel Studio output window

          Figure 3-7 Atmel Studio Output Window

          ATBTLC1000Establishing Connection with Central Device

          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 24

          9 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt10 Open Microchip SmartConnect Application on Android or iOS device and tap START SCAN button

          Note  The device must appear in Microchip SmartConnect Application

          Figure 3-8 Microchip SmartConnect Application

          11 Terminal must display the following Log outputFigure 3-9 Log Output Window

          32 Managing GAP eventsThe management of the Bluetooth connection at the host MCU level is done through reception andhandling of events reported by the ATBTLC1000 These events are generated by ATBTLC1000 GAPGATT and L2CAP layers to notify the host about the ongoing Bluetooth interaction with other devices inits vicinity

          ATBTLC1000Establishing Connection with Central Device

          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 25

          To manage events coming from the ATBTLC1000 module the host driver must provide able_mgr_events_callback_handler function that allows registration of application callback functionto be executed on each event reported by the ATBTLC1000 module

          Prototype ndashbool ble_mgr_events_callback_handler(ble_mgr_event_cb_t event_cb_typeble_mgr_event_t event_typeconst voidble_event_handler)

          Description ndash Used by ProfileServiceApplication to register the Bluetooth Low Energy eventsrsquocallbacks

          Parameters ndash

          event_cb_type ndash types of actions to perform on callbacks can be either

          REGISTER_CALL_BACK or

          UNREGISTER_CALL_BACKevent_type ndash Any one of the event types can be used

          BLE_GAP_EVENT_TYPEBLE_GATT_CLIENT_EVENT_TYPEBLE_GATT_SERVER_EVENT_TYPEBLE_L2CAP_EVENT_TYPEBLE_GATT_HTPT_EVENT_TYPEBLE_DTM_EVENT_TYPEBLE_CUSTOM_EVENT_TYPEble_event_handler ndash pointer to handler list

          Structure ble_gap_event_cb_t defines the GAP callbacks Similarly structuresble_gatt_client_event_cb_t and ble_gatt_server_event_cb_t define the callbacks of GATTevents

          typedef struct ble_gap_event_cb BLE Undefined events received from ATBTLC1000 which is not handled in Libraryble_event_callback_t undefined BLE scan information contains the peer device scan information Refer ref at_ble_scan_info_tble_event_callback_t scan_info Once the BLE scan timeout or scan stop triggers the scan report event Refer ref at_ble_scan_report_tble_event_callback_t scan_report Advertisement complete event Refer ref at_ble_adv_cmp_evt_tble_event_callback_t advt_cmp Advertisement report in case of advertisement stopped due to advertisement timeout Refer ref at_ble_adv_report_tble_event_callback_t adv_report BLE device own random address changed event Refer ref at_ble_rand_addr_changed_tble_event_callback_t rand_addr_changed BLE connected event device connected to peer device Refer ref at_ble_connected_tble_event_callback_t connected BLE disconnected event device disconnected from peer device Refer ref at_ble_disconnected_tble_event_callback_t disconnected Connection parameter update done on peer device and own device Refer ref at_ble_conn_param_update_done_t

          ATBTLC1000Establishing Connection with Central Device

          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 26

          ble_event_callback_t conn_parameter_update_done Connection parameter update request from peer device Refer ref at_ble_conn_param_update_request_tble_event_callback_t conn_param_update_request Pair complete event as part of end of pairing process Refer ref at_ble_pair_done_tble_event_callback_t pair_done Pair request event from Central device Refer ref at_ble_pair_request_tble_event_callback_t pair_request Slave security request received from peer Peripheral device Refer ref at_ble_slave_sec_request_tble_event_callback_t slave_sec_request Pair Key request event from Peer central device Refer ref at_ble_pair_key_request_tble_event_callback_t pair_key_request encryption request comes from the peer device Needs to supply the bonding information which is stored earlier ref at_ble_encryption_request_tble_event_callback_t encryption_request encryption status changed event received from SMP once the encryption is started ref at_ble_encryption_status_changed_tble_event_callback_t encryption_status_changed Event triggered once the Resolve random address is resolved using supplied IRKs ref at_ble_resolv_rand_addr_status_tble_event_callback_t resolv_rand_addr_status Event is triggered once the connection signature information indication received ref at_ble_sign_counter_tble_event_callback_t sign_counters_ind Peer attribute information indication received Event ref at_ble_peer_att_info_ind_tble_event_callback_t peer_att_info_ind Peer device channel map received indication ref at_ble_channel_map_tble_event_callback_t con_channel_map_indble_gap_event_cb_t

          Note  Callback definition is application-specific If the application layer requires a specific event callbackthen the specific member of the structure is to be assigned with the address of the callback function

          In this assignment two callback functions on Connected and Disconnected GAP events are usedThis allows the application to restart the advertising process on Disconnect manage connectioninformation and startstop of sensor data update

          321 Handling of Connected and Disconnected GAP Events1 Open the startup_templatec file2 Define the following software flags as global variables in startup_templatec file volatile

          bool timer_flag = false and volatile bool connected_flag = false3 Declare and implement the following ble_connected_cb function in the

          startup_templatec file Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param)printf(n Assignment 22 Application connected )connected_flag = trueALL_UNUSED(param)return AT_BLE_SUCCESS

          4 Declare and implement the following ble_disconnected_cb function instartup_templatec file Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param)printf(n Assignment 22 Application disconnected )connected_flag = falsestart_advertisement()ALL_UNUSED(param)return AT_BLE_SUCCESS

          ATBTLC1000Establishing Connection with Central Device

          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 27

          5 Declare the following static GAP callback structure in ldquostartup_templatecrdquo filestatic const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTEDdisconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

          6 Add the following register_btlc1000_callbacks function in startup_templatec Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void) Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks)ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACKBLE_GAP_EVENT_TYPEampapp_gap_handle)if (ble_status = true)printf(nError when Registering ATBTLC1000 callbacks)

          7 Add the register_btlc1000_callbacks function call prior to start advertisement in theapplication main routineint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Gap Callbacks register_btlc1000_callbacks ( ) Start Advertising process start_advertisement() Register PrimaryIncluded service in case of GATT Server while(true) Write application task

          8 Add the ble_event_task function call in the project main loop to handle the different incomingevents from ATBTLC1000while(true)ble_event_task()

          9 Press button ltF7gt to compile the project and verify that no build error appear in the AtmelStudio output window

          ATBTLC1000Establishing Connection with Central Device

          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 28

          Figure 3-10 Atmel Studio Output Window

          10 Click ldquo rdquo to save the project ltCtrl+Sgt

          11 Click ldquo rdquo to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt and checkcorrect initialization of the ATBTLC1000

          12 Open the Microchip SmartConnect application on Androidtrade or iOS device13 Press the ltStart Scangt button and pair peripherals by selecting them in the device list (pass key

          123456)Note 

          1 Pairing event handling is carried out by ble_managerc Refer toble_pair_key_request_handler() for code implementation The default pass key of123456 is also fixed inside this function This can be changed here

          Figure 3-11 Console Log Window

          Note  After peripheral pairing no services information are displayed in Microchip SmartConnectapplication as no service is currently defined and started on peripheral side

          ATBTLC1000Establishing Connection with Central Device

          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 29

          4 SettingHandling of Pre-Defined ServiceThe management of services are done in the GATT layer of the ATBTLC1000 ROM coded Bluetooth LowEnergy Stack The GATT transactions are based on high-level nested objects called Profiles Servicesand Characteristics stored in SRAM memory of ATBTLC1000 device This assignment adds the pre-defined service of information service from ASF library

          Figure 4-1 ATBTLC1000 GATT Layers

          bull ProfilesProfiles are not available in the Bluetooth Low Energy peripheral they are simply a pre-definedcollection of services that have been compiled by either the Bluetooth SIG (adopted GATT basedprofile) or by the application developer (custom profiles) For example the Heart Rate Profilecombines the Heart Rate Service and the Device Information Service

          Note  The complete list of officially adopted GATT-based profiles is available on the BluetoothDeveloper Portal

          bull ServicesA service is a collection of data and associated behaviors which accomplish a particular function orfeature of a device or portions of a device A service may reference other primary or secondaryservices andor a set of characteristics that make up the service Each service distinguishes itselffrom other services by means of a unique numeric ID called as UUID which can be either 16-bit(for officially adopted Bluetooth Low Energy Services) or 128-bit (for custom services)

          Note  A full list of officially adopted services and their UUID are seen on the Bluetooth DeveloperPortal

          bull CharacteristicsA characteristic is the lowest level concept in GATT transactions It contains a single data point withdifferent attributes such as notify read or write capabilities Similar to Services each characteristiccan be distinguished by a SIG-defined adopted UUID (16-bit) or custom (128-bit) UUID This UUIDensures interoperability across Bluetooth Low Energy devices The characteristics are important tointeract with in a Bluetooth Low Energy network In addition to standard UUID the custom UUID isused in case of specific application When characteristics with custom UUID are used in a devicethen it will be interoperable only with those devices that support these characteristics with customUUID

          ATBTLC1000SettingHandling of Pre-Defined Service

          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 30

          In this assignment the following steps are added to the Host MCU application to set up and handle adevice information service within the ATBTLC1000 module The following steps are added to the startupproject

          bull Adding device info service component from ASFbull Configuring and loading the service

          Figure 4-2 Device Information Service

          41 Adding Device Info Service Component from ASF Wizard to ProjectTo use the ldquoofficially adopted GATT-based profilesrdquo from SIG ASF provides Bluetooth Low Energy servicecomponents including init functions that pre-define services in Host memory

          Note  Before starting this assignment be sure to follow the steps mentioned in 2 Creating the Projectand Initializing and 3 Establishing Connection with Central Device

          1 Click ASF gt ASF Wizard2 Search for ldquoBLE-Device Information Servicesrdquo and then click Add

          ATBTLC1000SettingHandling of Pre-Defined Service

          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 31

          Figure 4-3 Available Modules

          3 Now ldquoBLE-Device Information Servicesrdquo (component) appears in ldquoSelected ModulesrdquoFigure 4-4 Selected Modules

          4 Click Apply to add the component to the projectFigure 4-5 Adding the Modules to Project

          5 The ldquoDevice Information Servicerdquo component is added to the project and is confirmed bydevice_information folder added in Solution Explorer

          ATBTLC1000SettingHandling of Pre-Defined Service

          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 32

          Figure 4-6 Device Information Service Added to Project

          42 Configuring and Loading Device Information ServiceThe ATBTLC1000 Host driver provides a set of GATT functions that allows storing and updating theservices in ATBTLC1000 memories

          Prototype at_ble_status_t at_ble_primary_service_define(at_ble_uuid_t uuidat_ble_handle_t service_handleat_ble_included_service_t included_service_listuint16_t included_service_countat_ble_characteristic_t charactristic_listuint16_t charactristic_count)

          Description Defines a new primary service along with its included services and characteristics inATBTLC1000

          Parameters

          bull Uuid [In] ndash primary service UUIDbull service_handle [Out] ndash Service handle is returned herebull included_service_list [In] ndash an array of included service referencesbull included_service_count [In] ndash number of elements in included_service_listbull charactristic_list [InOut] ndash an array of characteristics included in the service this array

          is updated with respective characteristics handlesbull charactristic_count[In] ndash number of elements in charactristic_list

          Return Execution Status

          This function requires an argument as GATT description structure of the service that is implemented Thepreviously added Device Info service component provides Bluetooth Low Energy service middlewareincluding the init functions that predefine the services See below ldquodis_init_servicerdquo from device infoBLE service (device_infohc)

          Prototype ndash void dis_init_service(dis_gatt_service_handler_t device_info_serv)Description ndash Initialize the device information service handler in the host MCU memory

          Parameters ndash

          ATBTLC1000SettingHandling of Pre-Defined Service

          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 33

          bull device_info_serv [Inout] pointer to device info GATT description handler to beupdated

          Return None

          Here is a picture of GATT device info service descriptor definition in Host memory

          device_info_serv-gtserv_handle = 0device_info_serv-gtserv_uuidtype = AT_BLE_UUID_16device_info_serv-gtserv_uuiduuid[0] = (uint8_t) DIS_SERVICE_UUIDdevice_info_serv-gtserv_uuiduuid[1] = (uint8_t) (DIS_SERVICE_UUID gtgt 8)Characteristic Info for Manufacturer Name Stringdevice_info_serv-gtserv_chars[0]char_val_handle = 0 handle stored here device_info_serv-gtserv_chars[0]uuidtype = AT_BLE_UUID_16device_info_serv-gtserv_chars[0]uuiduuid[0] = (uint8_t) IS_CHAR_MANUFACTURER_NAME_UUID UUID Manufacturer Name String device_info_serv-gtserv_chars[0]uuiduuid[1] = (uint8_t) (DIS_CHAR_MANUFACTURER_NAME_UUID gtgt 8) UUID Manufacturer Name String device_info_serv-gtserv_chars[0]properties = AT_BLE_CHAR_READ Properties memcpy(char_valuemanufacturer_nameDEFAULT_MANUFACTURER_NAMEDIS_CHAR_MANUFACTURER_NAME_INIT_LEN)device_info_serv-gtserv_chars[0]init_value = char_valuemanufacturer_namedevice_info_serv-gtserv_chars[0]value_init_len = DIS_CHAR_MANUFACTURER_NAME_INIT_LENdevice_info_serv-gtserv_chars[0]value_max_len = DIS_CHAR_MANUFACTURER_NAME_MAX_LENif BLE_PAIR_ENABLEdevice_info_serv-gtserv_chars[0]value_permissions = AT_BLE_ATTR_READABLE_REQ_AUTHN_NO_AUTHR permissions elsedevice_info_serv-gtserv_chars[0]value_permissions = AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR permissions endifdevice_info_serv-gtserv_chars[0]user_desc = NULL user defined name device_info_serv-gtserv_chars[0]user_desc_len = 0device_info_serv-gtserv_chars[0]user_desc_max_len = 0device_info_serv-gtserv_chars[0]user_desc_permissions = AT_BLE_ATTR_NO_PERMISSIONS user description permissionsdevice_info_serv-gtserv_chars[0]client_config_permissions = AT_BLE_ATTR_NO_PERMISSIONS client config permissionsdevice_info_serm hdsv-gtserv_chars[0]server_config_permissions = AT_BLE_ATTR_NO_PERMISSIONS server config permissionsdevice_info_serv-gtserv_chars[0]user_desc_handle = 0 user desc handlesdevice_info_serv-gtserv_chars[0]client_config_handle = 0 client config handlesdevice_info_serv-gtserv_chars[0]server_config_handle = 0 server config handlesdevice_info_serv-gtserv_chars[0]presentation_format = NULL presentation format

          Note  In case of custom service the above definition initialization must be taken care of by thedeveloper

          421 Procedure to Configure and Load Device Info Service1 Include device info service header file (device_infoh) at the beginning of

          startup_templatec fileinclude ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehinclude device_infoh

          2 Define a device info service handler as global in startup_templatec file Serviceshandlers dis_gatt_service_handler_t dis_service_handler

          ATBTLC1000SettingHandling of Pre-Defined Service

          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 34

          3 Add dis_init_service and at_ble_primary_service_define functions as called abovethe advertisement start in main routine Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service)dis_init_service (ampdis_service_handler) Define the primary service in the GATT server database if ((dis_primary_service_define (ampdis_service_handler)) = AT_BLE_SUCCESS)printf(Device Information Service definition failed) Start Advertising process start_advertisement()

          4 Click to save the project ltCtrl+Sgt and compile the project by pressing button ltF7gt5 Verify that no build error appears in Atmel Studio output window

          Figure 4-7 Atmel Studio Output Window

          6 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt7 Open ldquoMicrochip SmartConnectrdquo application on Android or iOS device8 Press ltStart Scangt button and connect to peripheral

          Note  The device name is a characteristic and contains the name of the device This device namecan be read by the central device to know the name of the device in order to differentiate thedevices This is being set using at_ble_device_name_set()API The device name is set bydefault when ble_device_init is called and the value is pre-defined using BLE_DEVICE_NAMEThe device name can also be sent as part of advertisement payload to be same as the oneconfigured in at_ble_adv_data_set() API It is the responsibility of users to keep the devicename set in advertisement payload the same as that configured inat_ble_device_name_set()

          9 The Service must now be visible after pairing with peripheral under Microchip SmartConnectapplication

          ATBTLC1000SettingHandling of Pre-Defined Service

          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 35

          Figure 4-8 Service List in Microchip SmartConnect Application

          Note  If the pairing of ATBTLC1000 with Microchip Smart connect is not successful then removethe pairing information from mobile by selecting ldquoForget Devicerdquo from the mobile settings Thereason for this is that the mobile app stores the previous pairing information but the ATBTLC1000device lost the previous pairing information due to RESET since it was stored on temporary storage(RAM)

          10 The serial terminal must display the following log output windowFigure 4-9 Console Log Window

          ATBTLC1000SettingHandling of Pre-Defined Service

          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 36

          5 Setting up and Handling Custom ServiceThe previous assignment describes the handling of Bluetooth Low Energy SIG defined device infoservice which is the predefined service available in ASF component This assignment describes thecustom service So the service initialization needs to be implemented In the context of customizedenvironment service the following service description is pushed in ATBTLC1000 memory

          Figure 5-1 Custom Service

          Custom Environment Service Description

          bull UUID type ndash Custom UUID (128-bit)bull UUID ndash 1bc5d5a5-0200-a687-e511-3639c1ba5af0

          Characteristic 0 (Temperature)

          bull User Description ndash Temperaturebull UUID type ndash Custom UUID (128-bit)bull UUID ndash 1bc5d5a5-0200-a687-e511-3639d8ba5af0bull Properties ndash Read Notifybull Value permission ndash No authorization requiredbull Client config permission ndash No permissionbull Server config permission ndash No permission

          Note  In this definition UUIDs are generated randomly Custom servicescharacteristics are free to useany 128-bit UUID less than the base UUID There is no reserved space for vendors to use 16-bit or 32-bitUUIDs

          With this definition any temperature change is notified to the central The notify mechanism allows thecentral to know when the data changes When notify property of the Client Characteristic ConfigurationDescriptor is enabled by the central and the device writes the new value then this updated value isautomatically sent to the central through a notification The central is not required to send readcharacteristic commands explicitly to the peripheral (GATT server)

          To setup and handle the custom environment service in ATBTLC1000 module the following steps areadded to the Host MCU application

          bull Configure and load the custom servicebull Update Temperature characteristic and notify to the central devicebull Receive and handle notification from the Host device

          ATBTLC1000Setting up and Handling Custom Service

          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 37

          Figure 5-2 Custom Service Flowchart

          51 Configuring and Loading the Custom Environment ServiceThe ATBTLC1000 Host driver provides the following set of GATT functions that allows it to push andupdate the service descriptions in the ATBTLC1000 SRAM memory

          Note  Before starting this assignment be sure to follow the steps mentioned in 2 Creating the Projectand Initializing and 3 Establishing Connection with Central Device

          Prototype ndashat_ble_status_t at_ble_primary_service_define(at_ble_uuid_t uuidat_ble_handle_t service_handleat_ble_included_service_t included_service_listuint16_t included_service_countat_ble_characteristic_t charactristic_listuint16_t charactristic_count)

          Description ndash Defines a new primary service along with its included services and characteristics inATBTLC1000 module

          Parameters

          bull Uuid [In] ndash primary service UUIDbull service_handle [Out] ndash service handle is returned herebull included_service_list [In] ndash array of included service referencesbull included_service_count [In] ndash number of elements in included_service_listbull charactristic_list [InOut] ndash an array of characteristics included in the service this array

          is update with respective characteristics handlesbull charactristic_count[In] ndash number of elements in charactristic_list

          ATBTLC1000Setting up and Handling Custom Service

          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 38

          Return ndash Execution Status

          bull Characteristics ndashndash Characteristics definition is done through specific array of following

          ldquoat_ble_characteristic_trdquo structure instancestypedef structat_ble_handle_t char_val_handle Handler (returned during service initialisation)at_ble_uuid_t uuid Characteristic UUID (type and value)at_ble_char_properties_t propertiesCharac Properties (read write notify)uint8_t init_value initial valueuint16_t value_init_len initial value lengthuint16_t value_max_len value max lengthat_ble_attr_permissions_t value_permissions access authorization and authenticationuint8_t user_desc User descriptionuint16_t user_desc_len User description lengthuint16_t user_desc_max_len User description max lengthat_ble_char_presentation_t presentation_format Presentation formatat_ble_attr_permissions_t user_desc_permissions User description permissionat_ble_attr_permissions_t client_config_permissions client permissionat_ble_attr_permissions_t server_config_permissions server permissionat_ble_handle_t user_desc_handle description handlerat_ble_handle_t client_config_handle Client config handlerat_ble_handle_t server_config_handle Server config handler at_ble_characteristic_t

          511 Procedure to Configure and Load Custom Environment Service1 Define the following service UUID and characteristic UUID in startup_templatec file

          define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

          2 Define the following environment service handler and characteristics variable as global instartup_templatec file Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

          3 Add the following service initialization function custom_environment_service_init instartup_templatecvoid custom_environment_service_init(void) at_ble_uuid_t environment_service_uuiduint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUIDuint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperatureenvironment_service_characs[0]user_desc_len = 10environment_service_characs[0]user_desc_max_len = 10environment_service_characs[0]uuidtype = AT_BLE_UUID_128memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16)environment_service_characs[0]properties = AT_BLE_CHAR_READ |AT_BLE_CHAR_NOTIFYenvironment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature valueenvironment_service_characs[0]value_permissions =(AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuidampenvironment_service_handlerNULL0environment_service_characs1)=AT_BLE_SUCCESS)printf(n Assignment 41 Failed to Initialize custom environment service)

          ATBTLC1000Setting up and Handling Custom Service

          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 39

          elseprintf(n Assignment 41 Initialize custom environment service)

          4 Declare and implement the following GATT event callback functioncustom_char_changed_app_event in startup_templatec file If a client (central) enablesnotifications for a server the server (peripheral) receives an AT_BLE_CHARACTERISTIC_CHANGEDevent and this event callback is called Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

          5 Declare and implement the following custom_notification_confirmation_handlerfunction in startup_templatec file Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param)at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )paramif (event_param-gtstatus == AT_BLE_SUCCESS)printf(n Assignment 41Notification Successfully sent over the air) else printf(n Assignment 41Sending Notification over the air failed)return AT_BLE_SUCCESS

          6 Declare the following GATT server callback structure in startup_templatec file Thisassignment uses two GATT callbacksstatic const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handlercharacteristic_changed = custom_char_changed_app_event

          7 Add the following register_gatt_server_callbacks function in startup_templatec toregister GATT server callback for notification confirmation event Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks)ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACKBLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle)if (ble_status = true)printf(nError when Registering ATBTLC1000 callbacks)

          8 Add custom_environment_service_init and register_gatt_server_callbacksfunction calls prior to start advertisement in the application main routine to initialize custom serviceand to register the GATT server callbacksint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()

          ATBTLC1000Setting up and Handling Custom Service

          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 40

          endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks() Custom service init custom_environment_service_init ( ) Register Gatt server callbacks register_gatt_server_callbacks ( ) Start Advertising process start_advertisement()while(true)ble_event_task()

          9 Click to save the project ltCtrl+Sgt

          10 Compile the project by pressing button ltF7gt11 Verify that no build error appears in the Atmel Studio output window

          Figure 5-3 Atmel Studio Output Window

          12 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt13 Open the ldquoMicrochip SmartConnectrdquo application on Android or iOS device14 Connect and pair to the peripheral (pass key 123456)15 Custom service must now be visible after pairing with peripheral under Microchip SmartConnect

          application

          ATBTLC1000Setting up and Handling Custom Service

          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 41

          Figure 5-4 Service List in Microchip SmartConnect Application

          Note  Custom service is displayed as unknown service in the above figure as this service is not aSIG-defined service

          Figure 5-5 General Information

          16 Serial terminal client must display the following Log output

          ATBTLC1000Setting up and Handling Custom Service

          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 42

          Figure 5-6 Log Output Window

          52 Updating the Temperature CharacteristicIn the previous assignment the custom Temperature characteristic is defined with a notify attribute Thistype of attribute requires notification to be sent to central when a new characteristic value is availableThe update of any ldquonotifyrdquo characteristic value is based on following interaction between the Host MCUand the ATBTLC1000Figure 5-7 Characteristic Notification

          521 Setting a Characteristic Value ( at_ble_characteristic_value_set)Prototype ndashat_ble_status_t at_ble_characteristic_value_setat_ble_handle_t handleuint8_t valueuint16_t len)

          Description ndash Sets a characteristic value in ATBTLC1000 memory

          Parameters ndash

          ATBTLC1000Setting up and Handling Custom Service

          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 43

          bull handle [inout] ndash Pointer to Characteristic handle to be changedbull value [in] ndash New valuebull len [in] ndash Value length in bytes

          Return ndash Execution Status

          522 Sending a Notification (at_ble_notification_send)Prototype ndashat_ble_status_t at_ble_notification_send(at_ble_handle_t conn_handleat_ble_handle_t attr_handle)

          Description ndash Sends a Notification

          Parameters ndash

          bull conn_handle[in] ndash handle of the connection to be notifiedbull attr_handle [in] ndash handle of the attribute originating the notification

          Return ndash Execution Status

          523 Sending Temperature Information Once in Every 10 Seconds to Central1 Modify the following ldquotimer_callback_fnrdquo callback function from the startup_templatec

          filestatic void timer_callback_fn(void)timer_flag = true

          2 hw_timer_init()in main routine of startup_templatec initializes the hardware timer3 If a client (Central) enables the notifications for a server the server (Peripheral) receives an

          AT_BLE_CHARACTERISTIC_CHANGED event callback then start the periodic 10 second timer forsending the notification Add the following code in previously definedcustom_char_changed_app_event function Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))timer_flag = falsehw_timer_start(10)printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

          4 Declare the following Temperature_value global variable in startup_templatec staticuint8_t Temperature_value = 25 as static

          5 Add the following send_temperature_notification function in startup_templatec tosend temperature every 10 seconds Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++

          ATBTLC1000Setting up and Handling Custom Service

          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 44

          if(Temperature_value gt 75)Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set(environment_service_characs[0]char_val_handle(uint8_t )ampTemperature_valuesizeof(Temperature_value))ble_status = at_ble_notification_send(0environment_service_characs[0]char_val_handle)if(ble_status = AT_BLE_SUCCESS)printf(fail to send temperature update notification )

          6 Add the following code in main routine to send temperature data every 10 secondswhile (1) ble_event_task()if(connected_flag == true ampamp timer_flag == truetimer_flag = falsesend_temperature_notification()

          7 Click to save the project ltCtrl+Sgt

          8 Compile the project by pressing the button ltF7gt9 Verify that no build error appears in Atmel Studio output window

          Figure 5-8 Atmel Studio Output Window

          10 Click to program the project binary on the L21 Xplained XSTK11 Open ldquoMicrochip SmartConnectrdquo Application on Android or iOS device12 Connect and pair to the peripheral (pass key 123456)13 Click NOTIFY to start the notification14 Temperature information in HEX values must be displayed in Microchip SmartConnect application

          ATBTLC1000Setting up and Handling Custom Service

          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 45

          Figure 5-9 Notification Window

          15 Serial terminal must display the following log outputFigure 5-10 Log Output Window

          ATBTLC1000Setting up and Handling Custom Service

          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 46

          6 Appendix A Software Solution - Pre-Defined SvcThe following is the code implementation for handling of pre-defined service done in 4 SettingHandlingof Pre-Defined Service

          - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehinclude device_infoh

          volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false Services handlers dis_gatt_service_handler_t dis_service_handler

          static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

          void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

          Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

          Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

          static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

          Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void) Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks)

          ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 47

          ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

          timer callback function static void timer_callback_fn(void) Add timer callback functionality here

          void button_cb(void) Add button callback functionality here

          int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

          Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

          DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks()

          Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service) dis_init_service(ampdis_service_handler) Define the primary service in the GATT server database if((dis_primary_service_define(ampdis_service_handler)) = AT_BLE_SUCCESS) printf(Device Information Service definition failed)

          Start Advertising process start_advertisement() while(true) ble_event_task()

          ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 48

          7 Appendix B Software Solution - Custom ServiceThe following is the code implementation for handling of pre-defined service done in 5 Setting up andHandling Custom Service

          - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templateh

          volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false

          static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

          define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0

          define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

          Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

          void custom_environment_service_init(void) at_ble_uuid_t environment_service_uuid uint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUID uint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128 memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperature environment_service_characs[0]user_desc_len = 10 environment_service_characs[0]user_desc_max_len = 10 environment_service_characs[0]uuidtype = AT_BLE_UUID_128 memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16) environment_service_characs[0]properties = AT_BLE_CHAR_READ | AT_BLE_CHAR_NOTIFY environment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature value environment_service_characs[0]value_permissions = (AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuid ampenvironment_service_handlerNULL0 environment_service_characs1)=AT_BLE_SUCCESS) printf(n Assignment 41 Failed to Initialize custom environment service) else printf(n Assignment 41 Initialize custom environment service)

          Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param) at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )param if (event_param-gtstatus == AT_BLE_SUCCESS) printf(n Assignment 41Notification Successfully sent over the air)

          ATBTLC1000Appendix B Software Solution - Custom Service

          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 49

          else printf(n Assignment 41Sending Notification over the air failed) return AT_BLE_SUCCESS

          static at_ble_status_t custom_char_changed_app_event(void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle -gt char_new_value[0])) timer_flag = false hw_timer_start(10) printf(n Assignment 41Characteristic changed event) return AT_BLE_SUCCESS

          static const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handler characteristic_changed = custom_char_changed_app_event

          Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

          void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

          Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

          Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

          static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

          Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void)

          ATBTLC1000Appendix B Software Solution - Custom Service

          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 50

          Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

          timer callback function static void timer_callback_fn(void) Add timer callback functionality here timer_flag = true

          void button_cb(void) Add button callback functionality here

          static uint8_t Temperature_value = 25

          Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++ if(Temperature_value gt 75) Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set( environment_service_characs[0]char_val_handle (uint8_t )ampTemperature_value sizeof(Temperature_value)) ble_status = at_ble_notification_send(0 environment_service_characs[0]char_val_handle) if(ble_status = AT_BLE_SUCCESS) printf(fail to send temperature update notification )

          int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

          Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

          DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register Gap ATBTLC1000 Callbacks register_btlc1000_callbacks()

          Custom service init custom_environment_service_init()

          ATBTLC1000Appendix B Software Solution - Custom Service

          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 51

          Register Gatt server callback register_gatt_server_callbacks()

          Start Advertising process start_advertisement() while(true) ble_event_task() if(connected_flag == true ampamp timer_flag == true) timer_flag = false send_temperature_notification()

          ATBTLC1000Appendix B Software Solution - Custom Service

          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 52

          8 Document Revision HistoryRev B - 42018

          Section Changes

          Document Revised contents to match various Bluetooth Low Energy standard versions

          Rev A - 122017

          Section Changes

          Document Initial release

          ATBTLC1000Document Revision History

          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 53

          The Microchip Web Site

          Microchip provides online support via our web site at httpwwwmicrochipcom This web site is used asa means to make files and information easily available to customers Accessible by using your favoriteInternet browser the web site contains the following information

          bull Product Support ndash Data sheets and errata application notes and sample programs designresources userrsquos guides and hardware support documents latest software releases and archivedsoftware

          bull General Technical Support ndash Frequently Asked Questions (FAQ) technical support requestsonline discussion groups Microchip consultant program member listing

          bull Business of Microchip ndash Product selector and ordering guides latest Microchip press releaseslisting of seminars and events listings of Microchip sales offices distributors and factoryrepresentatives

          Customer Change Notification Service

          Microchiprsquos customer notification service helps keep customers current on Microchip productsSubscribers will receive e-mail notification whenever there are changes updates revisions or erratarelated to a specified product family or development tool of interest

          To register access the Microchip web site at httpwwwmicrochipcom Under ldquoSupportrdquo click onldquoCustomer Change Notificationrdquo and follow the registration instructions

          Customer Support

          Users of Microchip products can receive assistance through several channels

          bull Distributor or Representativebull Local Sales Officebull Field Application Engineer (FAE)bull Technical Support

          Customers should contact their distributor representative or Field Application Engineer (FAE) for supportLocal sales offices are also available to help customers A listing of sales offices and locations is includedin the back of this document

          Technical support is available through the web site at httpwwwmicrochipcomsupport

          Microchip Devices Code Protection Feature

          Note the following details of the code protection feature on Microchip devices

          bull Microchip products meet the specification contained in their particular Microchip Data Sheetbull Microchip believes that its family of products is one of the most secure families of its kind on the

          market today when used in the intended manner and under normal conditionsbull There are dishonest and possibly illegal methods used to breach the code protection feature All of

          these methods to our knowledge require using the Microchip products in a manner outside theoperating specifications contained in Microchiprsquos Data Sheets Most likely the person doing so isengaged in theft of intellectual property

          bull Microchip is willing to work with the customer who is concerned about the integrity of their code

          ATBTLC1000

          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 54

          bull Neither Microchip nor any other semiconductor manufacturer can guarantee the security of theircode Code protection does not mean that we are guaranteeing the product as ldquounbreakablerdquo

          Code protection is constantly evolving We at Microchip are committed to continuously improving thecode protection features of our products Attempts to break Microchiprsquos code protection feature may be aviolation of the Digital Millennium Copyright Act If such acts allow unauthorized access to your softwareor other copyrighted work you may have a right to sue for relief under that Act

          Legal Notice

          Information contained in this publication regarding device applications and the like is provided only foryour convenience and may be superseded by updates It is your responsibility to ensure that yourapplication meets with your specifications MICROCHIP MAKES NO REPRESENTATIONS ORWARRANTIES OF ANY KIND WHETHER EXPRESS OR IMPLIED WRITTEN OR ORAL STATUTORYOR OTHERWISE RELATED TO THE INFORMATION INCLUDING BUT NOT LIMITED TO ITSCONDITION QUALITY PERFORMANCE MERCHANTABILITY OR FITNESS FOR PURPOSEMicrochip disclaims all liability arising from this information and its use Use of Microchip devices in lifesupport andor safety applications is entirely at the buyerrsquos risk and the buyer agrees to defendindemnify and hold harmless Microchip from any and all damages claims suits or expenses resultingfrom such use No licenses are conveyed implicitly or otherwise under any Microchip intellectualproperty rights unless otherwise stated

          Trademarks

          The Microchip name and logo the Microchip logo AnyRate AVR AVR logo AVR Freaks BeaconThingsBitCloud CryptoMemory CryptoRF dsPIC FlashFlex flexPWR Heldo JukeBlox KeeLoq KeeLoq logoKleer LANCheck LINK MD maXStylus maXTouch MediaLB megaAVR MOST MOST logo MPLABOptoLyzer PIC picoPower PICSTART PIC32 logo Prochip Designer QTouch RightTouch SAM-BASpyNIC SST SST Logo SuperFlash tinyAVR UNIO and XMEGA are registered trademarks ofMicrochip Technology Incorporated in the USA and other countries

          ClockWorks The Embedded Control Solutions Company EtherSynch Hyper Speed Control HyperLightLoad IntelliMOS mTouch Precision Edge and Quiet-Wire are registered trademarks of MicrochipTechnology Incorporated in the USA

          Adjacent Key Suppression AKS Analog-for-the-Digital Age Any Capacitor AnyIn AnyOut BodyComchipKIT chipKIT logo CodeGuard CryptoAuthentication CryptoCompanion CryptoControllerdsPICDEM dsPICDEMnet Dynamic Average Matching DAM ECAN EtherGREEN In-Circuit SerialProgramming ICSP Inter-Chip Connectivity JitterBlocker KleerNet KleerNet logo Mindi MiWimotorBench MPASM MPF MPLAB Certified logo MPLIB MPLINK MultiTRAK NetDetach OmniscientCode Generation PICDEM PICDEMnet PICkit PICtail PureSilicon QMatrix RightTouch logo REALICE Ripple Blocker SAM-ICE Serial Quad IO SMART-IS SQI SuperSwitcher SuperSwitcher II TotalEndurance TSHARC USBCheck VariSense ViewSpan WiperLock Wireless DNA and ZENA aretrademarks of Microchip Technology Incorporated in the USA and other countries

          SQTP is a service mark of Microchip Technology Incorporated in the USA

          Silicon Storage Technology is a registered trademark of Microchip Technology Inc in other countries

          GestIC is a registered trademark of Microchip Technology Germany II GmbH amp Co KG a subsidiary ofMicrochip Technology Inc in other countries

          All other trademarks mentioned herein are property of their respective companies

          ATBTLC1000

          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 55

          copy 2018 Microchip Technology Incorporated Printed in the USA All Rights Reserved

          ISBN 978-1-5224-2921-0

          Quality Management System Certified by DNV

          ISOTS 16949Microchip received ISOTS-169492009 certification for its worldwide headquarters design and waferfabrication facilities in Chandler and Tempe Arizona Gresham Oregon and design centers in Californiaand India The Companyrsquos quality system processes and procedures are for its PICreg MCUs and dsPICreg

          DSCs KEELOQreg code hopping devices Serial EEPROMs microperipherals nonvolatile memory andanalog products In addition Microchiprsquos quality system for the design and manufacture of developmentsystems is ISO 90012000 certified

          ATBTLC1000

          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 56

          AMERICAS ASIAPACIFIC ASIAPACIFIC EUROPECorporate Office2355 West Chandler BlvdChandler AZ 85224-6199Tel 480-792-7200Fax 480-792-7277Technical SupporthttpwwwmicrochipcomsupportWeb AddresswwwmicrochipcomAtlantaDuluth GATel 678-957-9614Fax 678-957-1455Austin TXTel 512-257-3370BostonWestborough MATel 774-760-0087Fax 774-760-0088ChicagoItasca ILTel 630-285-0071Fax 630-285-0075DallasAddison TXTel 972-818-7423Fax 972-818-2924DetroitNovi MITel 248-848-4000Houston TXTel 281-894-5983IndianapolisNoblesville INTel 317-773-8323Fax 317-773-5453Tel 317-536-2380Los AngelesMission Viejo CATel 949-462-9523Fax 949-462-9608Tel 951-273-7800Raleigh NCTel 919-844-7510New York NYTel 631-435-6000San Jose CATel 408-735-9110Tel 408-436-4270Canada - TorontoTel 905-695-1980Fax 905-695-2078

          Australia - SydneyTel 61-2-9868-6733China - BeijingTel 86-10-8569-7000China - ChengduTel 86-28-8665-5511China - ChongqingTel 86-23-8980-9588China - DongguanTel 86-769-8702-9880China - GuangzhouTel 86-20-8755-8029China - HangzhouTel 86-571-8792-8115China - Hong Kong SARTel 852-2943-5100China - NanjingTel 86-25-8473-2460China - QingdaoTel 86-532-8502-7355China - ShanghaiTel 86-21-3326-8000China - ShenyangTel 86-24-2334-2829China - ShenzhenTel 86-755-8864-2200China - SuzhouTel 86-186-6233-1526China - WuhanTel 86-27-5980-5300China - XianTel 86-29-8833-7252China - XiamenTel 86-592-2388138China - ZhuhaiTel 86-756-3210040

          India - BangaloreTel 91-80-3090-4444India - New DelhiTel 91-11-4160-8631India - PuneTel 91-20-4121-0141Japan - OsakaTel 81-6-6152-7160Japan - TokyoTel 81-3-6880- 3770Korea - DaeguTel 82-53-744-4301Korea - SeoulTel 82-2-554-7200Malaysia - Kuala LumpurTel 60-3-7651-7906Malaysia - PenangTel 60-4-227-8870Philippines - ManilaTel 63-2-634-9065SingaporeTel 65-6334-8870Taiwan - Hsin ChuTel 886-3-577-8366Taiwan - KaohsiungTel 886-7-213-7830Taiwan - TaipeiTel 886-2-2508-8600Thailand - BangkokTel 66-2-694-1351Vietnam - Ho Chi MinhTel 84-28-5448-2100

          Austria - WelsTel 43-7242-2244-39Fax 43-7242-2244-393Denmark - CopenhagenTel 45-4450-2828Fax 45-4485-2829Finland - EspooTel 358-9-4520-820France - ParisTel 33-1-69-53-63-20Fax 33-1-69-30-90-79Germany - GarchingTel 49-8931-9700Germany - HaanTel 49-2129-3766400Germany - HeilbronnTel 49-7131-67-3636Germany - KarlsruheTel 49-721-625370Germany - MunichTel 49-89-627-144-0Fax 49-89-627-144-44Germany - RosenheimTel 49-8031-354-560Israel - RarsquoananaTel 972-9-744-7705Italy - MilanTel 39-0331-742611Fax 39-0331-466781Italy - PadovaTel 39-049-7625286Netherlands - DrunenTel 31-416-690399Fax 31-416-690340Norway - TrondheimTel 47-7289-7561Poland - WarsawTel 48-22-3325737Romania - BucharestTel 40-21-407-87-50Spain - MadridTel 34-91-708-08-90Fax 34-91-708-08-91Sweden - GothenbergTel 46-31-704-60-40Sweden - StockholmTel 46-8-5090-4654UK - WokinghamTel 44-118-921-5800Fax 44-118-921-5820

          Worldwide Sales and Service

          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 57

          • Introduction
          • Table of Contents
          • 1 Getting Started
            • 11 Software Prerequisites
              • 111 Installation Steps of Atmel Studio 7
                • 12 Software Setup
                  • 121 Installation of Microchip SmartConnect application on a Mobile device
                    • 13 ATBTLC1000 Embedded Firmware
                    • 14 ATBTLC1000 Host Software API
                    • 15 Hardware Prerequisites
                      • 151 SMARTtrade SAM L21 Xplained Pro
                      • 152 ATBTLC1000ZR Xplained Pro Extension board
                        • 16 Hardware Setup
                          • 2 Creating the Project and Initializing
                            • 21 Creating Project from ASF
                            • 22 Configuring ASF for ATBTLC1000-ZR
                            • 23 Compiling and Testing the Project
                              • 3 Establishing Connection with Central Device
                                • 31 Configuring and Starting the Advertisement Process
                                  • 311 Flags (AD Type 0x00)
                                  • 312 Available Service UUID (AD Types 0x02 to 0x07)
                                  • 313 Device Name (AD Types 0x08 to 0x09)
                                    • 3131 Setting the Advertisement Payload (ble_advertisement_data_set)
                                    • 3132 Starting the Advertisement Process (at_ble_adv_start)
                                      • 314 Advertisement Process
                                        • 3141 Starting the Advertisement Process
                                            • 32 Managing GAP events
                                              • 321 Handling of Connected and Disconnected GAP Events
                                                  • 4 SettingHandling of Pre-Defined Service
                                                    • 41 Adding Device Info Service Component from ASF Wizard to Project
                                                    • 42 Configuring and Loading Device Information Service
                                                      • 421 Procedure to Configure and Load Device Info Service
                                                          • 5 Setting up and Handling Custom Service
                                                            • 51 Configuring and Loading the Custom Environment Service
                                                              • 511 Procedure to Configure and Load Custom Environment Service
                                                                • 52 Updating the Temperature Characteristic
                                                                  • 521 Setting a Characteristic Value ( at_ble_characteristic_value_set)
                                                                  • 522 Sending a Notification (at_ble_notification_send)
                                                                  • 523 Sending Temperature Information Once in Every 10 Seconds to Central
                                                                      • 6 Appendix A Software Solution - Pre-Defined Svc
                                                                      • 7 Appendix B Software Solution - Custom Service
                                                                      • 8 Document Revision History
                                                                      • The Microchip Web Site
                                                                      • Customer Change Notification Service
                                                                      • Customer Support
                                                                      • Microchip Devices Code Protection Feature
                                                                      • Legal Notice
                                                                      • Trademarks
                                                                      • Quality Management System Certified by DNV
                                                                      • Worldwide Sales and Service

            Figure 1-2 Host Software API

            Figure 1-3 BluSDK File Architecture

            The API operation relies on a request-response mechanism The specific requests are sent toATBTLC1000 through dedicated API function call The event messages are then returned by theATBTLC1000 on request processing or on specific Bluetooth Low Energy events These event messagesare to be handled by the host device according to the user application requirements The following figureillustrates a typical Bluetooth Low Energy peripheral application flowchart

            ATBTLC1000Getting Started

            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 6

            Figure 1-4 Bluetooth Low Energy Peripheral Application Flowchart

            WARNING The user application must be non-blocking to ensure that the Bluetooth Low Energy events arehandled in time

            15 Hardware PrerequisitesThis document uses the ATBTLC1000ZR-XSTK kit The ATBTLC1000ZR-XSTK kit is comprised of theSAM L21 Xplained Pro (XPRO) and ATBTLC1000ZR XPRO extension board The following sectionsprovide an overview of these kits and their features

            151 SMARTtrade SAM L21 Xplained ProThe SMARTtrade SAM L21 Xplained Pro evaluation kit is used to evaluate the ATSAML21J18Bmicrocontroller This kit includes an on-board embedded debugger to program and debugATSAML21J18B The kit also contains an on-board current measurement circuitry which enables theuser to measure current profile over time without any external tools The connection with any XplainedPro modules or external component is possible through available external connectors which makes theboard perfect for prototyping the low-power applications

            ATBTLC1000Getting Started

            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 7

            Figure 1-5 SAM L21 Xplained Pro Module

            152 ATBTLC1000ZR Xplained Pro Extension boardThe ATBTLC1000ZR Xplained Pro extension evaluation kit is Bluetooth Low Energy SoC ATBTLC1000-ZR110CA module This extension is plugged to any of the supported host MCU Xplained Pro evaluationboards to quickly add Bluetooth Low Energy connectivity to the platform This kit provides easy access tothe features of the ATBTLC1000-ZR110CA Bluetooth Low Energy module and illustrates how to integratethe device in a custom design which is supported by the Atmel Studio integrated development platform

            ATBTLC1000Getting Started

            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 8

            Figure 1-6 ATBTLC1000ZR Xpro Board

            The ATBTLC1000ZR Xplained Pro extension board contains

            bull ATBLTC1000-ZR110CA Module ndash Bluetooth Low Energy module with 24 GHz Bluetooth LowEnergy ATBTLC1000-XR1100A SiP

            bull AT30TSE758A Digital Temperature Sensor ndash Integrated temperature sensor with nonvolatileregisters and serial EEPROM Compatible with two-wire (I2C) and SMBus serial interfaces

            bull Current Measurement Header ndash Allows measurement of the current consumption of the board Itmust be closed to enable power to the ATBTLC1000-ZR110CA module

            16 Hardware Setup1 Ensure that ATBTLC1000ZR-XPRO power consumption header is closed and that jumpers are

            placed on pins 2 to 3 of headers J105 J106 J107 and J108 as shown in the following figure

            ATBTLC1000Getting Started

            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 9

            Figure 1-7 ATBTLC1000ZR-XPRO Extension

            2 Connect the ATBTLC1000ZR-XPRO extension to EXT1 of SAM L21 XPRO as illustrated in thefollowing figureFigure 1-8 ATBTLC1000ZR-XPRO Extension connected with SAM L21 XPRO

            3 Connect the board to PC using the ldquoDebug USB ConnectorrdquoFigure 1-9 SAM L21 XPRO Connection to PC

            ATBTLC1000Getting Started

            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 10

            4 Now the Hardware is ready for development

            ATBTLC1000Getting Started

            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 11

            2 Creating the Project and InitializingThis chapter provides the process of creating an application startup project using Atmel Studio Prior tocreating a project the user must know hardware architecture and software requirements to configuredrivers

            The hardware connection between the SAM L21 XPRO and the ATBTLC1000ZR XPRO board isillustrated in following figure This SAM L21 board is used as host MCUFigure 2-1 ATBTLC1000ZR Xpro Board Connection with SAM L21

            Note  For more details refer to module datasheet and XPRO board design documentation

            21 Creating Project from ASFAdvanced Software Framework has a pre-configured Bluetooth Low Energy Startup template project thatincludes Bluetooth Low Energy software API for Host and ATBTLC1000 and their peripheral driverdependencies This is used as starting project for any Bluetooth Low Energy project development

            To create the project follow the steps below

            1 Search for the ldquoBLE-Startup Templaterdquo from the File gt New gt Example Project menu in AtmelStudio

            ATBTLC1000Creating the Project and Initializing

            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 12

            Figure 2-2 Advanced Software Framework_New Example Project

            Note  ATBTLC1000SAMB11 related projects are prefixed with ldquoBLErdquo making it easier to filter theproject in the dialogue box

            2 Select the appropriate ldquoBLE-Startup Templaterdquo project corresponding to the intended Host MCUXplained Pro board and then press OK button to import the BLE startup template project SelectldquoBLE-Startup Template ndash SAM L21 Xplained Pro SAML21J18Brdquo for this hands-onNote  Rev B XPRO boards can be identified by SAML21J18B silk screen marking below SAML21MCU

            3 The BLE startup project is now created and loaded in Atmel StudioFigure 2-3 Startup_Template Project

            ATBTLC1000Creating the Project and Initializing

            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 13

            Note  The main project routine of ldquoStartup Template projectrdquo already includes host MCU low levelinitialization BLE and ATBTLC1000 initialization The added ASF components in project can beviewed from ldquoASFgtASF Wizardrdquo Select the created project from Project drop down box

            Figure 2-4 ASF Wizard Window

            ndash BLE_STACK Platform Interface ndash Core manager of Bluetooth Low Energy Host API Itmanages ATBTLC1000 device initialization GAP and GATT events

            ndash Timer Driver ndash Task timer functionality by using a Timer Counter (TC) or Timer Counter forControl (TCC) peripheral

            ndash Console UART ndash Universal Asynchronous ReceiverTransmitter (UART) communication insynchronousblocking mode

            ndash Generic Board Support ndash Host MCU Board specific initializationndash System Drivers ndash Select MCUrsquos System peripheral drivers These drivers are included by

            default in ASF projects and manage the clocks and oscillator of the system4 The main routine contains the MCU low level initialization and ATBTLC1000 initialization The

            following figure illustrates the flowchart of the main routine

            ATBTLC1000Creating the Project and Initializing

            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 14

            Figure 2-5 Main Routine Flowchart

            22 Configuring ASF for ATBTLC1000-ZR1 The default ldquoStartup Template Projectrdquo is configured for ATBTLC1000-MR module with 6-Wire

            mode2 Navigate to Project properties Project gt Project properties gt Toolchain gt ARMGNU C Compiler gt

            Symbols3 The ATBTLC1000ZR-XSTK kit uses the ATBTLC1000-ZR110CA module Change symbol

            BLE_MODULE to BTLC1000_ZR and enable UART_FLOWCONTROL_4WIRE_MODE forATBTLC1000-ZR module as shown in the figure belowFigure 2-6 Startup Template Project Window

            Note  This configuration change is not required for ATBTLC1000-MR module

            ATBTLC1000Creating the Project and Initializing

            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 15

            23 Compiling and Testing the Project

            1 Click the ldquo rdquo button ltF7gt to compile the project2 Verify that no build error appears in Atmel Studio output window

            Figure 2-7 Atmel Studio Output Window

            3 Connect the SAM L21 XPRO to PC (if not already done)4 To access the project properties go to Project gt

            STARTUP_TEMPLATE_SAML21_XPLAINED_PRO_B1 PropertiesFigure 2-8 Compiling the Project

            5 In project properties click the Tool tab and select the EDBG of SAM L21 Xplained Pro board asdebuggerprogrammerFigure 2-9 Selection of DebuggerProgrammer

            6 Open any Terminal application (for example TeraTerm) Select the COM port enumerated on thePC and set the following parameters

            ndash EDBG associated COM Port (Check Windows Device Manager)

            ATBTLC1000Creating the Project and Initializing

            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 16

            ndash Baudrate 115200ndash Parity Nonendash One Stop bitndash Enable Hardware Flow Control

            7 Click to save the project ltCtrl+Sgt

            8 Click rdquo to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt9 The initialization of the ATBTLC1000ZR module must return the Bluetooth Device Address and

            Address typeFigure 2-10 Console Log Window

            Note 1 If initialization fails make sure to verify the hardware configuration is aligned with the

            description refer to 16 Hardware Setup2 The initialization of ATBTLC1000 takes few seconds due to patch download process

            ATBTLC1000Creating the Project and Initializing

            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 17

            3 Establishing Connection with Central DeviceThe Bluetooth Low Energy connectivity is added to the application that is used to connect with theBluetooth Low Energy central The first step is about the management of Bluetooth connection with acentral device When using ATBTLC1000 device this process is managed by dedicated API function callsassociated with ATBTLC1000 events handling

            The interaction between Host MCU ATBTLC1000 and Bluetooth Low Energy central during connectionestablishment is as follows

            Figure 3-1 Establishing Connection with Central Device

            On host MCU side the management of the Bluetooth connection is performed through three main steps1 GAP callback registration2 Advertisement configuration3 ATBTLC1000 event handling

            In the existing project main routine the integration of these steps are highlighted in red in the followingflowchart

            ATBTLC1000Establishing Connection with Central Device

            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 18

            Figure 3-2 Main Routine Flow Chart

            31 Configuring and Starting the Advertisement ProcessThe Bluetooth Low Energy devices transmit advertisement packets to show their presence to nearbydevices The advertisement packet is sent periodically at a time interval defined by variableldquoadvintervalrdquo defined in Bluetooth SIG specification To avoid any collision with other wireless networksuch as Wi-Fireg a channel change is performed for each advertisement packet sent (data frequencyhopping) as illustrated in the following figureFigure 3-3 Advertisement Process

            During advertisement the payload structure to be sent differs from application to application and is set byusing encapsulated packet data unit type information (PDU_TYPE)

            ATBTLC1000Establishing Connection with Central Device

            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 19

            Figure 3-4 PDU Advertising

            The following table lists the different PDU types used according to device role

            Advertising event types (PDU_TYPE) Broadcaster Observer Peripheral Central

            Connectible undirected event (ADV_IND) Excluded Excluded Mandatory Excluded

            Connectible directed event(ADV_DIRECT_IND) Excluded Excluded Optional Excluded

            Non-connectible undirected event(ADV_NONCONN_IND) Mandatory Excluded Optional Excluded

            Scannable undirected event (ADV_SCAN_IND) Optional Excluded Optional Excluded

            As our device acts as a Bluetooth Low Energy peripheral the connectable undirected event (ADV_IND)advertising type is used See the following description about the ADV_IND advertisement packetFigure 3-5 ADV_IND Advertisement Packet

            The ADV_IND payload contains different Advertisement Data types (AD0 - ADn) which provide specificinformation to the central device such as device short name Tx power level and list of availableservices UUIDs The number of advertisement data types that can be added to the advertisementpayload are limited by the advertisement payload size of 31 octets

            Following is a list of advertisement data types that are commonly found in ADV_IND payload

            ATBTLC1000Establishing Connection with Central Device

            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 20

            311 Flags (AD Type 0x00)The flags describe the basic device capability such as BLE support BLE discoverable mode BREDRsupport and simultaneous BRED

            312 Available Service UUID (AD Types 0x02 to 0x07)The Bluetooth Low Energy advertisement payloads are limited to 31 bytes Therefore only two 128-bitUUID values can be added to the payload For this purpose the specific AD types describe the length ofthe advertised UUID and provide information as to whether the payload contains a incompletecompletelist of UUID supported by the GATT server

            bull 0x02 - Incomplete list of 16-bit UUIDs (adopted GATT services)bull 0x03 - Complete list of 16-bit UUIDs (adopted GATT services)bull 0x06 - Incomplete list of 128-bit UUIDs (custom GATT services)bull 0x07 - Complete list of 128-bit UUIDs (custom GATT services)

            Note  When a 16-bit UUID is transmitted only the unique 2-byte value is sent The client knows that it isrequired to be injected into the base UUID For example the Health Thermometer Service is assigned as0x1809 so its equivalent UUID is 00001809-0000-1000-8000-00805F9B34FB

            313 Device Name (AD Types 0x08 to 0x09)This AD type field is used to advertise the Local name of device in the network The Local name datatype value indicates if the name is complete or shortened If the name is shortened the complete namecan be read after the connection is established

            bull 0x08 - Shortened Local Namebull 0x09 - Complete Local Name

            Note 1 A shortened name contains only continuous characters from the beginning of the full name For

            example if the device name is BT_Device_Name then the shortened name can beBT_Device or BT_Dev

            2 Complete data type list are available at httpswwwbluetoothcomspecificationsassigned-numbersgeneric-access-profile

            For management of advertisement process and cover the different configurations specified by SIG theATBTLC1000 Host driver provides the two functions elaborated in the following sections

            In the application use these two functions to setup the following ADV_IN type payloadFigure 3-6 ADV_IN Type Payload Process

            ATBTLC1000Establishing Connection with Central Device

            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 21

            3131 Setting the Advertisement Payload (ble_advertisement_data_set)Prototype ndashat_ble_status_t at_ble_adv_data_set (uint8_t const const adv_datauint8_t adv_data_lenuint8_t const const scan_resp_datauint8_t scan_response_data_len)

            Description ndash Set clear or update the advertisement and scan response data

            Parameters ndash

            bull adv_data ndash Raw data to be placed in advertisement packetbull adv_data_len ndash Data length for adv_data Max size 28 bytes (3 bytes are reserved to set

            advertising AD type flags based on the selected Advertising mode and the user is not required toconfigure AD type flags in the advertisement payload)

            bull scan_resp_data ndash Raw data to be placed in the scan response packet If NULL no changes aremade to the current scan response packet data

            bull scan_response_data_len ndash Data length for scan_resp_data Max size 31 bytes

            Return ndash Execution Status

            This function requires a parameter raw adv_data to be sent to central Following is an example of itsdefinition

            static uint8_t adv_data[] = 0x11 AD1 length = 170x03 AD1 Type = Complete list of 128-bit UUIDs0x1b0xc50xd50xa50x020x000xa60x87 AD1 = UUID MSBs0xe50x110x360x390xc00xba0x5a0xf00x0A AD2 Length = 100x09 AD2 Type = Complete local NamelsquoMrsquorsquoyrsquorsquo_rsquorsquoDrsquorsquoErsquorsquoVrsquo AD2 = ldquoMy_DEVrdquo

            3132 Starting the Advertisement Process (at_ble_adv_start)Prototype ndashat_ble_status_t at_ble_adv_start (at_ble_adv_type_t typeat_ble_adv_mode_t modeat_ble_addr_t peer_addrat_ble_filter_type_t filtereduint16_t intervaluint16_t timeoutbool disable_randomness)

            Description ndash Start advertisement process

            Parameters ndash

            bull type ndash Advertising type to be used can bendash AT_BLE_ADV_TYPE_UNDIRECTEDndash AT_BLE_ADV_TYPE_DIRECTEDndash AT_BLE_ADV_TYPE_SCANNABLE_UNDIRECTEDndash AT_BLE_ADV_TYPE_NONCONN_UNDIRECTEDndash AT_BLE_ADV_TYPE_DIRECTED_LDCndash AT_BLE_ADV_TYPE_SCAN_RESPONSE

            bull mode ndash Advertising mode to be used can be

            ATBTLC1000Establishing Connection with Central Device

            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 22

            ndash AT_BLE_ADV_NON_DISCOVERABLEndash AT_BLE_ADV_GEN_DISCOVERABLEndash AT_BLE_ADV_LIM_DISCOVERABLEndash AT_BLE_ADV_BROADCASTER_MODE

            bull peer_addr ndash Specify peer address when advertising type is AT_BLE_ADV_TYPE_DIRECTEDbull filtered ndash

            ndash AT_BLE_ADV_FP_ANY ndash Allow scan and connection requests from anyonendash AT_BLE_ADV_FP_FILTER_SCANREQ ndash Allow scan request from White List devices onlyndash AT_BLE_ADV_FP_FILTER_CONNREQ ndash Allow connection request from White List devices

            onlyndash AT_BLE_ADV_FP_FILTER_BOTH ndash Allow scan and connection requests from White List

            devices onlybull interval ndash Advertisement interval (in 0625 ms units)bull timeout ndash Advertising timeout between 0x0001 and 0x028F in scale of seconds This parameter

            must be set to 0 if type equals AT_BLE_ADV_TYPE_DIRECTEDbull disable_randomness ndash When disabled advertisements are performed at the exact interval

            without adding random 10 ms tempo

            Return ndash Execution Status

            314 Advertisement ProcessIn this assignment the advertisement process is performed in the following configuration

            bull Undirected (Type AT_BLE_ADV_TYPE_UNDIRECTED)bull Discoverable (Mode AT_BLE_ADV_GEN_DISCOVERABLE)bull No peer Address (peer_addr = NULL)bull No filtering (filtered = AT_BLE_ADV_FP_ANY)bull Advertisement interval 1s (interval = 1600)bull Maximum timeout (timeout 655)bull Randomness enabled (disable_randomness = FALSE)

            3141 Starting the Advertisement Process1 Open startup_templatec file2 Declare the following ble_status global variable in startup_templatec as volatile

            include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehvolatile at_ble_status_t ble_status

            3 Declare the following adv_data global variable in startup_templatec as staticstatic uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD)0x09 AD2 Type = Complete local Name

            ATBTLC1000Establishing Connection with Central Device

            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 23

            My_SENS AD2 = ldquoMy_SENSrdquo

            Note 1 The name of the device is to be changed (AD2 field)2 According to the new name AD2 length must be adapted to new AD2 content

            4 Add the following start_advertisement function in startup_templatec prototype for thefunction void start_advertisement (void) also this can be added to avoid warningsvoid start_advertisement (void)printf(n Assignment 21 Start Advertisement)Set advertisement datable_status = at_ble_adv_data_set(adv_datasizeof(adv_data)NULL0)Start Advertisementble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550)if(ble_status = AT_BLE_SUCCESS)printf(n Failed to start advertisement)

            5 Start the advertisement process by adding the following highlighted code to the application mainroutineint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Start Advertising process start_advertisement() Register PrimaryIncluded service in case of GATT Server while(true) Write application task

            6 Click to save the project ltCtrl+Sgt

            7 Click button to compile the project ltF7gt8 Verify that no build error appears in Atmel Studio output window

            Figure 3-7 Atmel Studio Output Window

            ATBTLC1000Establishing Connection with Central Device

            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 24

            9 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt10 Open Microchip SmartConnect Application on Android or iOS device and tap START SCAN button

            Note  The device must appear in Microchip SmartConnect Application

            Figure 3-8 Microchip SmartConnect Application

            11 Terminal must display the following Log outputFigure 3-9 Log Output Window

            32 Managing GAP eventsThe management of the Bluetooth connection at the host MCU level is done through reception andhandling of events reported by the ATBTLC1000 These events are generated by ATBTLC1000 GAPGATT and L2CAP layers to notify the host about the ongoing Bluetooth interaction with other devices inits vicinity

            ATBTLC1000Establishing Connection with Central Device

            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 25

            To manage events coming from the ATBTLC1000 module the host driver must provide able_mgr_events_callback_handler function that allows registration of application callback functionto be executed on each event reported by the ATBTLC1000 module

            Prototype ndashbool ble_mgr_events_callback_handler(ble_mgr_event_cb_t event_cb_typeble_mgr_event_t event_typeconst voidble_event_handler)

            Description ndash Used by ProfileServiceApplication to register the Bluetooth Low Energy eventsrsquocallbacks

            Parameters ndash

            event_cb_type ndash types of actions to perform on callbacks can be either

            REGISTER_CALL_BACK or

            UNREGISTER_CALL_BACKevent_type ndash Any one of the event types can be used

            BLE_GAP_EVENT_TYPEBLE_GATT_CLIENT_EVENT_TYPEBLE_GATT_SERVER_EVENT_TYPEBLE_L2CAP_EVENT_TYPEBLE_GATT_HTPT_EVENT_TYPEBLE_DTM_EVENT_TYPEBLE_CUSTOM_EVENT_TYPEble_event_handler ndash pointer to handler list

            Structure ble_gap_event_cb_t defines the GAP callbacks Similarly structuresble_gatt_client_event_cb_t and ble_gatt_server_event_cb_t define the callbacks of GATTevents

            typedef struct ble_gap_event_cb BLE Undefined events received from ATBTLC1000 which is not handled in Libraryble_event_callback_t undefined BLE scan information contains the peer device scan information Refer ref at_ble_scan_info_tble_event_callback_t scan_info Once the BLE scan timeout or scan stop triggers the scan report event Refer ref at_ble_scan_report_tble_event_callback_t scan_report Advertisement complete event Refer ref at_ble_adv_cmp_evt_tble_event_callback_t advt_cmp Advertisement report in case of advertisement stopped due to advertisement timeout Refer ref at_ble_adv_report_tble_event_callback_t adv_report BLE device own random address changed event Refer ref at_ble_rand_addr_changed_tble_event_callback_t rand_addr_changed BLE connected event device connected to peer device Refer ref at_ble_connected_tble_event_callback_t connected BLE disconnected event device disconnected from peer device Refer ref at_ble_disconnected_tble_event_callback_t disconnected Connection parameter update done on peer device and own device Refer ref at_ble_conn_param_update_done_t

            ATBTLC1000Establishing Connection with Central Device

            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 26

            ble_event_callback_t conn_parameter_update_done Connection parameter update request from peer device Refer ref at_ble_conn_param_update_request_tble_event_callback_t conn_param_update_request Pair complete event as part of end of pairing process Refer ref at_ble_pair_done_tble_event_callback_t pair_done Pair request event from Central device Refer ref at_ble_pair_request_tble_event_callback_t pair_request Slave security request received from peer Peripheral device Refer ref at_ble_slave_sec_request_tble_event_callback_t slave_sec_request Pair Key request event from Peer central device Refer ref at_ble_pair_key_request_tble_event_callback_t pair_key_request encryption request comes from the peer device Needs to supply the bonding information which is stored earlier ref at_ble_encryption_request_tble_event_callback_t encryption_request encryption status changed event received from SMP once the encryption is started ref at_ble_encryption_status_changed_tble_event_callback_t encryption_status_changed Event triggered once the Resolve random address is resolved using supplied IRKs ref at_ble_resolv_rand_addr_status_tble_event_callback_t resolv_rand_addr_status Event is triggered once the connection signature information indication received ref at_ble_sign_counter_tble_event_callback_t sign_counters_ind Peer attribute information indication received Event ref at_ble_peer_att_info_ind_tble_event_callback_t peer_att_info_ind Peer device channel map received indication ref at_ble_channel_map_tble_event_callback_t con_channel_map_indble_gap_event_cb_t

            Note  Callback definition is application-specific If the application layer requires a specific event callbackthen the specific member of the structure is to be assigned with the address of the callback function

            In this assignment two callback functions on Connected and Disconnected GAP events are usedThis allows the application to restart the advertising process on Disconnect manage connectioninformation and startstop of sensor data update

            321 Handling of Connected and Disconnected GAP Events1 Open the startup_templatec file2 Define the following software flags as global variables in startup_templatec file volatile

            bool timer_flag = false and volatile bool connected_flag = false3 Declare and implement the following ble_connected_cb function in the

            startup_templatec file Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param)printf(n Assignment 22 Application connected )connected_flag = trueALL_UNUSED(param)return AT_BLE_SUCCESS

            4 Declare and implement the following ble_disconnected_cb function instartup_templatec file Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param)printf(n Assignment 22 Application disconnected )connected_flag = falsestart_advertisement()ALL_UNUSED(param)return AT_BLE_SUCCESS

            ATBTLC1000Establishing Connection with Central Device

            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 27

            5 Declare the following static GAP callback structure in ldquostartup_templatecrdquo filestatic const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTEDdisconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

            6 Add the following register_btlc1000_callbacks function in startup_templatec Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void) Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks)ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACKBLE_GAP_EVENT_TYPEampapp_gap_handle)if (ble_status = true)printf(nError when Registering ATBTLC1000 callbacks)

            7 Add the register_btlc1000_callbacks function call prior to start advertisement in theapplication main routineint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Gap Callbacks register_btlc1000_callbacks ( ) Start Advertising process start_advertisement() Register PrimaryIncluded service in case of GATT Server while(true) Write application task

            8 Add the ble_event_task function call in the project main loop to handle the different incomingevents from ATBTLC1000while(true)ble_event_task()

            9 Press button ltF7gt to compile the project and verify that no build error appear in the AtmelStudio output window

            ATBTLC1000Establishing Connection with Central Device

            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 28

            Figure 3-10 Atmel Studio Output Window

            10 Click ldquo rdquo to save the project ltCtrl+Sgt

            11 Click ldquo rdquo to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt and checkcorrect initialization of the ATBTLC1000

            12 Open the Microchip SmartConnect application on Androidtrade or iOS device13 Press the ltStart Scangt button and pair peripherals by selecting them in the device list (pass key

            123456)Note 

            1 Pairing event handling is carried out by ble_managerc Refer toble_pair_key_request_handler() for code implementation The default pass key of123456 is also fixed inside this function This can be changed here

            Figure 3-11 Console Log Window

            Note  After peripheral pairing no services information are displayed in Microchip SmartConnectapplication as no service is currently defined and started on peripheral side

            ATBTLC1000Establishing Connection with Central Device

            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 29

            4 SettingHandling of Pre-Defined ServiceThe management of services are done in the GATT layer of the ATBTLC1000 ROM coded Bluetooth LowEnergy Stack The GATT transactions are based on high-level nested objects called Profiles Servicesand Characteristics stored in SRAM memory of ATBTLC1000 device This assignment adds the pre-defined service of information service from ASF library

            Figure 4-1 ATBTLC1000 GATT Layers

            bull ProfilesProfiles are not available in the Bluetooth Low Energy peripheral they are simply a pre-definedcollection of services that have been compiled by either the Bluetooth SIG (adopted GATT basedprofile) or by the application developer (custom profiles) For example the Heart Rate Profilecombines the Heart Rate Service and the Device Information Service

            Note  The complete list of officially adopted GATT-based profiles is available on the BluetoothDeveloper Portal

            bull ServicesA service is a collection of data and associated behaviors which accomplish a particular function orfeature of a device or portions of a device A service may reference other primary or secondaryservices andor a set of characteristics that make up the service Each service distinguishes itselffrom other services by means of a unique numeric ID called as UUID which can be either 16-bit(for officially adopted Bluetooth Low Energy Services) or 128-bit (for custom services)

            Note  A full list of officially adopted services and their UUID are seen on the Bluetooth DeveloperPortal

            bull CharacteristicsA characteristic is the lowest level concept in GATT transactions It contains a single data point withdifferent attributes such as notify read or write capabilities Similar to Services each characteristiccan be distinguished by a SIG-defined adopted UUID (16-bit) or custom (128-bit) UUID This UUIDensures interoperability across Bluetooth Low Energy devices The characteristics are important tointeract with in a Bluetooth Low Energy network In addition to standard UUID the custom UUID isused in case of specific application When characteristics with custom UUID are used in a devicethen it will be interoperable only with those devices that support these characteristics with customUUID

            ATBTLC1000SettingHandling of Pre-Defined Service

            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 30

            In this assignment the following steps are added to the Host MCU application to set up and handle adevice information service within the ATBTLC1000 module The following steps are added to the startupproject

            bull Adding device info service component from ASFbull Configuring and loading the service

            Figure 4-2 Device Information Service

            41 Adding Device Info Service Component from ASF Wizard to ProjectTo use the ldquoofficially adopted GATT-based profilesrdquo from SIG ASF provides Bluetooth Low Energy servicecomponents including init functions that pre-define services in Host memory

            Note  Before starting this assignment be sure to follow the steps mentioned in 2 Creating the Projectand Initializing and 3 Establishing Connection with Central Device

            1 Click ASF gt ASF Wizard2 Search for ldquoBLE-Device Information Servicesrdquo and then click Add

            ATBTLC1000SettingHandling of Pre-Defined Service

            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 31

            Figure 4-3 Available Modules

            3 Now ldquoBLE-Device Information Servicesrdquo (component) appears in ldquoSelected ModulesrdquoFigure 4-4 Selected Modules

            4 Click Apply to add the component to the projectFigure 4-5 Adding the Modules to Project

            5 The ldquoDevice Information Servicerdquo component is added to the project and is confirmed bydevice_information folder added in Solution Explorer

            ATBTLC1000SettingHandling of Pre-Defined Service

            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 32

            Figure 4-6 Device Information Service Added to Project

            42 Configuring and Loading Device Information ServiceThe ATBTLC1000 Host driver provides a set of GATT functions that allows storing and updating theservices in ATBTLC1000 memories

            Prototype at_ble_status_t at_ble_primary_service_define(at_ble_uuid_t uuidat_ble_handle_t service_handleat_ble_included_service_t included_service_listuint16_t included_service_countat_ble_characteristic_t charactristic_listuint16_t charactristic_count)

            Description Defines a new primary service along with its included services and characteristics inATBTLC1000

            Parameters

            bull Uuid [In] ndash primary service UUIDbull service_handle [Out] ndash Service handle is returned herebull included_service_list [In] ndash an array of included service referencesbull included_service_count [In] ndash number of elements in included_service_listbull charactristic_list [InOut] ndash an array of characteristics included in the service this array

            is updated with respective characteristics handlesbull charactristic_count[In] ndash number of elements in charactristic_list

            Return Execution Status

            This function requires an argument as GATT description structure of the service that is implemented Thepreviously added Device Info service component provides Bluetooth Low Energy service middlewareincluding the init functions that predefine the services See below ldquodis_init_servicerdquo from device infoBLE service (device_infohc)

            Prototype ndash void dis_init_service(dis_gatt_service_handler_t device_info_serv)Description ndash Initialize the device information service handler in the host MCU memory

            Parameters ndash

            ATBTLC1000SettingHandling of Pre-Defined Service

            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 33

            bull device_info_serv [Inout] pointer to device info GATT description handler to beupdated

            Return None

            Here is a picture of GATT device info service descriptor definition in Host memory

            device_info_serv-gtserv_handle = 0device_info_serv-gtserv_uuidtype = AT_BLE_UUID_16device_info_serv-gtserv_uuiduuid[0] = (uint8_t) DIS_SERVICE_UUIDdevice_info_serv-gtserv_uuiduuid[1] = (uint8_t) (DIS_SERVICE_UUID gtgt 8)Characteristic Info for Manufacturer Name Stringdevice_info_serv-gtserv_chars[0]char_val_handle = 0 handle stored here device_info_serv-gtserv_chars[0]uuidtype = AT_BLE_UUID_16device_info_serv-gtserv_chars[0]uuiduuid[0] = (uint8_t) IS_CHAR_MANUFACTURER_NAME_UUID UUID Manufacturer Name String device_info_serv-gtserv_chars[0]uuiduuid[1] = (uint8_t) (DIS_CHAR_MANUFACTURER_NAME_UUID gtgt 8) UUID Manufacturer Name String device_info_serv-gtserv_chars[0]properties = AT_BLE_CHAR_READ Properties memcpy(char_valuemanufacturer_nameDEFAULT_MANUFACTURER_NAMEDIS_CHAR_MANUFACTURER_NAME_INIT_LEN)device_info_serv-gtserv_chars[0]init_value = char_valuemanufacturer_namedevice_info_serv-gtserv_chars[0]value_init_len = DIS_CHAR_MANUFACTURER_NAME_INIT_LENdevice_info_serv-gtserv_chars[0]value_max_len = DIS_CHAR_MANUFACTURER_NAME_MAX_LENif BLE_PAIR_ENABLEdevice_info_serv-gtserv_chars[0]value_permissions = AT_BLE_ATTR_READABLE_REQ_AUTHN_NO_AUTHR permissions elsedevice_info_serv-gtserv_chars[0]value_permissions = AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR permissions endifdevice_info_serv-gtserv_chars[0]user_desc = NULL user defined name device_info_serv-gtserv_chars[0]user_desc_len = 0device_info_serv-gtserv_chars[0]user_desc_max_len = 0device_info_serv-gtserv_chars[0]user_desc_permissions = AT_BLE_ATTR_NO_PERMISSIONS user description permissionsdevice_info_serv-gtserv_chars[0]client_config_permissions = AT_BLE_ATTR_NO_PERMISSIONS client config permissionsdevice_info_serm hdsv-gtserv_chars[0]server_config_permissions = AT_BLE_ATTR_NO_PERMISSIONS server config permissionsdevice_info_serv-gtserv_chars[0]user_desc_handle = 0 user desc handlesdevice_info_serv-gtserv_chars[0]client_config_handle = 0 client config handlesdevice_info_serv-gtserv_chars[0]server_config_handle = 0 server config handlesdevice_info_serv-gtserv_chars[0]presentation_format = NULL presentation format

            Note  In case of custom service the above definition initialization must be taken care of by thedeveloper

            421 Procedure to Configure and Load Device Info Service1 Include device info service header file (device_infoh) at the beginning of

            startup_templatec fileinclude ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehinclude device_infoh

            2 Define a device info service handler as global in startup_templatec file Serviceshandlers dis_gatt_service_handler_t dis_service_handler

            ATBTLC1000SettingHandling of Pre-Defined Service

            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 34

            3 Add dis_init_service and at_ble_primary_service_define functions as called abovethe advertisement start in main routine Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service)dis_init_service (ampdis_service_handler) Define the primary service in the GATT server database if ((dis_primary_service_define (ampdis_service_handler)) = AT_BLE_SUCCESS)printf(Device Information Service definition failed) Start Advertising process start_advertisement()

            4 Click to save the project ltCtrl+Sgt and compile the project by pressing button ltF7gt5 Verify that no build error appears in Atmel Studio output window

            Figure 4-7 Atmel Studio Output Window

            6 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt7 Open ldquoMicrochip SmartConnectrdquo application on Android or iOS device8 Press ltStart Scangt button and connect to peripheral

            Note  The device name is a characteristic and contains the name of the device This device namecan be read by the central device to know the name of the device in order to differentiate thedevices This is being set using at_ble_device_name_set()API The device name is set bydefault when ble_device_init is called and the value is pre-defined using BLE_DEVICE_NAMEThe device name can also be sent as part of advertisement payload to be same as the oneconfigured in at_ble_adv_data_set() API It is the responsibility of users to keep the devicename set in advertisement payload the same as that configured inat_ble_device_name_set()

            9 The Service must now be visible after pairing with peripheral under Microchip SmartConnectapplication

            ATBTLC1000SettingHandling of Pre-Defined Service

            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 35

            Figure 4-8 Service List in Microchip SmartConnect Application

            Note  If the pairing of ATBTLC1000 with Microchip Smart connect is not successful then removethe pairing information from mobile by selecting ldquoForget Devicerdquo from the mobile settings Thereason for this is that the mobile app stores the previous pairing information but the ATBTLC1000device lost the previous pairing information due to RESET since it was stored on temporary storage(RAM)

            10 The serial terminal must display the following log output windowFigure 4-9 Console Log Window

            ATBTLC1000SettingHandling of Pre-Defined Service

            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 36

            5 Setting up and Handling Custom ServiceThe previous assignment describes the handling of Bluetooth Low Energy SIG defined device infoservice which is the predefined service available in ASF component This assignment describes thecustom service So the service initialization needs to be implemented In the context of customizedenvironment service the following service description is pushed in ATBTLC1000 memory

            Figure 5-1 Custom Service

            Custom Environment Service Description

            bull UUID type ndash Custom UUID (128-bit)bull UUID ndash 1bc5d5a5-0200-a687-e511-3639c1ba5af0

            Characteristic 0 (Temperature)

            bull User Description ndash Temperaturebull UUID type ndash Custom UUID (128-bit)bull UUID ndash 1bc5d5a5-0200-a687-e511-3639d8ba5af0bull Properties ndash Read Notifybull Value permission ndash No authorization requiredbull Client config permission ndash No permissionbull Server config permission ndash No permission

            Note  In this definition UUIDs are generated randomly Custom servicescharacteristics are free to useany 128-bit UUID less than the base UUID There is no reserved space for vendors to use 16-bit or 32-bitUUIDs

            With this definition any temperature change is notified to the central The notify mechanism allows thecentral to know when the data changes When notify property of the Client Characteristic ConfigurationDescriptor is enabled by the central and the device writes the new value then this updated value isautomatically sent to the central through a notification The central is not required to send readcharacteristic commands explicitly to the peripheral (GATT server)

            To setup and handle the custom environment service in ATBTLC1000 module the following steps areadded to the Host MCU application

            bull Configure and load the custom servicebull Update Temperature characteristic and notify to the central devicebull Receive and handle notification from the Host device

            ATBTLC1000Setting up and Handling Custom Service

            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 37

            Figure 5-2 Custom Service Flowchart

            51 Configuring and Loading the Custom Environment ServiceThe ATBTLC1000 Host driver provides the following set of GATT functions that allows it to push andupdate the service descriptions in the ATBTLC1000 SRAM memory

            Note  Before starting this assignment be sure to follow the steps mentioned in 2 Creating the Projectand Initializing and 3 Establishing Connection with Central Device

            Prototype ndashat_ble_status_t at_ble_primary_service_define(at_ble_uuid_t uuidat_ble_handle_t service_handleat_ble_included_service_t included_service_listuint16_t included_service_countat_ble_characteristic_t charactristic_listuint16_t charactristic_count)

            Description ndash Defines a new primary service along with its included services and characteristics inATBTLC1000 module

            Parameters

            bull Uuid [In] ndash primary service UUIDbull service_handle [Out] ndash service handle is returned herebull included_service_list [In] ndash array of included service referencesbull included_service_count [In] ndash number of elements in included_service_listbull charactristic_list [InOut] ndash an array of characteristics included in the service this array

            is update with respective characteristics handlesbull charactristic_count[In] ndash number of elements in charactristic_list

            ATBTLC1000Setting up and Handling Custom Service

            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 38

            Return ndash Execution Status

            bull Characteristics ndashndash Characteristics definition is done through specific array of following

            ldquoat_ble_characteristic_trdquo structure instancestypedef structat_ble_handle_t char_val_handle Handler (returned during service initialisation)at_ble_uuid_t uuid Characteristic UUID (type and value)at_ble_char_properties_t propertiesCharac Properties (read write notify)uint8_t init_value initial valueuint16_t value_init_len initial value lengthuint16_t value_max_len value max lengthat_ble_attr_permissions_t value_permissions access authorization and authenticationuint8_t user_desc User descriptionuint16_t user_desc_len User description lengthuint16_t user_desc_max_len User description max lengthat_ble_char_presentation_t presentation_format Presentation formatat_ble_attr_permissions_t user_desc_permissions User description permissionat_ble_attr_permissions_t client_config_permissions client permissionat_ble_attr_permissions_t server_config_permissions server permissionat_ble_handle_t user_desc_handle description handlerat_ble_handle_t client_config_handle Client config handlerat_ble_handle_t server_config_handle Server config handler at_ble_characteristic_t

            511 Procedure to Configure and Load Custom Environment Service1 Define the following service UUID and characteristic UUID in startup_templatec file

            define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

            2 Define the following environment service handler and characteristics variable as global instartup_templatec file Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

            3 Add the following service initialization function custom_environment_service_init instartup_templatecvoid custom_environment_service_init(void) at_ble_uuid_t environment_service_uuiduint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUIDuint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperatureenvironment_service_characs[0]user_desc_len = 10environment_service_characs[0]user_desc_max_len = 10environment_service_characs[0]uuidtype = AT_BLE_UUID_128memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16)environment_service_characs[0]properties = AT_BLE_CHAR_READ |AT_BLE_CHAR_NOTIFYenvironment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature valueenvironment_service_characs[0]value_permissions =(AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuidampenvironment_service_handlerNULL0environment_service_characs1)=AT_BLE_SUCCESS)printf(n Assignment 41 Failed to Initialize custom environment service)

            ATBTLC1000Setting up and Handling Custom Service

            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 39

            elseprintf(n Assignment 41 Initialize custom environment service)

            4 Declare and implement the following GATT event callback functioncustom_char_changed_app_event in startup_templatec file If a client (central) enablesnotifications for a server the server (peripheral) receives an AT_BLE_CHARACTERISTIC_CHANGEDevent and this event callback is called Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

            5 Declare and implement the following custom_notification_confirmation_handlerfunction in startup_templatec file Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param)at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )paramif (event_param-gtstatus == AT_BLE_SUCCESS)printf(n Assignment 41Notification Successfully sent over the air) else printf(n Assignment 41Sending Notification over the air failed)return AT_BLE_SUCCESS

            6 Declare the following GATT server callback structure in startup_templatec file Thisassignment uses two GATT callbacksstatic const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handlercharacteristic_changed = custom_char_changed_app_event

            7 Add the following register_gatt_server_callbacks function in startup_templatec toregister GATT server callback for notification confirmation event Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks)ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACKBLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle)if (ble_status = true)printf(nError when Registering ATBTLC1000 callbacks)

            8 Add custom_environment_service_init and register_gatt_server_callbacksfunction calls prior to start advertisement in the application main routine to initialize custom serviceand to register the GATT server callbacksint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()

            ATBTLC1000Setting up and Handling Custom Service

            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 40

            endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks() Custom service init custom_environment_service_init ( ) Register Gatt server callbacks register_gatt_server_callbacks ( ) Start Advertising process start_advertisement()while(true)ble_event_task()

            9 Click to save the project ltCtrl+Sgt

            10 Compile the project by pressing button ltF7gt11 Verify that no build error appears in the Atmel Studio output window

            Figure 5-3 Atmel Studio Output Window

            12 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt13 Open the ldquoMicrochip SmartConnectrdquo application on Android or iOS device14 Connect and pair to the peripheral (pass key 123456)15 Custom service must now be visible after pairing with peripheral under Microchip SmartConnect

            application

            ATBTLC1000Setting up and Handling Custom Service

            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 41

            Figure 5-4 Service List in Microchip SmartConnect Application

            Note  Custom service is displayed as unknown service in the above figure as this service is not aSIG-defined service

            Figure 5-5 General Information

            16 Serial terminal client must display the following Log output

            ATBTLC1000Setting up and Handling Custom Service

            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 42

            Figure 5-6 Log Output Window

            52 Updating the Temperature CharacteristicIn the previous assignment the custom Temperature characteristic is defined with a notify attribute Thistype of attribute requires notification to be sent to central when a new characteristic value is availableThe update of any ldquonotifyrdquo characteristic value is based on following interaction between the Host MCUand the ATBTLC1000Figure 5-7 Characteristic Notification

            521 Setting a Characteristic Value ( at_ble_characteristic_value_set)Prototype ndashat_ble_status_t at_ble_characteristic_value_setat_ble_handle_t handleuint8_t valueuint16_t len)

            Description ndash Sets a characteristic value in ATBTLC1000 memory

            Parameters ndash

            ATBTLC1000Setting up and Handling Custom Service

            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 43

            bull handle [inout] ndash Pointer to Characteristic handle to be changedbull value [in] ndash New valuebull len [in] ndash Value length in bytes

            Return ndash Execution Status

            522 Sending a Notification (at_ble_notification_send)Prototype ndashat_ble_status_t at_ble_notification_send(at_ble_handle_t conn_handleat_ble_handle_t attr_handle)

            Description ndash Sends a Notification

            Parameters ndash

            bull conn_handle[in] ndash handle of the connection to be notifiedbull attr_handle [in] ndash handle of the attribute originating the notification

            Return ndash Execution Status

            523 Sending Temperature Information Once in Every 10 Seconds to Central1 Modify the following ldquotimer_callback_fnrdquo callback function from the startup_templatec

            filestatic void timer_callback_fn(void)timer_flag = true

            2 hw_timer_init()in main routine of startup_templatec initializes the hardware timer3 If a client (Central) enables the notifications for a server the server (Peripheral) receives an

            AT_BLE_CHARACTERISTIC_CHANGED event callback then start the periodic 10 second timer forsending the notification Add the following code in previously definedcustom_char_changed_app_event function Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))timer_flag = falsehw_timer_start(10)printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

            4 Declare the following Temperature_value global variable in startup_templatec staticuint8_t Temperature_value = 25 as static

            5 Add the following send_temperature_notification function in startup_templatec tosend temperature every 10 seconds Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++

            ATBTLC1000Setting up and Handling Custom Service

            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 44

            if(Temperature_value gt 75)Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set(environment_service_characs[0]char_val_handle(uint8_t )ampTemperature_valuesizeof(Temperature_value))ble_status = at_ble_notification_send(0environment_service_characs[0]char_val_handle)if(ble_status = AT_BLE_SUCCESS)printf(fail to send temperature update notification )

            6 Add the following code in main routine to send temperature data every 10 secondswhile (1) ble_event_task()if(connected_flag == true ampamp timer_flag == truetimer_flag = falsesend_temperature_notification()

            7 Click to save the project ltCtrl+Sgt

            8 Compile the project by pressing the button ltF7gt9 Verify that no build error appears in Atmel Studio output window

            Figure 5-8 Atmel Studio Output Window

            10 Click to program the project binary on the L21 Xplained XSTK11 Open ldquoMicrochip SmartConnectrdquo Application on Android or iOS device12 Connect and pair to the peripheral (pass key 123456)13 Click NOTIFY to start the notification14 Temperature information in HEX values must be displayed in Microchip SmartConnect application

            ATBTLC1000Setting up and Handling Custom Service

            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 45

            Figure 5-9 Notification Window

            15 Serial terminal must display the following log outputFigure 5-10 Log Output Window

            ATBTLC1000Setting up and Handling Custom Service

            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 46

            6 Appendix A Software Solution - Pre-Defined SvcThe following is the code implementation for handling of pre-defined service done in 4 SettingHandlingof Pre-Defined Service

            - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehinclude device_infoh

            volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false Services handlers dis_gatt_service_handler_t dis_service_handler

            static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

            void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

            Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

            Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

            static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

            Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void) Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks)

            ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 47

            ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

            timer callback function static void timer_callback_fn(void) Add timer callback functionality here

            void button_cb(void) Add button callback functionality here

            int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

            Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

            DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks()

            Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service) dis_init_service(ampdis_service_handler) Define the primary service in the GATT server database if((dis_primary_service_define(ampdis_service_handler)) = AT_BLE_SUCCESS) printf(Device Information Service definition failed)

            Start Advertising process start_advertisement() while(true) ble_event_task()

            ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 48

            7 Appendix B Software Solution - Custom ServiceThe following is the code implementation for handling of pre-defined service done in 5 Setting up andHandling Custom Service

            - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templateh

            volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false

            static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

            define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0

            define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

            Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

            void custom_environment_service_init(void) at_ble_uuid_t environment_service_uuid uint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUID uint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128 memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperature environment_service_characs[0]user_desc_len = 10 environment_service_characs[0]user_desc_max_len = 10 environment_service_characs[0]uuidtype = AT_BLE_UUID_128 memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16) environment_service_characs[0]properties = AT_BLE_CHAR_READ | AT_BLE_CHAR_NOTIFY environment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature value environment_service_characs[0]value_permissions = (AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuid ampenvironment_service_handlerNULL0 environment_service_characs1)=AT_BLE_SUCCESS) printf(n Assignment 41 Failed to Initialize custom environment service) else printf(n Assignment 41 Initialize custom environment service)

            Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param) at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )param if (event_param-gtstatus == AT_BLE_SUCCESS) printf(n Assignment 41Notification Successfully sent over the air)

            ATBTLC1000Appendix B Software Solution - Custom Service

            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 49

            else printf(n Assignment 41Sending Notification over the air failed) return AT_BLE_SUCCESS

            static at_ble_status_t custom_char_changed_app_event(void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle -gt char_new_value[0])) timer_flag = false hw_timer_start(10) printf(n Assignment 41Characteristic changed event) return AT_BLE_SUCCESS

            static const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handler characteristic_changed = custom_char_changed_app_event

            Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

            void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

            Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

            Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

            static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

            Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void)

            ATBTLC1000Appendix B Software Solution - Custom Service

            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 50

            Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

            timer callback function static void timer_callback_fn(void) Add timer callback functionality here timer_flag = true

            void button_cb(void) Add button callback functionality here

            static uint8_t Temperature_value = 25

            Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++ if(Temperature_value gt 75) Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set( environment_service_characs[0]char_val_handle (uint8_t )ampTemperature_value sizeof(Temperature_value)) ble_status = at_ble_notification_send(0 environment_service_characs[0]char_val_handle) if(ble_status = AT_BLE_SUCCESS) printf(fail to send temperature update notification )

            int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

            Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

            DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register Gap ATBTLC1000 Callbacks register_btlc1000_callbacks()

            Custom service init custom_environment_service_init()

            ATBTLC1000Appendix B Software Solution - Custom Service

            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 51

            Register Gatt server callback register_gatt_server_callbacks()

            Start Advertising process start_advertisement() while(true) ble_event_task() if(connected_flag == true ampamp timer_flag == true) timer_flag = false send_temperature_notification()

            ATBTLC1000Appendix B Software Solution - Custom Service

            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 52

            8 Document Revision HistoryRev B - 42018

            Section Changes

            Document Revised contents to match various Bluetooth Low Energy standard versions

            Rev A - 122017

            Section Changes

            Document Initial release

            ATBTLC1000Document Revision History

            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 53

            The Microchip Web Site

            Microchip provides online support via our web site at httpwwwmicrochipcom This web site is used asa means to make files and information easily available to customers Accessible by using your favoriteInternet browser the web site contains the following information

            bull Product Support ndash Data sheets and errata application notes and sample programs designresources userrsquos guides and hardware support documents latest software releases and archivedsoftware

            bull General Technical Support ndash Frequently Asked Questions (FAQ) technical support requestsonline discussion groups Microchip consultant program member listing

            bull Business of Microchip ndash Product selector and ordering guides latest Microchip press releaseslisting of seminars and events listings of Microchip sales offices distributors and factoryrepresentatives

            Customer Change Notification Service

            Microchiprsquos customer notification service helps keep customers current on Microchip productsSubscribers will receive e-mail notification whenever there are changes updates revisions or erratarelated to a specified product family or development tool of interest

            To register access the Microchip web site at httpwwwmicrochipcom Under ldquoSupportrdquo click onldquoCustomer Change Notificationrdquo and follow the registration instructions

            Customer Support

            Users of Microchip products can receive assistance through several channels

            bull Distributor or Representativebull Local Sales Officebull Field Application Engineer (FAE)bull Technical Support

            Customers should contact their distributor representative or Field Application Engineer (FAE) for supportLocal sales offices are also available to help customers A listing of sales offices and locations is includedin the back of this document

            Technical support is available through the web site at httpwwwmicrochipcomsupport

            Microchip Devices Code Protection Feature

            Note the following details of the code protection feature on Microchip devices

            bull Microchip products meet the specification contained in their particular Microchip Data Sheetbull Microchip believes that its family of products is one of the most secure families of its kind on the

            market today when used in the intended manner and under normal conditionsbull There are dishonest and possibly illegal methods used to breach the code protection feature All of

            these methods to our knowledge require using the Microchip products in a manner outside theoperating specifications contained in Microchiprsquos Data Sheets Most likely the person doing so isengaged in theft of intellectual property

            bull Microchip is willing to work with the customer who is concerned about the integrity of their code

            ATBTLC1000

            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 54

            bull Neither Microchip nor any other semiconductor manufacturer can guarantee the security of theircode Code protection does not mean that we are guaranteeing the product as ldquounbreakablerdquo

            Code protection is constantly evolving We at Microchip are committed to continuously improving thecode protection features of our products Attempts to break Microchiprsquos code protection feature may be aviolation of the Digital Millennium Copyright Act If such acts allow unauthorized access to your softwareor other copyrighted work you may have a right to sue for relief under that Act

            Legal Notice

            Information contained in this publication regarding device applications and the like is provided only foryour convenience and may be superseded by updates It is your responsibility to ensure that yourapplication meets with your specifications MICROCHIP MAKES NO REPRESENTATIONS ORWARRANTIES OF ANY KIND WHETHER EXPRESS OR IMPLIED WRITTEN OR ORAL STATUTORYOR OTHERWISE RELATED TO THE INFORMATION INCLUDING BUT NOT LIMITED TO ITSCONDITION QUALITY PERFORMANCE MERCHANTABILITY OR FITNESS FOR PURPOSEMicrochip disclaims all liability arising from this information and its use Use of Microchip devices in lifesupport andor safety applications is entirely at the buyerrsquos risk and the buyer agrees to defendindemnify and hold harmless Microchip from any and all damages claims suits or expenses resultingfrom such use No licenses are conveyed implicitly or otherwise under any Microchip intellectualproperty rights unless otherwise stated

            Trademarks

            The Microchip name and logo the Microchip logo AnyRate AVR AVR logo AVR Freaks BeaconThingsBitCloud CryptoMemory CryptoRF dsPIC FlashFlex flexPWR Heldo JukeBlox KeeLoq KeeLoq logoKleer LANCheck LINK MD maXStylus maXTouch MediaLB megaAVR MOST MOST logo MPLABOptoLyzer PIC picoPower PICSTART PIC32 logo Prochip Designer QTouch RightTouch SAM-BASpyNIC SST SST Logo SuperFlash tinyAVR UNIO and XMEGA are registered trademarks ofMicrochip Technology Incorporated in the USA and other countries

            ClockWorks The Embedded Control Solutions Company EtherSynch Hyper Speed Control HyperLightLoad IntelliMOS mTouch Precision Edge and Quiet-Wire are registered trademarks of MicrochipTechnology Incorporated in the USA

            Adjacent Key Suppression AKS Analog-for-the-Digital Age Any Capacitor AnyIn AnyOut BodyComchipKIT chipKIT logo CodeGuard CryptoAuthentication CryptoCompanion CryptoControllerdsPICDEM dsPICDEMnet Dynamic Average Matching DAM ECAN EtherGREEN In-Circuit SerialProgramming ICSP Inter-Chip Connectivity JitterBlocker KleerNet KleerNet logo Mindi MiWimotorBench MPASM MPF MPLAB Certified logo MPLIB MPLINK MultiTRAK NetDetach OmniscientCode Generation PICDEM PICDEMnet PICkit PICtail PureSilicon QMatrix RightTouch logo REALICE Ripple Blocker SAM-ICE Serial Quad IO SMART-IS SQI SuperSwitcher SuperSwitcher II TotalEndurance TSHARC USBCheck VariSense ViewSpan WiperLock Wireless DNA and ZENA aretrademarks of Microchip Technology Incorporated in the USA and other countries

            SQTP is a service mark of Microchip Technology Incorporated in the USA

            Silicon Storage Technology is a registered trademark of Microchip Technology Inc in other countries

            GestIC is a registered trademark of Microchip Technology Germany II GmbH amp Co KG a subsidiary ofMicrochip Technology Inc in other countries

            All other trademarks mentioned herein are property of their respective companies

            ATBTLC1000

            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 55

            copy 2018 Microchip Technology Incorporated Printed in the USA All Rights Reserved

            ISBN 978-1-5224-2921-0

            Quality Management System Certified by DNV

            ISOTS 16949Microchip received ISOTS-169492009 certification for its worldwide headquarters design and waferfabrication facilities in Chandler and Tempe Arizona Gresham Oregon and design centers in Californiaand India The Companyrsquos quality system processes and procedures are for its PICreg MCUs and dsPICreg

            DSCs KEELOQreg code hopping devices Serial EEPROMs microperipherals nonvolatile memory andanalog products In addition Microchiprsquos quality system for the design and manufacture of developmentsystems is ISO 90012000 certified

            ATBTLC1000

            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 56

            AMERICAS ASIAPACIFIC ASIAPACIFIC EUROPECorporate Office2355 West Chandler BlvdChandler AZ 85224-6199Tel 480-792-7200Fax 480-792-7277Technical SupporthttpwwwmicrochipcomsupportWeb AddresswwwmicrochipcomAtlantaDuluth GATel 678-957-9614Fax 678-957-1455Austin TXTel 512-257-3370BostonWestborough MATel 774-760-0087Fax 774-760-0088ChicagoItasca ILTel 630-285-0071Fax 630-285-0075DallasAddison TXTel 972-818-7423Fax 972-818-2924DetroitNovi MITel 248-848-4000Houston TXTel 281-894-5983IndianapolisNoblesville INTel 317-773-8323Fax 317-773-5453Tel 317-536-2380Los AngelesMission Viejo CATel 949-462-9523Fax 949-462-9608Tel 951-273-7800Raleigh NCTel 919-844-7510New York NYTel 631-435-6000San Jose CATel 408-735-9110Tel 408-436-4270Canada - TorontoTel 905-695-1980Fax 905-695-2078

            Australia - SydneyTel 61-2-9868-6733China - BeijingTel 86-10-8569-7000China - ChengduTel 86-28-8665-5511China - ChongqingTel 86-23-8980-9588China - DongguanTel 86-769-8702-9880China - GuangzhouTel 86-20-8755-8029China - HangzhouTel 86-571-8792-8115China - Hong Kong SARTel 852-2943-5100China - NanjingTel 86-25-8473-2460China - QingdaoTel 86-532-8502-7355China - ShanghaiTel 86-21-3326-8000China - ShenyangTel 86-24-2334-2829China - ShenzhenTel 86-755-8864-2200China - SuzhouTel 86-186-6233-1526China - WuhanTel 86-27-5980-5300China - XianTel 86-29-8833-7252China - XiamenTel 86-592-2388138China - ZhuhaiTel 86-756-3210040

            India - BangaloreTel 91-80-3090-4444India - New DelhiTel 91-11-4160-8631India - PuneTel 91-20-4121-0141Japan - OsakaTel 81-6-6152-7160Japan - TokyoTel 81-3-6880- 3770Korea - DaeguTel 82-53-744-4301Korea - SeoulTel 82-2-554-7200Malaysia - Kuala LumpurTel 60-3-7651-7906Malaysia - PenangTel 60-4-227-8870Philippines - ManilaTel 63-2-634-9065SingaporeTel 65-6334-8870Taiwan - Hsin ChuTel 886-3-577-8366Taiwan - KaohsiungTel 886-7-213-7830Taiwan - TaipeiTel 886-2-2508-8600Thailand - BangkokTel 66-2-694-1351Vietnam - Ho Chi MinhTel 84-28-5448-2100

            Austria - WelsTel 43-7242-2244-39Fax 43-7242-2244-393Denmark - CopenhagenTel 45-4450-2828Fax 45-4485-2829Finland - EspooTel 358-9-4520-820France - ParisTel 33-1-69-53-63-20Fax 33-1-69-30-90-79Germany - GarchingTel 49-8931-9700Germany - HaanTel 49-2129-3766400Germany - HeilbronnTel 49-7131-67-3636Germany - KarlsruheTel 49-721-625370Germany - MunichTel 49-89-627-144-0Fax 49-89-627-144-44Germany - RosenheimTel 49-8031-354-560Israel - RarsquoananaTel 972-9-744-7705Italy - MilanTel 39-0331-742611Fax 39-0331-466781Italy - PadovaTel 39-049-7625286Netherlands - DrunenTel 31-416-690399Fax 31-416-690340Norway - TrondheimTel 47-7289-7561Poland - WarsawTel 48-22-3325737Romania - BucharestTel 40-21-407-87-50Spain - MadridTel 34-91-708-08-90Fax 34-91-708-08-91Sweden - GothenbergTel 46-31-704-60-40Sweden - StockholmTel 46-8-5090-4654UK - WokinghamTel 44-118-921-5800Fax 44-118-921-5820

            Worldwide Sales and Service

            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 57

            • Introduction
            • Table of Contents
            • 1 Getting Started
              • 11 Software Prerequisites
                • 111 Installation Steps of Atmel Studio 7
                  • 12 Software Setup
                    • 121 Installation of Microchip SmartConnect application on a Mobile device
                      • 13 ATBTLC1000 Embedded Firmware
                      • 14 ATBTLC1000 Host Software API
                      • 15 Hardware Prerequisites
                        • 151 SMARTtrade SAM L21 Xplained Pro
                        • 152 ATBTLC1000ZR Xplained Pro Extension board
                          • 16 Hardware Setup
                            • 2 Creating the Project and Initializing
                              • 21 Creating Project from ASF
                              • 22 Configuring ASF for ATBTLC1000-ZR
                              • 23 Compiling and Testing the Project
                                • 3 Establishing Connection with Central Device
                                  • 31 Configuring and Starting the Advertisement Process
                                    • 311 Flags (AD Type 0x00)
                                    • 312 Available Service UUID (AD Types 0x02 to 0x07)
                                    • 313 Device Name (AD Types 0x08 to 0x09)
                                      • 3131 Setting the Advertisement Payload (ble_advertisement_data_set)
                                      • 3132 Starting the Advertisement Process (at_ble_adv_start)
                                        • 314 Advertisement Process
                                          • 3141 Starting the Advertisement Process
                                              • 32 Managing GAP events
                                                • 321 Handling of Connected and Disconnected GAP Events
                                                    • 4 SettingHandling of Pre-Defined Service
                                                      • 41 Adding Device Info Service Component from ASF Wizard to Project
                                                      • 42 Configuring and Loading Device Information Service
                                                        • 421 Procedure to Configure and Load Device Info Service
                                                            • 5 Setting up and Handling Custom Service
                                                              • 51 Configuring and Loading the Custom Environment Service
                                                                • 511 Procedure to Configure and Load Custom Environment Service
                                                                  • 52 Updating the Temperature Characteristic
                                                                    • 521 Setting a Characteristic Value ( at_ble_characteristic_value_set)
                                                                    • 522 Sending a Notification (at_ble_notification_send)
                                                                    • 523 Sending Temperature Information Once in Every 10 Seconds to Central
                                                                        • 6 Appendix A Software Solution - Pre-Defined Svc
                                                                        • 7 Appendix B Software Solution - Custom Service
                                                                        • 8 Document Revision History
                                                                        • The Microchip Web Site
                                                                        • Customer Change Notification Service
                                                                        • Customer Support
                                                                        • Microchip Devices Code Protection Feature
                                                                        • Legal Notice
                                                                        • Trademarks
                                                                        • Quality Management System Certified by DNV
                                                                        • Worldwide Sales and Service

              Figure 1-4 Bluetooth Low Energy Peripheral Application Flowchart

              WARNING The user application must be non-blocking to ensure that the Bluetooth Low Energy events arehandled in time

              15 Hardware PrerequisitesThis document uses the ATBTLC1000ZR-XSTK kit The ATBTLC1000ZR-XSTK kit is comprised of theSAM L21 Xplained Pro (XPRO) and ATBTLC1000ZR XPRO extension board The following sectionsprovide an overview of these kits and their features

              151 SMARTtrade SAM L21 Xplained ProThe SMARTtrade SAM L21 Xplained Pro evaluation kit is used to evaluate the ATSAML21J18Bmicrocontroller This kit includes an on-board embedded debugger to program and debugATSAML21J18B The kit also contains an on-board current measurement circuitry which enables theuser to measure current profile over time without any external tools The connection with any XplainedPro modules or external component is possible through available external connectors which makes theboard perfect for prototyping the low-power applications

              ATBTLC1000Getting Started

              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 7

              Figure 1-5 SAM L21 Xplained Pro Module

              152 ATBTLC1000ZR Xplained Pro Extension boardThe ATBTLC1000ZR Xplained Pro extension evaluation kit is Bluetooth Low Energy SoC ATBTLC1000-ZR110CA module This extension is plugged to any of the supported host MCU Xplained Pro evaluationboards to quickly add Bluetooth Low Energy connectivity to the platform This kit provides easy access tothe features of the ATBTLC1000-ZR110CA Bluetooth Low Energy module and illustrates how to integratethe device in a custom design which is supported by the Atmel Studio integrated development platform

              ATBTLC1000Getting Started

              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 8

              Figure 1-6 ATBTLC1000ZR Xpro Board

              The ATBTLC1000ZR Xplained Pro extension board contains

              bull ATBLTC1000-ZR110CA Module ndash Bluetooth Low Energy module with 24 GHz Bluetooth LowEnergy ATBTLC1000-XR1100A SiP

              bull AT30TSE758A Digital Temperature Sensor ndash Integrated temperature sensor with nonvolatileregisters and serial EEPROM Compatible with two-wire (I2C) and SMBus serial interfaces

              bull Current Measurement Header ndash Allows measurement of the current consumption of the board Itmust be closed to enable power to the ATBTLC1000-ZR110CA module

              16 Hardware Setup1 Ensure that ATBTLC1000ZR-XPRO power consumption header is closed and that jumpers are

              placed on pins 2 to 3 of headers J105 J106 J107 and J108 as shown in the following figure

              ATBTLC1000Getting Started

              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 9

              Figure 1-7 ATBTLC1000ZR-XPRO Extension

              2 Connect the ATBTLC1000ZR-XPRO extension to EXT1 of SAM L21 XPRO as illustrated in thefollowing figureFigure 1-8 ATBTLC1000ZR-XPRO Extension connected with SAM L21 XPRO

              3 Connect the board to PC using the ldquoDebug USB ConnectorrdquoFigure 1-9 SAM L21 XPRO Connection to PC

              ATBTLC1000Getting Started

              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 10

              4 Now the Hardware is ready for development

              ATBTLC1000Getting Started

              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 11

              2 Creating the Project and InitializingThis chapter provides the process of creating an application startup project using Atmel Studio Prior tocreating a project the user must know hardware architecture and software requirements to configuredrivers

              The hardware connection between the SAM L21 XPRO and the ATBTLC1000ZR XPRO board isillustrated in following figure This SAM L21 board is used as host MCUFigure 2-1 ATBTLC1000ZR Xpro Board Connection with SAM L21

              Note  For more details refer to module datasheet and XPRO board design documentation

              21 Creating Project from ASFAdvanced Software Framework has a pre-configured Bluetooth Low Energy Startup template project thatincludes Bluetooth Low Energy software API for Host and ATBTLC1000 and their peripheral driverdependencies This is used as starting project for any Bluetooth Low Energy project development

              To create the project follow the steps below

              1 Search for the ldquoBLE-Startup Templaterdquo from the File gt New gt Example Project menu in AtmelStudio

              ATBTLC1000Creating the Project and Initializing

              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 12

              Figure 2-2 Advanced Software Framework_New Example Project

              Note  ATBTLC1000SAMB11 related projects are prefixed with ldquoBLErdquo making it easier to filter theproject in the dialogue box

              2 Select the appropriate ldquoBLE-Startup Templaterdquo project corresponding to the intended Host MCUXplained Pro board and then press OK button to import the BLE startup template project SelectldquoBLE-Startup Template ndash SAM L21 Xplained Pro SAML21J18Brdquo for this hands-onNote  Rev B XPRO boards can be identified by SAML21J18B silk screen marking below SAML21MCU

              3 The BLE startup project is now created and loaded in Atmel StudioFigure 2-3 Startup_Template Project

              ATBTLC1000Creating the Project and Initializing

              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 13

              Note  The main project routine of ldquoStartup Template projectrdquo already includes host MCU low levelinitialization BLE and ATBTLC1000 initialization The added ASF components in project can beviewed from ldquoASFgtASF Wizardrdquo Select the created project from Project drop down box

              Figure 2-4 ASF Wizard Window

              ndash BLE_STACK Platform Interface ndash Core manager of Bluetooth Low Energy Host API Itmanages ATBTLC1000 device initialization GAP and GATT events

              ndash Timer Driver ndash Task timer functionality by using a Timer Counter (TC) or Timer Counter forControl (TCC) peripheral

              ndash Console UART ndash Universal Asynchronous ReceiverTransmitter (UART) communication insynchronousblocking mode

              ndash Generic Board Support ndash Host MCU Board specific initializationndash System Drivers ndash Select MCUrsquos System peripheral drivers These drivers are included by

              default in ASF projects and manage the clocks and oscillator of the system4 The main routine contains the MCU low level initialization and ATBTLC1000 initialization The

              following figure illustrates the flowchart of the main routine

              ATBTLC1000Creating the Project and Initializing

              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 14

              Figure 2-5 Main Routine Flowchart

              22 Configuring ASF for ATBTLC1000-ZR1 The default ldquoStartup Template Projectrdquo is configured for ATBTLC1000-MR module with 6-Wire

              mode2 Navigate to Project properties Project gt Project properties gt Toolchain gt ARMGNU C Compiler gt

              Symbols3 The ATBTLC1000ZR-XSTK kit uses the ATBTLC1000-ZR110CA module Change symbol

              BLE_MODULE to BTLC1000_ZR and enable UART_FLOWCONTROL_4WIRE_MODE forATBTLC1000-ZR module as shown in the figure belowFigure 2-6 Startup Template Project Window

              Note  This configuration change is not required for ATBTLC1000-MR module

              ATBTLC1000Creating the Project and Initializing

              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 15

              23 Compiling and Testing the Project

              1 Click the ldquo rdquo button ltF7gt to compile the project2 Verify that no build error appears in Atmel Studio output window

              Figure 2-7 Atmel Studio Output Window

              3 Connect the SAM L21 XPRO to PC (if not already done)4 To access the project properties go to Project gt

              STARTUP_TEMPLATE_SAML21_XPLAINED_PRO_B1 PropertiesFigure 2-8 Compiling the Project

              5 In project properties click the Tool tab and select the EDBG of SAM L21 Xplained Pro board asdebuggerprogrammerFigure 2-9 Selection of DebuggerProgrammer

              6 Open any Terminal application (for example TeraTerm) Select the COM port enumerated on thePC and set the following parameters

              ndash EDBG associated COM Port (Check Windows Device Manager)

              ATBTLC1000Creating the Project and Initializing

              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 16

              ndash Baudrate 115200ndash Parity Nonendash One Stop bitndash Enable Hardware Flow Control

              7 Click to save the project ltCtrl+Sgt

              8 Click rdquo to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt9 The initialization of the ATBTLC1000ZR module must return the Bluetooth Device Address and

              Address typeFigure 2-10 Console Log Window

              Note 1 If initialization fails make sure to verify the hardware configuration is aligned with the

              description refer to 16 Hardware Setup2 The initialization of ATBTLC1000 takes few seconds due to patch download process

              ATBTLC1000Creating the Project and Initializing

              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 17

              3 Establishing Connection with Central DeviceThe Bluetooth Low Energy connectivity is added to the application that is used to connect with theBluetooth Low Energy central The first step is about the management of Bluetooth connection with acentral device When using ATBTLC1000 device this process is managed by dedicated API function callsassociated with ATBTLC1000 events handling

              The interaction between Host MCU ATBTLC1000 and Bluetooth Low Energy central during connectionestablishment is as follows

              Figure 3-1 Establishing Connection with Central Device

              On host MCU side the management of the Bluetooth connection is performed through three main steps1 GAP callback registration2 Advertisement configuration3 ATBTLC1000 event handling

              In the existing project main routine the integration of these steps are highlighted in red in the followingflowchart

              ATBTLC1000Establishing Connection with Central Device

              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 18

              Figure 3-2 Main Routine Flow Chart

              31 Configuring and Starting the Advertisement ProcessThe Bluetooth Low Energy devices transmit advertisement packets to show their presence to nearbydevices The advertisement packet is sent periodically at a time interval defined by variableldquoadvintervalrdquo defined in Bluetooth SIG specification To avoid any collision with other wireless networksuch as Wi-Fireg a channel change is performed for each advertisement packet sent (data frequencyhopping) as illustrated in the following figureFigure 3-3 Advertisement Process

              During advertisement the payload structure to be sent differs from application to application and is set byusing encapsulated packet data unit type information (PDU_TYPE)

              ATBTLC1000Establishing Connection with Central Device

              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 19

              Figure 3-4 PDU Advertising

              The following table lists the different PDU types used according to device role

              Advertising event types (PDU_TYPE) Broadcaster Observer Peripheral Central

              Connectible undirected event (ADV_IND) Excluded Excluded Mandatory Excluded

              Connectible directed event(ADV_DIRECT_IND) Excluded Excluded Optional Excluded

              Non-connectible undirected event(ADV_NONCONN_IND) Mandatory Excluded Optional Excluded

              Scannable undirected event (ADV_SCAN_IND) Optional Excluded Optional Excluded

              As our device acts as a Bluetooth Low Energy peripheral the connectable undirected event (ADV_IND)advertising type is used See the following description about the ADV_IND advertisement packetFigure 3-5 ADV_IND Advertisement Packet

              The ADV_IND payload contains different Advertisement Data types (AD0 - ADn) which provide specificinformation to the central device such as device short name Tx power level and list of availableservices UUIDs The number of advertisement data types that can be added to the advertisementpayload are limited by the advertisement payload size of 31 octets

              Following is a list of advertisement data types that are commonly found in ADV_IND payload

              ATBTLC1000Establishing Connection with Central Device

              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 20

              311 Flags (AD Type 0x00)The flags describe the basic device capability such as BLE support BLE discoverable mode BREDRsupport and simultaneous BRED

              312 Available Service UUID (AD Types 0x02 to 0x07)The Bluetooth Low Energy advertisement payloads are limited to 31 bytes Therefore only two 128-bitUUID values can be added to the payload For this purpose the specific AD types describe the length ofthe advertised UUID and provide information as to whether the payload contains a incompletecompletelist of UUID supported by the GATT server

              bull 0x02 - Incomplete list of 16-bit UUIDs (adopted GATT services)bull 0x03 - Complete list of 16-bit UUIDs (adopted GATT services)bull 0x06 - Incomplete list of 128-bit UUIDs (custom GATT services)bull 0x07 - Complete list of 128-bit UUIDs (custom GATT services)

              Note  When a 16-bit UUID is transmitted only the unique 2-byte value is sent The client knows that it isrequired to be injected into the base UUID For example the Health Thermometer Service is assigned as0x1809 so its equivalent UUID is 00001809-0000-1000-8000-00805F9B34FB

              313 Device Name (AD Types 0x08 to 0x09)This AD type field is used to advertise the Local name of device in the network The Local name datatype value indicates if the name is complete or shortened If the name is shortened the complete namecan be read after the connection is established

              bull 0x08 - Shortened Local Namebull 0x09 - Complete Local Name

              Note 1 A shortened name contains only continuous characters from the beginning of the full name For

              example if the device name is BT_Device_Name then the shortened name can beBT_Device or BT_Dev

              2 Complete data type list are available at httpswwwbluetoothcomspecificationsassigned-numbersgeneric-access-profile

              For management of advertisement process and cover the different configurations specified by SIG theATBTLC1000 Host driver provides the two functions elaborated in the following sections

              In the application use these two functions to setup the following ADV_IN type payloadFigure 3-6 ADV_IN Type Payload Process

              ATBTLC1000Establishing Connection with Central Device

              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 21

              3131 Setting the Advertisement Payload (ble_advertisement_data_set)Prototype ndashat_ble_status_t at_ble_adv_data_set (uint8_t const const adv_datauint8_t adv_data_lenuint8_t const const scan_resp_datauint8_t scan_response_data_len)

              Description ndash Set clear or update the advertisement and scan response data

              Parameters ndash

              bull adv_data ndash Raw data to be placed in advertisement packetbull adv_data_len ndash Data length for adv_data Max size 28 bytes (3 bytes are reserved to set

              advertising AD type flags based on the selected Advertising mode and the user is not required toconfigure AD type flags in the advertisement payload)

              bull scan_resp_data ndash Raw data to be placed in the scan response packet If NULL no changes aremade to the current scan response packet data

              bull scan_response_data_len ndash Data length for scan_resp_data Max size 31 bytes

              Return ndash Execution Status

              This function requires a parameter raw adv_data to be sent to central Following is an example of itsdefinition

              static uint8_t adv_data[] = 0x11 AD1 length = 170x03 AD1 Type = Complete list of 128-bit UUIDs0x1b0xc50xd50xa50x020x000xa60x87 AD1 = UUID MSBs0xe50x110x360x390xc00xba0x5a0xf00x0A AD2 Length = 100x09 AD2 Type = Complete local NamelsquoMrsquorsquoyrsquorsquo_rsquorsquoDrsquorsquoErsquorsquoVrsquo AD2 = ldquoMy_DEVrdquo

              3132 Starting the Advertisement Process (at_ble_adv_start)Prototype ndashat_ble_status_t at_ble_adv_start (at_ble_adv_type_t typeat_ble_adv_mode_t modeat_ble_addr_t peer_addrat_ble_filter_type_t filtereduint16_t intervaluint16_t timeoutbool disable_randomness)

              Description ndash Start advertisement process

              Parameters ndash

              bull type ndash Advertising type to be used can bendash AT_BLE_ADV_TYPE_UNDIRECTEDndash AT_BLE_ADV_TYPE_DIRECTEDndash AT_BLE_ADV_TYPE_SCANNABLE_UNDIRECTEDndash AT_BLE_ADV_TYPE_NONCONN_UNDIRECTEDndash AT_BLE_ADV_TYPE_DIRECTED_LDCndash AT_BLE_ADV_TYPE_SCAN_RESPONSE

              bull mode ndash Advertising mode to be used can be

              ATBTLC1000Establishing Connection with Central Device

              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 22

              ndash AT_BLE_ADV_NON_DISCOVERABLEndash AT_BLE_ADV_GEN_DISCOVERABLEndash AT_BLE_ADV_LIM_DISCOVERABLEndash AT_BLE_ADV_BROADCASTER_MODE

              bull peer_addr ndash Specify peer address when advertising type is AT_BLE_ADV_TYPE_DIRECTEDbull filtered ndash

              ndash AT_BLE_ADV_FP_ANY ndash Allow scan and connection requests from anyonendash AT_BLE_ADV_FP_FILTER_SCANREQ ndash Allow scan request from White List devices onlyndash AT_BLE_ADV_FP_FILTER_CONNREQ ndash Allow connection request from White List devices

              onlyndash AT_BLE_ADV_FP_FILTER_BOTH ndash Allow scan and connection requests from White List

              devices onlybull interval ndash Advertisement interval (in 0625 ms units)bull timeout ndash Advertising timeout between 0x0001 and 0x028F in scale of seconds This parameter

              must be set to 0 if type equals AT_BLE_ADV_TYPE_DIRECTEDbull disable_randomness ndash When disabled advertisements are performed at the exact interval

              without adding random 10 ms tempo

              Return ndash Execution Status

              314 Advertisement ProcessIn this assignment the advertisement process is performed in the following configuration

              bull Undirected (Type AT_BLE_ADV_TYPE_UNDIRECTED)bull Discoverable (Mode AT_BLE_ADV_GEN_DISCOVERABLE)bull No peer Address (peer_addr = NULL)bull No filtering (filtered = AT_BLE_ADV_FP_ANY)bull Advertisement interval 1s (interval = 1600)bull Maximum timeout (timeout 655)bull Randomness enabled (disable_randomness = FALSE)

              3141 Starting the Advertisement Process1 Open startup_templatec file2 Declare the following ble_status global variable in startup_templatec as volatile

              include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehvolatile at_ble_status_t ble_status

              3 Declare the following adv_data global variable in startup_templatec as staticstatic uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD)0x09 AD2 Type = Complete local Name

              ATBTLC1000Establishing Connection with Central Device

              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 23

              My_SENS AD2 = ldquoMy_SENSrdquo

              Note 1 The name of the device is to be changed (AD2 field)2 According to the new name AD2 length must be adapted to new AD2 content

              4 Add the following start_advertisement function in startup_templatec prototype for thefunction void start_advertisement (void) also this can be added to avoid warningsvoid start_advertisement (void)printf(n Assignment 21 Start Advertisement)Set advertisement datable_status = at_ble_adv_data_set(adv_datasizeof(adv_data)NULL0)Start Advertisementble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550)if(ble_status = AT_BLE_SUCCESS)printf(n Failed to start advertisement)

              5 Start the advertisement process by adding the following highlighted code to the application mainroutineint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Start Advertising process start_advertisement() Register PrimaryIncluded service in case of GATT Server while(true) Write application task

              6 Click to save the project ltCtrl+Sgt

              7 Click button to compile the project ltF7gt8 Verify that no build error appears in Atmel Studio output window

              Figure 3-7 Atmel Studio Output Window

              ATBTLC1000Establishing Connection with Central Device

              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 24

              9 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt10 Open Microchip SmartConnect Application on Android or iOS device and tap START SCAN button

              Note  The device must appear in Microchip SmartConnect Application

              Figure 3-8 Microchip SmartConnect Application

              11 Terminal must display the following Log outputFigure 3-9 Log Output Window

              32 Managing GAP eventsThe management of the Bluetooth connection at the host MCU level is done through reception andhandling of events reported by the ATBTLC1000 These events are generated by ATBTLC1000 GAPGATT and L2CAP layers to notify the host about the ongoing Bluetooth interaction with other devices inits vicinity

              ATBTLC1000Establishing Connection with Central Device

              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 25

              To manage events coming from the ATBTLC1000 module the host driver must provide able_mgr_events_callback_handler function that allows registration of application callback functionto be executed on each event reported by the ATBTLC1000 module

              Prototype ndashbool ble_mgr_events_callback_handler(ble_mgr_event_cb_t event_cb_typeble_mgr_event_t event_typeconst voidble_event_handler)

              Description ndash Used by ProfileServiceApplication to register the Bluetooth Low Energy eventsrsquocallbacks

              Parameters ndash

              event_cb_type ndash types of actions to perform on callbacks can be either

              REGISTER_CALL_BACK or

              UNREGISTER_CALL_BACKevent_type ndash Any one of the event types can be used

              BLE_GAP_EVENT_TYPEBLE_GATT_CLIENT_EVENT_TYPEBLE_GATT_SERVER_EVENT_TYPEBLE_L2CAP_EVENT_TYPEBLE_GATT_HTPT_EVENT_TYPEBLE_DTM_EVENT_TYPEBLE_CUSTOM_EVENT_TYPEble_event_handler ndash pointer to handler list

              Structure ble_gap_event_cb_t defines the GAP callbacks Similarly structuresble_gatt_client_event_cb_t and ble_gatt_server_event_cb_t define the callbacks of GATTevents

              typedef struct ble_gap_event_cb BLE Undefined events received from ATBTLC1000 which is not handled in Libraryble_event_callback_t undefined BLE scan information contains the peer device scan information Refer ref at_ble_scan_info_tble_event_callback_t scan_info Once the BLE scan timeout or scan stop triggers the scan report event Refer ref at_ble_scan_report_tble_event_callback_t scan_report Advertisement complete event Refer ref at_ble_adv_cmp_evt_tble_event_callback_t advt_cmp Advertisement report in case of advertisement stopped due to advertisement timeout Refer ref at_ble_adv_report_tble_event_callback_t adv_report BLE device own random address changed event Refer ref at_ble_rand_addr_changed_tble_event_callback_t rand_addr_changed BLE connected event device connected to peer device Refer ref at_ble_connected_tble_event_callback_t connected BLE disconnected event device disconnected from peer device Refer ref at_ble_disconnected_tble_event_callback_t disconnected Connection parameter update done on peer device and own device Refer ref at_ble_conn_param_update_done_t

              ATBTLC1000Establishing Connection with Central Device

              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 26

              ble_event_callback_t conn_parameter_update_done Connection parameter update request from peer device Refer ref at_ble_conn_param_update_request_tble_event_callback_t conn_param_update_request Pair complete event as part of end of pairing process Refer ref at_ble_pair_done_tble_event_callback_t pair_done Pair request event from Central device Refer ref at_ble_pair_request_tble_event_callback_t pair_request Slave security request received from peer Peripheral device Refer ref at_ble_slave_sec_request_tble_event_callback_t slave_sec_request Pair Key request event from Peer central device Refer ref at_ble_pair_key_request_tble_event_callback_t pair_key_request encryption request comes from the peer device Needs to supply the bonding information which is stored earlier ref at_ble_encryption_request_tble_event_callback_t encryption_request encryption status changed event received from SMP once the encryption is started ref at_ble_encryption_status_changed_tble_event_callback_t encryption_status_changed Event triggered once the Resolve random address is resolved using supplied IRKs ref at_ble_resolv_rand_addr_status_tble_event_callback_t resolv_rand_addr_status Event is triggered once the connection signature information indication received ref at_ble_sign_counter_tble_event_callback_t sign_counters_ind Peer attribute information indication received Event ref at_ble_peer_att_info_ind_tble_event_callback_t peer_att_info_ind Peer device channel map received indication ref at_ble_channel_map_tble_event_callback_t con_channel_map_indble_gap_event_cb_t

              Note  Callback definition is application-specific If the application layer requires a specific event callbackthen the specific member of the structure is to be assigned with the address of the callback function

              In this assignment two callback functions on Connected and Disconnected GAP events are usedThis allows the application to restart the advertising process on Disconnect manage connectioninformation and startstop of sensor data update

              321 Handling of Connected and Disconnected GAP Events1 Open the startup_templatec file2 Define the following software flags as global variables in startup_templatec file volatile

              bool timer_flag = false and volatile bool connected_flag = false3 Declare and implement the following ble_connected_cb function in the

              startup_templatec file Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param)printf(n Assignment 22 Application connected )connected_flag = trueALL_UNUSED(param)return AT_BLE_SUCCESS

              4 Declare and implement the following ble_disconnected_cb function instartup_templatec file Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param)printf(n Assignment 22 Application disconnected )connected_flag = falsestart_advertisement()ALL_UNUSED(param)return AT_BLE_SUCCESS

              ATBTLC1000Establishing Connection with Central Device

              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 27

              5 Declare the following static GAP callback structure in ldquostartup_templatecrdquo filestatic const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTEDdisconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

              6 Add the following register_btlc1000_callbacks function in startup_templatec Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void) Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks)ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACKBLE_GAP_EVENT_TYPEampapp_gap_handle)if (ble_status = true)printf(nError when Registering ATBTLC1000 callbacks)

              7 Add the register_btlc1000_callbacks function call prior to start advertisement in theapplication main routineint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Gap Callbacks register_btlc1000_callbacks ( ) Start Advertising process start_advertisement() Register PrimaryIncluded service in case of GATT Server while(true) Write application task

              8 Add the ble_event_task function call in the project main loop to handle the different incomingevents from ATBTLC1000while(true)ble_event_task()

              9 Press button ltF7gt to compile the project and verify that no build error appear in the AtmelStudio output window

              ATBTLC1000Establishing Connection with Central Device

              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 28

              Figure 3-10 Atmel Studio Output Window

              10 Click ldquo rdquo to save the project ltCtrl+Sgt

              11 Click ldquo rdquo to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt and checkcorrect initialization of the ATBTLC1000

              12 Open the Microchip SmartConnect application on Androidtrade or iOS device13 Press the ltStart Scangt button and pair peripherals by selecting them in the device list (pass key

              123456)Note 

              1 Pairing event handling is carried out by ble_managerc Refer toble_pair_key_request_handler() for code implementation The default pass key of123456 is also fixed inside this function This can be changed here

              Figure 3-11 Console Log Window

              Note  After peripheral pairing no services information are displayed in Microchip SmartConnectapplication as no service is currently defined and started on peripheral side

              ATBTLC1000Establishing Connection with Central Device

              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 29

              4 SettingHandling of Pre-Defined ServiceThe management of services are done in the GATT layer of the ATBTLC1000 ROM coded Bluetooth LowEnergy Stack The GATT transactions are based on high-level nested objects called Profiles Servicesand Characteristics stored in SRAM memory of ATBTLC1000 device This assignment adds the pre-defined service of information service from ASF library

              Figure 4-1 ATBTLC1000 GATT Layers

              bull ProfilesProfiles are not available in the Bluetooth Low Energy peripheral they are simply a pre-definedcollection of services that have been compiled by either the Bluetooth SIG (adopted GATT basedprofile) or by the application developer (custom profiles) For example the Heart Rate Profilecombines the Heart Rate Service and the Device Information Service

              Note  The complete list of officially adopted GATT-based profiles is available on the BluetoothDeveloper Portal

              bull ServicesA service is a collection of data and associated behaviors which accomplish a particular function orfeature of a device or portions of a device A service may reference other primary or secondaryservices andor a set of characteristics that make up the service Each service distinguishes itselffrom other services by means of a unique numeric ID called as UUID which can be either 16-bit(for officially adopted Bluetooth Low Energy Services) or 128-bit (for custom services)

              Note  A full list of officially adopted services and their UUID are seen on the Bluetooth DeveloperPortal

              bull CharacteristicsA characteristic is the lowest level concept in GATT transactions It contains a single data point withdifferent attributes such as notify read or write capabilities Similar to Services each characteristiccan be distinguished by a SIG-defined adopted UUID (16-bit) or custom (128-bit) UUID This UUIDensures interoperability across Bluetooth Low Energy devices The characteristics are important tointeract with in a Bluetooth Low Energy network In addition to standard UUID the custom UUID isused in case of specific application When characteristics with custom UUID are used in a devicethen it will be interoperable only with those devices that support these characteristics with customUUID

              ATBTLC1000SettingHandling of Pre-Defined Service

              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 30

              In this assignment the following steps are added to the Host MCU application to set up and handle adevice information service within the ATBTLC1000 module The following steps are added to the startupproject

              bull Adding device info service component from ASFbull Configuring and loading the service

              Figure 4-2 Device Information Service

              41 Adding Device Info Service Component from ASF Wizard to ProjectTo use the ldquoofficially adopted GATT-based profilesrdquo from SIG ASF provides Bluetooth Low Energy servicecomponents including init functions that pre-define services in Host memory

              Note  Before starting this assignment be sure to follow the steps mentioned in 2 Creating the Projectand Initializing and 3 Establishing Connection with Central Device

              1 Click ASF gt ASF Wizard2 Search for ldquoBLE-Device Information Servicesrdquo and then click Add

              ATBTLC1000SettingHandling of Pre-Defined Service

              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 31

              Figure 4-3 Available Modules

              3 Now ldquoBLE-Device Information Servicesrdquo (component) appears in ldquoSelected ModulesrdquoFigure 4-4 Selected Modules

              4 Click Apply to add the component to the projectFigure 4-5 Adding the Modules to Project

              5 The ldquoDevice Information Servicerdquo component is added to the project and is confirmed bydevice_information folder added in Solution Explorer

              ATBTLC1000SettingHandling of Pre-Defined Service

              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 32

              Figure 4-6 Device Information Service Added to Project

              42 Configuring and Loading Device Information ServiceThe ATBTLC1000 Host driver provides a set of GATT functions that allows storing and updating theservices in ATBTLC1000 memories

              Prototype at_ble_status_t at_ble_primary_service_define(at_ble_uuid_t uuidat_ble_handle_t service_handleat_ble_included_service_t included_service_listuint16_t included_service_countat_ble_characteristic_t charactristic_listuint16_t charactristic_count)

              Description Defines a new primary service along with its included services and characteristics inATBTLC1000

              Parameters

              bull Uuid [In] ndash primary service UUIDbull service_handle [Out] ndash Service handle is returned herebull included_service_list [In] ndash an array of included service referencesbull included_service_count [In] ndash number of elements in included_service_listbull charactristic_list [InOut] ndash an array of characteristics included in the service this array

              is updated with respective characteristics handlesbull charactristic_count[In] ndash number of elements in charactristic_list

              Return Execution Status

              This function requires an argument as GATT description structure of the service that is implemented Thepreviously added Device Info service component provides Bluetooth Low Energy service middlewareincluding the init functions that predefine the services See below ldquodis_init_servicerdquo from device infoBLE service (device_infohc)

              Prototype ndash void dis_init_service(dis_gatt_service_handler_t device_info_serv)Description ndash Initialize the device information service handler in the host MCU memory

              Parameters ndash

              ATBTLC1000SettingHandling of Pre-Defined Service

              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 33

              bull device_info_serv [Inout] pointer to device info GATT description handler to beupdated

              Return None

              Here is a picture of GATT device info service descriptor definition in Host memory

              device_info_serv-gtserv_handle = 0device_info_serv-gtserv_uuidtype = AT_BLE_UUID_16device_info_serv-gtserv_uuiduuid[0] = (uint8_t) DIS_SERVICE_UUIDdevice_info_serv-gtserv_uuiduuid[1] = (uint8_t) (DIS_SERVICE_UUID gtgt 8)Characteristic Info for Manufacturer Name Stringdevice_info_serv-gtserv_chars[0]char_val_handle = 0 handle stored here device_info_serv-gtserv_chars[0]uuidtype = AT_BLE_UUID_16device_info_serv-gtserv_chars[0]uuiduuid[0] = (uint8_t) IS_CHAR_MANUFACTURER_NAME_UUID UUID Manufacturer Name String device_info_serv-gtserv_chars[0]uuiduuid[1] = (uint8_t) (DIS_CHAR_MANUFACTURER_NAME_UUID gtgt 8) UUID Manufacturer Name String device_info_serv-gtserv_chars[0]properties = AT_BLE_CHAR_READ Properties memcpy(char_valuemanufacturer_nameDEFAULT_MANUFACTURER_NAMEDIS_CHAR_MANUFACTURER_NAME_INIT_LEN)device_info_serv-gtserv_chars[0]init_value = char_valuemanufacturer_namedevice_info_serv-gtserv_chars[0]value_init_len = DIS_CHAR_MANUFACTURER_NAME_INIT_LENdevice_info_serv-gtserv_chars[0]value_max_len = DIS_CHAR_MANUFACTURER_NAME_MAX_LENif BLE_PAIR_ENABLEdevice_info_serv-gtserv_chars[0]value_permissions = AT_BLE_ATTR_READABLE_REQ_AUTHN_NO_AUTHR permissions elsedevice_info_serv-gtserv_chars[0]value_permissions = AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR permissions endifdevice_info_serv-gtserv_chars[0]user_desc = NULL user defined name device_info_serv-gtserv_chars[0]user_desc_len = 0device_info_serv-gtserv_chars[0]user_desc_max_len = 0device_info_serv-gtserv_chars[0]user_desc_permissions = AT_BLE_ATTR_NO_PERMISSIONS user description permissionsdevice_info_serv-gtserv_chars[0]client_config_permissions = AT_BLE_ATTR_NO_PERMISSIONS client config permissionsdevice_info_serm hdsv-gtserv_chars[0]server_config_permissions = AT_BLE_ATTR_NO_PERMISSIONS server config permissionsdevice_info_serv-gtserv_chars[0]user_desc_handle = 0 user desc handlesdevice_info_serv-gtserv_chars[0]client_config_handle = 0 client config handlesdevice_info_serv-gtserv_chars[0]server_config_handle = 0 server config handlesdevice_info_serv-gtserv_chars[0]presentation_format = NULL presentation format

              Note  In case of custom service the above definition initialization must be taken care of by thedeveloper

              421 Procedure to Configure and Load Device Info Service1 Include device info service header file (device_infoh) at the beginning of

              startup_templatec fileinclude ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehinclude device_infoh

              2 Define a device info service handler as global in startup_templatec file Serviceshandlers dis_gatt_service_handler_t dis_service_handler

              ATBTLC1000SettingHandling of Pre-Defined Service

              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 34

              3 Add dis_init_service and at_ble_primary_service_define functions as called abovethe advertisement start in main routine Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service)dis_init_service (ampdis_service_handler) Define the primary service in the GATT server database if ((dis_primary_service_define (ampdis_service_handler)) = AT_BLE_SUCCESS)printf(Device Information Service definition failed) Start Advertising process start_advertisement()

              4 Click to save the project ltCtrl+Sgt and compile the project by pressing button ltF7gt5 Verify that no build error appears in Atmel Studio output window

              Figure 4-7 Atmel Studio Output Window

              6 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt7 Open ldquoMicrochip SmartConnectrdquo application on Android or iOS device8 Press ltStart Scangt button and connect to peripheral

              Note  The device name is a characteristic and contains the name of the device This device namecan be read by the central device to know the name of the device in order to differentiate thedevices This is being set using at_ble_device_name_set()API The device name is set bydefault when ble_device_init is called and the value is pre-defined using BLE_DEVICE_NAMEThe device name can also be sent as part of advertisement payload to be same as the oneconfigured in at_ble_adv_data_set() API It is the responsibility of users to keep the devicename set in advertisement payload the same as that configured inat_ble_device_name_set()

              9 The Service must now be visible after pairing with peripheral under Microchip SmartConnectapplication

              ATBTLC1000SettingHandling of Pre-Defined Service

              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 35

              Figure 4-8 Service List in Microchip SmartConnect Application

              Note  If the pairing of ATBTLC1000 with Microchip Smart connect is not successful then removethe pairing information from mobile by selecting ldquoForget Devicerdquo from the mobile settings Thereason for this is that the mobile app stores the previous pairing information but the ATBTLC1000device lost the previous pairing information due to RESET since it was stored on temporary storage(RAM)

              10 The serial terminal must display the following log output windowFigure 4-9 Console Log Window

              ATBTLC1000SettingHandling of Pre-Defined Service

              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 36

              5 Setting up and Handling Custom ServiceThe previous assignment describes the handling of Bluetooth Low Energy SIG defined device infoservice which is the predefined service available in ASF component This assignment describes thecustom service So the service initialization needs to be implemented In the context of customizedenvironment service the following service description is pushed in ATBTLC1000 memory

              Figure 5-1 Custom Service

              Custom Environment Service Description

              bull UUID type ndash Custom UUID (128-bit)bull UUID ndash 1bc5d5a5-0200-a687-e511-3639c1ba5af0

              Characteristic 0 (Temperature)

              bull User Description ndash Temperaturebull UUID type ndash Custom UUID (128-bit)bull UUID ndash 1bc5d5a5-0200-a687-e511-3639d8ba5af0bull Properties ndash Read Notifybull Value permission ndash No authorization requiredbull Client config permission ndash No permissionbull Server config permission ndash No permission

              Note  In this definition UUIDs are generated randomly Custom servicescharacteristics are free to useany 128-bit UUID less than the base UUID There is no reserved space for vendors to use 16-bit or 32-bitUUIDs

              With this definition any temperature change is notified to the central The notify mechanism allows thecentral to know when the data changes When notify property of the Client Characteristic ConfigurationDescriptor is enabled by the central and the device writes the new value then this updated value isautomatically sent to the central through a notification The central is not required to send readcharacteristic commands explicitly to the peripheral (GATT server)

              To setup and handle the custom environment service in ATBTLC1000 module the following steps areadded to the Host MCU application

              bull Configure and load the custom servicebull Update Temperature characteristic and notify to the central devicebull Receive and handle notification from the Host device

              ATBTLC1000Setting up and Handling Custom Service

              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 37

              Figure 5-2 Custom Service Flowchart

              51 Configuring and Loading the Custom Environment ServiceThe ATBTLC1000 Host driver provides the following set of GATT functions that allows it to push andupdate the service descriptions in the ATBTLC1000 SRAM memory

              Note  Before starting this assignment be sure to follow the steps mentioned in 2 Creating the Projectand Initializing and 3 Establishing Connection with Central Device

              Prototype ndashat_ble_status_t at_ble_primary_service_define(at_ble_uuid_t uuidat_ble_handle_t service_handleat_ble_included_service_t included_service_listuint16_t included_service_countat_ble_characteristic_t charactristic_listuint16_t charactristic_count)

              Description ndash Defines a new primary service along with its included services and characteristics inATBTLC1000 module

              Parameters

              bull Uuid [In] ndash primary service UUIDbull service_handle [Out] ndash service handle is returned herebull included_service_list [In] ndash array of included service referencesbull included_service_count [In] ndash number of elements in included_service_listbull charactristic_list [InOut] ndash an array of characteristics included in the service this array

              is update with respective characteristics handlesbull charactristic_count[In] ndash number of elements in charactristic_list

              ATBTLC1000Setting up and Handling Custom Service

              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 38

              Return ndash Execution Status

              bull Characteristics ndashndash Characteristics definition is done through specific array of following

              ldquoat_ble_characteristic_trdquo structure instancestypedef structat_ble_handle_t char_val_handle Handler (returned during service initialisation)at_ble_uuid_t uuid Characteristic UUID (type and value)at_ble_char_properties_t propertiesCharac Properties (read write notify)uint8_t init_value initial valueuint16_t value_init_len initial value lengthuint16_t value_max_len value max lengthat_ble_attr_permissions_t value_permissions access authorization and authenticationuint8_t user_desc User descriptionuint16_t user_desc_len User description lengthuint16_t user_desc_max_len User description max lengthat_ble_char_presentation_t presentation_format Presentation formatat_ble_attr_permissions_t user_desc_permissions User description permissionat_ble_attr_permissions_t client_config_permissions client permissionat_ble_attr_permissions_t server_config_permissions server permissionat_ble_handle_t user_desc_handle description handlerat_ble_handle_t client_config_handle Client config handlerat_ble_handle_t server_config_handle Server config handler at_ble_characteristic_t

              511 Procedure to Configure and Load Custom Environment Service1 Define the following service UUID and characteristic UUID in startup_templatec file

              define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

              2 Define the following environment service handler and characteristics variable as global instartup_templatec file Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

              3 Add the following service initialization function custom_environment_service_init instartup_templatecvoid custom_environment_service_init(void) at_ble_uuid_t environment_service_uuiduint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUIDuint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperatureenvironment_service_characs[0]user_desc_len = 10environment_service_characs[0]user_desc_max_len = 10environment_service_characs[0]uuidtype = AT_BLE_UUID_128memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16)environment_service_characs[0]properties = AT_BLE_CHAR_READ |AT_BLE_CHAR_NOTIFYenvironment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature valueenvironment_service_characs[0]value_permissions =(AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuidampenvironment_service_handlerNULL0environment_service_characs1)=AT_BLE_SUCCESS)printf(n Assignment 41 Failed to Initialize custom environment service)

              ATBTLC1000Setting up and Handling Custom Service

              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 39

              elseprintf(n Assignment 41 Initialize custom environment service)

              4 Declare and implement the following GATT event callback functioncustom_char_changed_app_event in startup_templatec file If a client (central) enablesnotifications for a server the server (peripheral) receives an AT_BLE_CHARACTERISTIC_CHANGEDevent and this event callback is called Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

              5 Declare and implement the following custom_notification_confirmation_handlerfunction in startup_templatec file Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param)at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )paramif (event_param-gtstatus == AT_BLE_SUCCESS)printf(n Assignment 41Notification Successfully sent over the air) else printf(n Assignment 41Sending Notification over the air failed)return AT_BLE_SUCCESS

              6 Declare the following GATT server callback structure in startup_templatec file Thisassignment uses two GATT callbacksstatic const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handlercharacteristic_changed = custom_char_changed_app_event

              7 Add the following register_gatt_server_callbacks function in startup_templatec toregister GATT server callback for notification confirmation event Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks)ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACKBLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle)if (ble_status = true)printf(nError when Registering ATBTLC1000 callbacks)

              8 Add custom_environment_service_init and register_gatt_server_callbacksfunction calls prior to start advertisement in the application main routine to initialize custom serviceand to register the GATT server callbacksint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()

              ATBTLC1000Setting up and Handling Custom Service

              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 40

              endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks() Custom service init custom_environment_service_init ( ) Register Gatt server callbacks register_gatt_server_callbacks ( ) Start Advertising process start_advertisement()while(true)ble_event_task()

              9 Click to save the project ltCtrl+Sgt

              10 Compile the project by pressing button ltF7gt11 Verify that no build error appears in the Atmel Studio output window

              Figure 5-3 Atmel Studio Output Window

              12 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt13 Open the ldquoMicrochip SmartConnectrdquo application on Android or iOS device14 Connect and pair to the peripheral (pass key 123456)15 Custom service must now be visible after pairing with peripheral under Microchip SmartConnect

              application

              ATBTLC1000Setting up and Handling Custom Service

              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 41

              Figure 5-4 Service List in Microchip SmartConnect Application

              Note  Custom service is displayed as unknown service in the above figure as this service is not aSIG-defined service

              Figure 5-5 General Information

              16 Serial terminal client must display the following Log output

              ATBTLC1000Setting up and Handling Custom Service

              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 42

              Figure 5-6 Log Output Window

              52 Updating the Temperature CharacteristicIn the previous assignment the custom Temperature characteristic is defined with a notify attribute Thistype of attribute requires notification to be sent to central when a new characteristic value is availableThe update of any ldquonotifyrdquo characteristic value is based on following interaction between the Host MCUand the ATBTLC1000Figure 5-7 Characteristic Notification

              521 Setting a Characteristic Value ( at_ble_characteristic_value_set)Prototype ndashat_ble_status_t at_ble_characteristic_value_setat_ble_handle_t handleuint8_t valueuint16_t len)

              Description ndash Sets a characteristic value in ATBTLC1000 memory

              Parameters ndash

              ATBTLC1000Setting up and Handling Custom Service

              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 43

              bull handle [inout] ndash Pointer to Characteristic handle to be changedbull value [in] ndash New valuebull len [in] ndash Value length in bytes

              Return ndash Execution Status

              522 Sending a Notification (at_ble_notification_send)Prototype ndashat_ble_status_t at_ble_notification_send(at_ble_handle_t conn_handleat_ble_handle_t attr_handle)

              Description ndash Sends a Notification

              Parameters ndash

              bull conn_handle[in] ndash handle of the connection to be notifiedbull attr_handle [in] ndash handle of the attribute originating the notification

              Return ndash Execution Status

              523 Sending Temperature Information Once in Every 10 Seconds to Central1 Modify the following ldquotimer_callback_fnrdquo callback function from the startup_templatec

              filestatic void timer_callback_fn(void)timer_flag = true

              2 hw_timer_init()in main routine of startup_templatec initializes the hardware timer3 If a client (Central) enables the notifications for a server the server (Peripheral) receives an

              AT_BLE_CHARACTERISTIC_CHANGED event callback then start the periodic 10 second timer forsending the notification Add the following code in previously definedcustom_char_changed_app_event function Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))timer_flag = falsehw_timer_start(10)printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

              4 Declare the following Temperature_value global variable in startup_templatec staticuint8_t Temperature_value = 25 as static

              5 Add the following send_temperature_notification function in startup_templatec tosend temperature every 10 seconds Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++

              ATBTLC1000Setting up and Handling Custom Service

              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 44

              if(Temperature_value gt 75)Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set(environment_service_characs[0]char_val_handle(uint8_t )ampTemperature_valuesizeof(Temperature_value))ble_status = at_ble_notification_send(0environment_service_characs[0]char_val_handle)if(ble_status = AT_BLE_SUCCESS)printf(fail to send temperature update notification )

              6 Add the following code in main routine to send temperature data every 10 secondswhile (1) ble_event_task()if(connected_flag == true ampamp timer_flag == truetimer_flag = falsesend_temperature_notification()

              7 Click to save the project ltCtrl+Sgt

              8 Compile the project by pressing the button ltF7gt9 Verify that no build error appears in Atmel Studio output window

              Figure 5-8 Atmel Studio Output Window

              10 Click to program the project binary on the L21 Xplained XSTK11 Open ldquoMicrochip SmartConnectrdquo Application on Android or iOS device12 Connect and pair to the peripheral (pass key 123456)13 Click NOTIFY to start the notification14 Temperature information in HEX values must be displayed in Microchip SmartConnect application

              ATBTLC1000Setting up and Handling Custom Service

              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 45

              Figure 5-9 Notification Window

              15 Serial terminal must display the following log outputFigure 5-10 Log Output Window

              ATBTLC1000Setting up and Handling Custom Service

              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 46

              6 Appendix A Software Solution - Pre-Defined SvcThe following is the code implementation for handling of pre-defined service done in 4 SettingHandlingof Pre-Defined Service

              - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehinclude device_infoh

              volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false Services handlers dis_gatt_service_handler_t dis_service_handler

              static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

              void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

              Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

              Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

              static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

              Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void) Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks)

              ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 47

              ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

              timer callback function static void timer_callback_fn(void) Add timer callback functionality here

              void button_cb(void) Add button callback functionality here

              int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

              Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

              DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks()

              Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service) dis_init_service(ampdis_service_handler) Define the primary service in the GATT server database if((dis_primary_service_define(ampdis_service_handler)) = AT_BLE_SUCCESS) printf(Device Information Service definition failed)

              Start Advertising process start_advertisement() while(true) ble_event_task()

              ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 48

              7 Appendix B Software Solution - Custom ServiceThe following is the code implementation for handling of pre-defined service done in 5 Setting up andHandling Custom Service

              - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templateh

              volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false

              static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

              define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0

              define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

              Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

              void custom_environment_service_init(void) at_ble_uuid_t environment_service_uuid uint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUID uint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128 memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperature environment_service_characs[0]user_desc_len = 10 environment_service_characs[0]user_desc_max_len = 10 environment_service_characs[0]uuidtype = AT_BLE_UUID_128 memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16) environment_service_characs[0]properties = AT_BLE_CHAR_READ | AT_BLE_CHAR_NOTIFY environment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature value environment_service_characs[0]value_permissions = (AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuid ampenvironment_service_handlerNULL0 environment_service_characs1)=AT_BLE_SUCCESS) printf(n Assignment 41 Failed to Initialize custom environment service) else printf(n Assignment 41 Initialize custom environment service)

              Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param) at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )param if (event_param-gtstatus == AT_BLE_SUCCESS) printf(n Assignment 41Notification Successfully sent over the air)

              ATBTLC1000Appendix B Software Solution - Custom Service

              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 49

              else printf(n Assignment 41Sending Notification over the air failed) return AT_BLE_SUCCESS

              static at_ble_status_t custom_char_changed_app_event(void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle -gt char_new_value[0])) timer_flag = false hw_timer_start(10) printf(n Assignment 41Characteristic changed event) return AT_BLE_SUCCESS

              static const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handler characteristic_changed = custom_char_changed_app_event

              Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

              void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

              Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

              Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

              static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

              Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void)

              ATBTLC1000Appendix B Software Solution - Custom Service

              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 50

              Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

              timer callback function static void timer_callback_fn(void) Add timer callback functionality here timer_flag = true

              void button_cb(void) Add button callback functionality here

              static uint8_t Temperature_value = 25

              Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++ if(Temperature_value gt 75) Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set( environment_service_characs[0]char_val_handle (uint8_t )ampTemperature_value sizeof(Temperature_value)) ble_status = at_ble_notification_send(0 environment_service_characs[0]char_val_handle) if(ble_status = AT_BLE_SUCCESS) printf(fail to send temperature update notification )

              int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

              Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

              DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register Gap ATBTLC1000 Callbacks register_btlc1000_callbacks()

              Custom service init custom_environment_service_init()

              ATBTLC1000Appendix B Software Solution - Custom Service

              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 51

              Register Gatt server callback register_gatt_server_callbacks()

              Start Advertising process start_advertisement() while(true) ble_event_task() if(connected_flag == true ampamp timer_flag == true) timer_flag = false send_temperature_notification()

              ATBTLC1000Appendix B Software Solution - Custom Service

              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 52

              8 Document Revision HistoryRev B - 42018

              Section Changes

              Document Revised contents to match various Bluetooth Low Energy standard versions

              Rev A - 122017

              Section Changes

              Document Initial release

              ATBTLC1000Document Revision History

              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 53

              The Microchip Web Site

              Microchip provides online support via our web site at httpwwwmicrochipcom This web site is used asa means to make files and information easily available to customers Accessible by using your favoriteInternet browser the web site contains the following information

              bull Product Support ndash Data sheets and errata application notes and sample programs designresources userrsquos guides and hardware support documents latest software releases and archivedsoftware

              bull General Technical Support ndash Frequently Asked Questions (FAQ) technical support requestsonline discussion groups Microchip consultant program member listing

              bull Business of Microchip ndash Product selector and ordering guides latest Microchip press releaseslisting of seminars and events listings of Microchip sales offices distributors and factoryrepresentatives

              Customer Change Notification Service

              Microchiprsquos customer notification service helps keep customers current on Microchip productsSubscribers will receive e-mail notification whenever there are changes updates revisions or erratarelated to a specified product family or development tool of interest

              To register access the Microchip web site at httpwwwmicrochipcom Under ldquoSupportrdquo click onldquoCustomer Change Notificationrdquo and follow the registration instructions

              Customer Support

              Users of Microchip products can receive assistance through several channels

              bull Distributor or Representativebull Local Sales Officebull Field Application Engineer (FAE)bull Technical Support

              Customers should contact their distributor representative or Field Application Engineer (FAE) for supportLocal sales offices are also available to help customers A listing of sales offices and locations is includedin the back of this document

              Technical support is available through the web site at httpwwwmicrochipcomsupport

              Microchip Devices Code Protection Feature

              Note the following details of the code protection feature on Microchip devices

              bull Microchip products meet the specification contained in their particular Microchip Data Sheetbull Microchip believes that its family of products is one of the most secure families of its kind on the

              market today when used in the intended manner and under normal conditionsbull There are dishonest and possibly illegal methods used to breach the code protection feature All of

              these methods to our knowledge require using the Microchip products in a manner outside theoperating specifications contained in Microchiprsquos Data Sheets Most likely the person doing so isengaged in theft of intellectual property

              bull Microchip is willing to work with the customer who is concerned about the integrity of their code

              ATBTLC1000

              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 54

              bull Neither Microchip nor any other semiconductor manufacturer can guarantee the security of theircode Code protection does not mean that we are guaranteeing the product as ldquounbreakablerdquo

              Code protection is constantly evolving We at Microchip are committed to continuously improving thecode protection features of our products Attempts to break Microchiprsquos code protection feature may be aviolation of the Digital Millennium Copyright Act If such acts allow unauthorized access to your softwareor other copyrighted work you may have a right to sue for relief under that Act

              Legal Notice

              Information contained in this publication regarding device applications and the like is provided only foryour convenience and may be superseded by updates It is your responsibility to ensure that yourapplication meets with your specifications MICROCHIP MAKES NO REPRESENTATIONS ORWARRANTIES OF ANY KIND WHETHER EXPRESS OR IMPLIED WRITTEN OR ORAL STATUTORYOR OTHERWISE RELATED TO THE INFORMATION INCLUDING BUT NOT LIMITED TO ITSCONDITION QUALITY PERFORMANCE MERCHANTABILITY OR FITNESS FOR PURPOSEMicrochip disclaims all liability arising from this information and its use Use of Microchip devices in lifesupport andor safety applications is entirely at the buyerrsquos risk and the buyer agrees to defendindemnify and hold harmless Microchip from any and all damages claims suits or expenses resultingfrom such use No licenses are conveyed implicitly or otherwise under any Microchip intellectualproperty rights unless otherwise stated

              Trademarks

              The Microchip name and logo the Microchip logo AnyRate AVR AVR logo AVR Freaks BeaconThingsBitCloud CryptoMemory CryptoRF dsPIC FlashFlex flexPWR Heldo JukeBlox KeeLoq KeeLoq logoKleer LANCheck LINK MD maXStylus maXTouch MediaLB megaAVR MOST MOST logo MPLABOptoLyzer PIC picoPower PICSTART PIC32 logo Prochip Designer QTouch RightTouch SAM-BASpyNIC SST SST Logo SuperFlash tinyAVR UNIO and XMEGA are registered trademarks ofMicrochip Technology Incorporated in the USA and other countries

              ClockWorks The Embedded Control Solutions Company EtherSynch Hyper Speed Control HyperLightLoad IntelliMOS mTouch Precision Edge and Quiet-Wire are registered trademarks of MicrochipTechnology Incorporated in the USA

              Adjacent Key Suppression AKS Analog-for-the-Digital Age Any Capacitor AnyIn AnyOut BodyComchipKIT chipKIT logo CodeGuard CryptoAuthentication CryptoCompanion CryptoControllerdsPICDEM dsPICDEMnet Dynamic Average Matching DAM ECAN EtherGREEN In-Circuit SerialProgramming ICSP Inter-Chip Connectivity JitterBlocker KleerNet KleerNet logo Mindi MiWimotorBench MPASM MPF MPLAB Certified logo MPLIB MPLINK MultiTRAK NetDetach OmniscientCode Generation PICDEM PICDEMnet PICkit PICtail PureSilicon QMatrix RightTouch logo REALICE Ripple Blocker SAM-ICE Serial Quad IO SMART-IS SQI SuperSwitcher SuperSwitcher II TotalEndurance TSHARC USBCheck VariSense ViewSpan WiperLock Wireless DNA and ZENA aretrademarks of Microchip Technology Incorporated in the USA and other countries

              SQTP is a service mark of Microchip Technology Incorporated in the USA

              Silicon Storage Technology is a registered trademark of Microchip Technology Inc in other countries

              GestIC is a registered trademark of Microchip Technology Germany II GmbH amp Co KG a subsidiary ofMicrochip Technology Inc in other countries

              All other trademarks mentioned herein are property of their respective companies

              ATBTLC1000

              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 55

              copy 2018 Microchip Technology Incorporated Printed in the USA All Rights Reserved

              ISBN 978-1-5224-2921-0

              Quality Management System Certified by DNV

              ISOTS 16949Microchip received ISOTS-169492009 certification for its worldwide headquarters design and waferfabrication facilities in Chandler and Tempe Arizona Gresham Oregon and design centers in Californiaand India The Companyrsquos quality system processes and procedures are for its PICreg MCUs and dsPICreg

              DSCs KEELOQreg code hopping devices Serial EEPROMs microperipherals nonvolatile memory andanalog products In addition Microchiprsquos quality system for the design and manufacture of developmentsystems is ISO 90012000 certified

              ATBTLC1000

              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 56

              AMERICAS ASIAPACIFIC ASIAPACIFIC EUROPECorporate Office2355 West Chandler BlvdChandler AZ 85224-6199Tel 480-792-7200Fax 480-792-7277Technical SupporthttpwwwmicrochipcomsupportWeb AddresswwwmicrochipcomAtlantaDuluth GATel 678-957-9614Fax 678-957-1455Austin TXTel 512-257-3370BostonWestborough MATel 774-760-0087Fax 774-760-0088ChicagoItasca ILTel 630-285-0071Fax 630-285-0075DallasAddison TXTel 972-818-7423Fax 972-818-2924DetroitNovi MITel 248-848-4000Houston TXTel 281-894-5983IndianapolisNoblesville INTel 317-773-8323Fax 317-773-5453Tel 317-536-2380Los AngelesMission Viejo CATel 949-462-9523Fax 949-462-9608Tel 951-273-7800Raleigh NCTel 919-844-7510New York NYTel 631-435-6000San Jose CATel 408-735-9110Tel 408-436-4270Canada - TorontoTel 905-695-1980Fax 905-695-2078

              Australia - SydneyTel 61-2-9868-6733China - BeijingTel 86-10-8569-7000China - ChengduTel 86-28-8665-5511China - ChongqingTel 86-23-8980-9588China - DongguanTel 86-769-8702-9880China - GuangzhouTel 86-20-8755-8029China - HangzhouTel 86-571-8792-8115China - Hong Kong SARTel 852-2943-5100China - NanjingTel 86-25-8473-2460China - QingdaoTel 86-532-8502-7355China - ShanghaiTel 86-21-3326-8000China - ShenyangTel 86-24-2334-2829China - ShenzhenTel 86-755-8864-2200China - SuzhouTel 86-186-6233-1526China - WuhanTel 86-27-5980-5300China - XianTel 86-29-8833-7252China - XiamenTel 86-592-2388138China - ZhuhaiTel 86-756-3210040

              India - BangaloreTel 91-80-3090-4444India - New DelhiTel 91-11-4160-8631India - PuneTel 91-20-4121-0141Japan - OsakaTel 81-6-6152-7160Japan - TokyoTel 81-3-6880- 3770Korea - DaeguTel 82-53-744-4301Korea - SeoulTel 82-2-554-7200Malaysia - Kuala LumpurTel 60-3-7651-7906Malaysia - PenangTel 60-4-227-8870Philippines - ManilaTel 63-2-634-9065SingaporeTel 65-6334-8870Taiwan - Hsin ChuTel 886-3-577-8366Taiwan - KaohsiungTel 886-7-213-7830Taiwan - TaipeiTel 886-2-2508-8600Thailand - BangkokTel 66-2-694-1351Vietnam - Ho Chi MinhTel 84-28-5448-2100

              Austria - WelsTel 43-7242-2244-39Fax 43-7242-2244-393Denmark - CopenhagenTel 45-4450-2828Fax 45-4485-2829Finland - EspooTel 358-9-4520-820France - ParisTel 33-1-69-53-63-20Fax 33-1-69-30-90-79Germany - GarchingTel 49-8931-9700Germany - HaanTel 49-2129-3766400Germany - HeilbronnTel 49-7131-67-3636Germany - KarlsruheTel 49-721-625370Germany - MunichTel 49-89-627-144-0Fax 49-89-627-144-44Germany - RosenheimTel 49-8031-354-560Israel - RarsquoananaTel 972-9-744-7705Italy - MilanTel 39-0331-742611Fax 39-0331-466781Italy - PadovaTel 39-049-7625286Netherlands - DrunenTel 31-416-690399Fax 31-416-690340Norway - TrondheimTel 47-7289-7561Poland - WarsawTel 48-22-3325737Romania - BucharestTel 40-21-407-87-50Spain - MadridTel 34-91-708-08-90Fax 34-91-708-08-91Sweden - GothenbergTel 46-31-704-60-40Sweden - StockholmTel 46-8-5090-4654UK - WokinghamTel 44-118-921-5800Fax 44-118-921-5820

              Worldwide Sales and Service

              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 57

              • Introduction
              • Table of Contents
              • 1 Getting Started
                • 11 Software Prerequisites
                  • 111 Installation Steps of Atmel Studio 7
                    • 12 Software Setup
                      • 121 Installation of Microchip SmartConnect application on a Mobile device
                        • 13 ATBTLC1000 Embedded Firmware
                        • 14 ATBTLC1000 Host Software API
                        • 15 Hardware Prerequisites
                          • 151 SMARTtrade SAM L21 Xplained Pro
                          • 152 ATBTLC1000ZR Xplained Pro Extension board
                            • 16 Hardware Setup
                              • 2 Creating the Project and Initializing
                                • 21 Creating Project from ASF
                                • 22 Configuring ASF for ATBTLC1000-ZR
                                • 23 Compiling and Testing the Project
                                  • 3 Establishing Connection with Central Device
                                    • 31 Configuring and Starting the Advertisement Process
                                      • 311 Flags (AD Type 0x00)
                                      • 312 Available Service UUID (AD Types 0x02 to 0x07)
                                      • 313 Device Name (AD Types 0x08 to 0x09)
                                        • 3131 Setting the Advertisement Payload (ble_advertisement_data_set)
                                        • 3132 Starting the Advertisement Process (at_ble_adv_start)
                                          • 314 Advertisement Process
                                            • 3141 Starting the Advertisement Process
                                                • 32 Managing GAP events
                                                  • 321 Handling of Connected and Disconnected GAP Events
                                                      • 4 SettingHandling of Pre-Defined Service
                                                        • 41 Adding Device Info Service Component from ASF Wizard to Project
                                                        • 42 Configuring and Loading Device Information Service
                                                          • 421 Procedure to Configure and Load Device Info Service
                                                              • 5 Setting up and Handling Custom Service
                                                                • 51 Configuring and Loading the Custom Environment Service
                                                                  • 511 Procedure to Configure and Load Custom Environment Service
                                                                    • 52 Updating the Temperature Characteristic
                                                                      • 521 Setting a Characteristic Value ( at_ble_characteristic_value_set)
                                                                      • 522 Sending a Notification (at_ble_notification_send)
                                                                      • 523 Sending Temperature Information Once in Every 10 Seconds to Central
                                                                          • 6 Appendix A Software Solution - Pre-Defined Svc
                                                                          • 7 Appendix B Software Solution - Custom Service
                                                                          • 8 Document Revision History
                                                                          • The Microchip Web Site
                                                                          • Customer Change Notification Service
                                                                          • Customer Support
                                                                          • Microchip Devices Code Protection Feature
                                                                          • Legal Notice
                                                                          • Trademarks
                                                                          • Quality Management System Certified by DNV
                                                                          • Worldwide Sales and Service

                Figure 1-5 SAM L21 Xplained Pro Module

                152 ATBTLC1000ZR Xplained Pro Extension boardThe ATBTLC1000ZR Xplained Pro extension evaluation kit is Bluetooth Low Energy SoC ATBTLC1000-ZR110CA module This extension is plugged to any of the supported host MCU Xplained Pro evaluationboards to quickly add Bluetooth Low Energy connectivity to the platform This kit provides easy access tothe features of the ATBTLC1000-ZR110CA Bluetooth Low Energy module and illustrates how to integratethe device in a custom design which is supported by the Atmel Studio integrated development platform

                ATBTLC1000Getting Started

                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 8

                Figure 1-6 ATBTLC1000ZR Xpro Board

                The ATBTLC1000ZR Xplained Pro extension board contains

                bull ATBLTC1000-ZR110CA Module ndash Bluetooth Low Energy module with 24 GHz Bluetooth LowEnergy ATBTLC1000-XR1100A SiP

                bull AT30TSE758A Digital Temperature Sensor ndash Integrated temperature sensor with nonvolatileregisters and serial EEPROM Compatible with two-wire (I2C) and SMBus serial interfaces

                bull Current Measurement Header ndash Allows measurement of the current consumption of the board Itmust be closed to enable power to the ATBTLC1000-ZR110CA module

                16 Hardware Setup1 Ensure that ATBTLC1000ZR-XPRO power consumption header is closed and that jumpers are

                placed on pins 2 to 3 of headers J105 J106 J107 and J108 as shown in the following figure

                ATBTLC1000Getting Started

                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 9

                Figure 1-7 ATBTLC1000ZR-XPRO Extension

                2 Connect the ATBTLC1000ZR-XPRO extension to EXT1 of SAM L21 XPRO as illustrated in thefollowing figureFigure 1-8 ATBTLC1000ZR-XPRO Extension connected with SAM L21 XPRO

                3 Connect the board to PC using the ldquoDebug USB ConnectorrdquoFigure 1-9 SAM L21 XPRO Connection to PC

                ATBTLC1000Getting Started

                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 10

                4 Now the Hardware is ready for development

                ATBTLC1000Getting Started

                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 11

                2 Creating the Project and InitializingThis chapter provides the process of creating an application startup project using Atmel Studio Prior tocreating a project the user must know hardware architecture and software requirements to configuredrivers

                The hardware connection between the SAM L21 XPRO and the ATBTLC1000ZR XPRO board isillustrated in following figure This SAM L21 board is used as host MCUFigure 2-1 ATBTLC1000ZR Xpro Board Connection with SAM L21

                Note  For more details refer to module datasheet and XPRO board design documentation

                21 Creating Project from ASFAdvanced Software Framework has a pre-configured Bluetooth Low Energy Startup template project thatincludes Bluetooth Low Energy software API for Host and ATBTLC1000 and their peripheral driverdependencies This is used as starting project for any Bluetooth Low Energy project development

                To create the project follow the steps below

                1 Search for the ldquoBLE-Startup Templaterdquo from the File gt New gt Example Project menu in AtmelStudio

                ATBTLC1000Creating the Project and Initializing

                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 12

                Figure 2-2 Advanced Software Framework_New Example Project

                Note  ATBTLC1000SAMB11 related projects are prefixed with ldquoBLErdquo making it easier to filter theproject in the dialogue box

                2 Select the appropriate ldquoBLE-Startup Templaterdquo project corresponding to the intended Host MCUXplained Pro board and then press OK button to import the BLE startup template project SelectldquoBLE-Startup Template ndash SAM L21 Xplained Pro SAML21J18Brdquo for this hands-onNote  Rev B XPRO boards can be identified by SAML21J18B silk screen marking below SAML21MCU

                3 The BLE startup project is now created and loaded in Atmel StudioFigure 2-3 Startup_Template Project

                ATBTLC1000Creating the Project and Initializing

                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 13

                Note  The main project routine of ldquoStartup Template projectrdquo already includes host MCU low levelinitialization BLE and ATBTLC1000 initialization The added ASF components in project can beviewed from ldquoASFgtASF Wizardrdquo Select the created project from Project drop down box

                Figure 2-4 ASF Wizard Window

                ndash BLE_STACK Platform Interface ndash Core manager of Bluetooth Low Energy Host API Itmanages ATBTLC1000 device initialization GAP and GATT events

                ndash Timer Driver ndash Task timer functionality by using a Timer Counter (TC) or Timer Counter forControl (TCC) peripheral

                ndash Console UART ndash Universal Asynchronous ReceiverTransmitter (UART) communication insynchronousblocking mode

                ndash Generic Board Support ndash Host MCU Board specific initializationndash System Drivers ndash Select MCUrsquos System peripheral drivers These drivers are included by

                default in ASF projects and manage the clocks and oscillator of the system4 The main routine contains the MCU low level initialization and ATBTLC1000 initialization The

                following figure illustrates the flowchart of the main routine

                ATBTLC1000Creating the Project and Initializing

                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 14

                Figure 2-5 Main Routine Flowchart

                22 Configuring ASF for ATBTLC1000-ZR1 The default ldquoStartup Template Projectrdquo is configured for ATBTLC1000-MR module with 6-Wire

                mode2 Navigate to Project properties Project gt Project properties gt Toolchain gt ARMGNU C Compiler gt

                Symbols3 The ATBTLC1000ZR-XSTK kit uses the ATBTLC1000-ZR110CA module Change symbol

                BLE_MODULE to BTLC1000_ZR and enable UART_FLOWCONTROL_4WIRE_MODE forATBTLC1000-ZR module as shown in the figure belowFigure 2-6 Startup Template Project Window

                Note  This configuration change is not required for ATBTLC1000-MR module

                ATBTLC1000Creating the Project and Initializing

                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 15

                23 Compiling and Testing the Project

                1 Click the ldquo rdquo button ltF7gt to compile the project2 Verify that no build error appears in Atmel Studio output window

                Figure 2-7 Atmel Studio Output Window

                3 Connect the SAM L21 XPRO to PC (if not already done)4 To access the project properties go to Project gt

                STARTUP_TEMPLATE_SAML21_XPLAINED_PRO_B1 PropertiesFigure 2-8 Compiling the Project

                5 In project properties click the Tool tab and select the EDBG of SAM L21 Xplained Pro board asdebuggerprogrammerFigure 2-9 Selection of DebuggerProgrammer

                6 Open any Terminal application (for example TeraTerm) Select the COM port enumerated on thePC and set the following parameters

                ndash EDBG associated COM Port (Check Windows Device Manager)

                ATBTLC1000Creating the Project and Initializing

                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 16

                ndash Baudrate 115200ndash Parity Nonendash One Stop bitndash Enable Hardware Flow Control

                7 Click to save the project ltCtrl+Sgt

                8 Click rdquo to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt9 The initialization of the ATBTLC1000ZR module must return the Bluetooth Device Address and

                Address typeFigure 2-10 Console Log Window

                Note 1 If initialization fails make sure to verify the hardware configuration is aligned with the

                description refer to 16 Hardware Setup2 The initialization of ATBTLC1000 takes few seconds due to patch download process

                ATBTLC1000Creating the Project and Initializing

                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 17

                3 Establishing Connection with Central DeviceThe Bluetooth Low Energy connectivity is added to the application that is used to connect with theBluetooth Low Energy central The first step is about the management of Bluetooth connection with acentral device When using ATBTLC1000 device this process is managed by dedicated API function callsassociated with ATBTLC1000 events handling

                The interaction between Host MCU ATBTLC1000 and Bluetooth Low Energy central during connectionestablishment is as follows

                Figure 3-1 Establishing Connection with Central Device

                On host MCU side the management of the Bluetooth connection is performed through three main steps1 GAP callback registration2 Advertisement configuration3 ATBTLC1000 event handling

                In the existing project main routine the integration of these steps are highlighted in red in the followingflowchart

                ATBTLC1000Establishing Connection with Central Device

                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 18

                Figure 3-2 Main Routine Flow Chart

                31 Configuring and Starting the Advertisement ProcessThe Bluetooth Low Energy devices transmit advertisement packets to show their presence to nearbydevices The advertisement packet is sent periodically at a time interval defined by variableldquoadvintervalrdquo defined in Bluetooth SIG specification To avoid any collision with other wireless networksuch as Wi-Fireg a channel change is performed for each advertisement packet sent (data frequencyhopping) as illustrated in the following figureFigure 3-3 Advertisement Process

                During advertisement the payload structure to be sent differs from application to application and is set byusing encapsulated packet data unit type information (PDU_TYPE)

                ATBTLC1000Establishing Connection with Central Device

                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 19

                Figure 3-4 PDU Advertising

                The following table lists the different PDU types used according to device role

                Advertising event types (PDU_TYPE) Broadcaster Observer Peripheral Central

                Connectible undirected event (ADV_IND) Excluded Excluded Mandatory Excluded

                Connectible directed event(ADV_DIRECT_IND) Excluded Excluded Optional Excluded

                Non-connectible undirected event(ADV_NONCONN_IND) Mandatory Excluded Optional Excluded

                Scannable undirected event (ADV_SCAN_IND) Optional Excluded Optional Excluded

                As our device acts as a Bluetooth Low Energy peripheral the connectable undirected event (ADV_IND)advertising type is used See the following description about the ADV_IND advertisement packetFigure 3-5 ADV_IND Advertisement Packet

                The ADV_IND payload contains different Advertisement Data types (AD0 - ADn) which provide specificinformation to the central device such as device short name Tx power level and list of availableservices UUIDs The number of advertisement data types that can be added to the advertisementpayload are limited by the advertisement payload size of 31 octets

                Following is a list of advertisement data types that are commonly found in ADV_IND payload

                ATBTLC1000Establishing Connection with Central Device

                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 20

                311 Flags (AD Type 0x00)The flags describe the basic device capability such as BLE support BLE discoverable mode BREDRsupport and simultaneous BRED

                312 Available Service UUID (AD Types 0x02 to 0x07)The Bluetooth Low Energy advertisement payloads are limited to 31 bytes Therefore only two 128-bitUUID values can be added to the payload For this purpose the specific AD types describe the length ofthe advertised UUID and provide information as to whether the payload contains a incompletecompletelist of UUID supported by the GATT server

                bull 0x02 - Incomplete list of 16-bit UUIDs (adopted GATT services)bull 0x03 - Complete list of 16-bit UUIDs (adopted GATT services)bull 0x06 - Incomplete list of 128-bit UUIDs (custom GATT services)bull 0x07 - Complete list of 128-bit UUIDs (custom GATT services)

                Note  When a 16-bit UUID is transmitted only the unique 2-byte value is sent The client knows that it isrequired to be injected into the base UUID For example the Health Thermometer Service is assigned as0x1809 so its equivalent UUID is 00001809-0000-1000-8000-00805F9B34FB

                313 Device Name (AD Types 0x08 to 0x09)This AD type field is used to advertise the Local name of device in the network The Local name datatype value indicates if the name is complete or shortened If the name is shortened the complete namecan be read after the connection is established

                bull 0x08 - Shortened Local Namebull 0x09 - Complete Local Name

                Note 1 A shortened name contains only continuous characters from the beginning of the full name For

                example if the device name is BT_Device_Name then the shortened name can beBT_Device or BT_Dev

                2 Complete data type list are available at httpswwwbluetoothcomspecificationsassigned-numbersgeneric-access-profile

                For management of advertisement process and cover the different configurations specified by SIG theATBTLC1000 Host driver provides the two functions elaborated in the following sections

                In the application use these two functions to setup the following ADV_IN type payloadFigure 3-6 ADV_IN Type Payload Process

                ATBTLC1000Establishing Connection with Central Device

                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 21

                3131 Setting the Advertisement Payload (ble_advertisement_data_set)Prototype ndashat_ble_status_t at_ble_adv_data_set (uint8_t const const adv_datauint8_t adv_data_lenuint8_t const const scan_resp_datauint8_t scan_response_data_len)

                Description ndash Set clear or update the advertisement and scan response data

                Parameters ndash

                bull adv_data ndash Raw data to be placed in advertisement packetbull adv_data_len ndash Data length for adv_data Max size 28 bytes (3 bytes are reserved to set

                advertising AD type flags based on the selected Advertising mode and the user is not required toconfigure AD type flags in the advertisement payload)

                bull scan_resp_data ndash Raw data to be placed in the scan response packet If NULL no changes aremade to the current scan response packet data

                bull scan_response_data_len ndash Data length for scan_resp_data Max size 31 bytes

                Return ndash Execution Status

                This function requires a parameter raw adv_data to be sent to central Following is an example of itsdefinition

                static uint8_t adv_data[] = 0x11 AD1 length = 170x03 AD1 Type = Complete list of 128-bit UUIDs0x1b0xc50xd50xa50x020x000xa60x87 AD1 = UUID MSBs0xe50x110x360x390xc00xba0x5a0xf00x0A AD2 Length = 100x09 AD2 Type = Complete local NamelsquoMrsquorsquoyrsquorsquo_rsquorsquoDrsquorsquoErsquorsquoVrsquo AD2 = ldquoMy_DEVrdquo

                3132 Starting the Advertisement Process (at_ble_adv_start)Prototype ndashat_ble_status_t at_ble_adv_start (at_ble_adv_type_t typeat_ble_adv_mode_t modeat_ble_addr_t peer_addrat_ble_filter_type_t filtereduint16_t intervaluint16_t timeoutbool disable_randomness)

                Description ndash Start advertisement process

                Parameters ndash

                bull type ndash Advertising type to be used can bendash AT_BLE_ADV_TYPE_UNDIRECTEDndash AT_BLE_ADV_TYPE_DIRECTEDndash AT_BLE_ADV_TYPE_SCANNABLE_UNDIRECTEDndash AT_BLE_ADV_TYPE_NONCONN_UNDIRECTEDndash AT_BLE_ADV_TYPE_DIRECTED_LDCndash AT_BLE_ADV_TYPE_SCAN_RESPONSE

                bull mode ndash Advertising mode to be used can be

                ATBTLC1000Establishing Connection with Central Device

                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 22

                ndash AT_BLE_ADV_NON_DISCOVERABLEndash AT_BLE_ADV_GEN_DISCOVERABLEndash AT_BLE_ADV_LIM_DISCOVERABLEndash AT_BLE_ADV_BROADCASTER_MODE

                bull peer_addr ndash Specify peer address when advertising type is AT_BLE_ADV_TYPE_DIRECTEDbull filtered ndash

                ndash AT_BLE_ADV_FP_ANY ndash Allow scan and connection requests from anyonendash AT_BLE_ADV_FP_FILTER_SCANREQ ndash Allow scan request from White List devices onlyndash AT_BLE_ADV_FP_FILTER_CONNREQ ndash Allow connection request from White List devices

                onlyndash AT_BLE_ADV_FP_FILTER_BOTH ndash Allow scan and connection requests from White List

                devices onlybull interval ndash Advertisement interval (in 0625 ms units)bull timeout ndash Advertising timeout between 0x0001 and 0x028F in scale of seconds This parameter

                must be set to 0 if type equals AT_BLE_ADV_TYPE_DIRECTEDbull disable_randomness ndash When disabled advertisements are performed at the exact interval

                without adding random 10 ms tempo

                Return ndash Execution Status

                314 Advertisement ProcessIn this assignment the advertisement process is performed in the following configuration

                bull Undirected (Type AT_BLE_ADV_TYPE_UNDIRECTED)bull Discoverable (Mode AT_BLE_ADV_GEN_DISCOVERABLE)bull No peer Address (peer_addr = NULL)bull No filtering (filtered = AT_BLE_ADV_FP_ANY)bull Advertisement interval 1s (interval = 1600)bull Maximum timeout (timeout 655)bull Randomness enabled (disable_randomness = FALSE)

                3141 Starting the Advertisement Process1 Open startup_templatec file2 Declare the following ble_status global variable in startup_templatec as volatile

                include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehvolatile at_ble_status_t ble_status

                3 Declare the following adv_data global variable in startup_templatec as staticstatic uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD)0x09 AD2 Type = Complete local Name

                ATBTLC1000Establishing Connection with Central Device

                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 23

                My_SENS AD2 = ldquoMy_SENSrdquo

                Note 1 The name of the device is to be changed (AD2 field)2 According to the new name AD2 length must be adapted to new AD2 content

                4 Add the following start_advertisement function in startup_templatec prototype for thefunction void start_advertisement (void) also this can be added to avoid warningsvoid start_advertisement (void)printf(n Assignment 21 Start Advertisement)Set advertisement datable_status = at_ble_adv_data_set(adv_datasizeof(adv_data)NULL0)Start Advertisementble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550)if(ble_status = AT_BLE_SUCCESS)printf(n Failed to start advertisement)

                5 Start the advertisement process by adding the following highlighted code to the application mainroutineint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Start Advertising process start_advertisement() Register PrimaryIncluded service in case of GATT Server while(true) Write application task

                6 Click to save the project ltCtrl+Sgt

                7 Click button to compile the project ltF7gt8 Verify that no build error appears in Atmel Studio output window

                Figure 3-7 Atmel Studio Output Window

                ATBTLC1000Establishing Connection with Central Device

                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 24

                9 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt10 Open Microchip SmartConnect Application on Android or iOS device and tap START SCAN button

                Note  The device must appear in Microchip SmartConnect Application

                Figure 3-8 Microchip SmartConnect Application

                11 Terminal must display the following Log outputFigure 3-9 Log Output Window

                32 Managing GAP eventsThe management of the Bluetooth connection at the host MCU level is done through reception andhandling of events reported by the ATBTLC1000 These events are generated by ATBTLC1000 GAPGATT and L2CAP layers to notify the host about the ongoing Bluetooth interaction with other devices inits vicinity

                ATBTLC1000Establishing Connection with Central Device

                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 25

                To manage events coming from the ATBTLC1000 module the host driver must provide able_mgr_events_callback_handler function that allows registration of application callback functionto be executed on each event reported by the ATBTLC1000 module

                Prototype ndashbool ble_mgr_events_callback_handler(ble_mgr_event_cb_t event_cb_typeble_mgr_event_t event_typeconst voidble_event_handler)

                Description ndash Used by ProfileServiceApplication to register the Bluetooth Low Energy eventsrsquocallbacks

                Parameters ndash

                event_cb_type ndash types of actions to perform on callbacks can be either

                REGISTER_CALL_BACK or

                UNREGISTER_CALL_BACKevent_type ndash Any one of the event types can be used

                BLE_GAP_EVENT_TYPEBLE_GATT_CLIENT_EVENT_TYPEBLE_GATT_SERVER_EVENT_TYPEBLE_L2CAP_EVENT_TYPEBLE_GATT_HTPT_EVENT_TYPEBLE_DTM_EVENT_TYPEBLE_CUSTOM_EVENT_TYPEble_event_handler ndash pointer to handler list

                Structure ble_gap_event_cb_t defines the GAP callbacks Similarly structuresble_gatt_client_event_cb_t and ble_gatt_server_event_cb_t define the callbacks of GATTevents

                typedef struct ble_gap_event_cb BLE Undefined events received from ATBTLC1000 which is not handled in Libraryble_event_callback_t undefined BLE scan information contains the peer device scan information Refer ref at_ble_scan_info_tble_event_callback_t scan_info Once the BLE scan timeout or scan stop triggers the scan report event Refer ref at_ble_scan_report_tble_event_callback_t scan_report Advertisement complete event Refer ref at_ble_adv_cmp_evt_tble_event_callback_t advt_cmp Advertisement report in case of advertisement stopped due to advertisement timeout Refer ref at_ble_adv_report_tble_event_callback_t adv_report BLE device own random address changed event Refer ref at_ble_rand_addr_changed_tble_event_callback_t rand_addr_changed BLE connected event device connected to peer device Refer ref at_ble_connected_tble_event_callback_t connected BLE disconnected event device disconnected from peer device Refer ref at_ble_disconnected_tble_event_callback_t disconnected Connection parameter update done on peer device and own device Refer ref at_ble_conn_param_update_done_t

                ATBTLC1000Establishing Connection with Central Device

                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 26

                ble_event_callback_t conn_parameter_update_done Connection parameter update request from peer device Refer ref at_ble_conn_param_update_request_tble_event_callback_t conn_param_update_request Pair complete event as part of end of pairing process Refer ref at_ble_pair_done_tble_event_callback_t pair_done Pair request event from Central device Refer ref at_ble_pair_request_tble_event_callback_t pair_request Slave security request received from peer Peripheral device Refer ref at_ble_slave_sec_request_tble_event_callback_t slave_sec_request Pair Key request event from Peer central device Refer ref at_ble_pair_key_request_tble_event_callback_t pair_key_request encryption request comes from the peer device Needs to supply the bonding information which is stored earlier ref at_ble_encryption_request_tble_event_callback_t encryption_request encryption status changed event received from SMP once the encryption is started ref at_ble_encryption_status_changed_tble_event_callback_t encryption_status_changed Event triggered once the Resolve random address is resolved using supplied IRKs ref at_ble_resolv_rand_addr_status_tble_event_callback_t resolv_rand_addr_status Event is triggered once the connection signature information indication received ref at_ble_sign_counter_tble_event_callback_t sign_counters_ind Peer attribute information indication received Event ref at_ble_peer_att_info_ind_tble_event_callback_t peer_att_info_ind Peer device channel map received indication ref at_ble_channel_map_tble_event_callback_t con_channel_map_indble_gap_event_cb_t

                Note  Callback definition is application-specific If the application layer requires a specific event callbackthen the specific member of the structure is to be assigned with the address of the callback function

                In this assignment two callback functions on Connected and Disconnected GAP events are usedThis allows the application to restart the advertising process on Disconnect manage connectioninformation and startstop of sensor data update

                321 Handling of Connected and Disconnected GAP Events1 Open the startup_templatec file2 Define the following software flags as global variables in startup_templatec file volatile

                bool timer_flag = false and volatile bool connected_flag = false3 Declare and implement the following ble_connected_cb function in the

                startup_templatec file Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param)printf(n Assignment 22 Application connected )connected_flag = trueALL_UNUSED(param)return AT_BLE_SUCCESS

                4 Declare and implement the following ble_disconnected_cb function instartup_templatec file Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param)printf(n Assignment 22 Application disconnected )connected_flag = falsestart_advertisement()ALL_UNUSED(param)return AT_BLE_SUCCESS

                ATBTLC1000Establishing Connection with Central Device

                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 27

                5 Declare the following static GAP callback structure in ldquostartup_templatecrdquo filestatic const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTEDdisconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                6 Add the following register_btlc1000_callbacks function in startup_templatec Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void) Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks)ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACKBLE_GAP_EVENT_TYPEampapp_gap_handle)if (ble_status = true)printf(nError when Registering ATBTLC1000 callbacks)

                7 Add the register_btlc1000_callbacks function call prior to start advertisement in theapplication main routineint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Gap Callbacks register_btlc1000_callbacks ( ) Start Advertising process start_advertisement() Register PrimaryIncluded service in case of GATT Server while(true) Write application task

                8 Add the ble_event_task function call in the project main loop to handle the different incomingevents from ATBTLC1000while(true)ble_event_task()

                9 Press button ltF7gt to compile the project and verify that no build error appear in the AtmelStudio output window

                ATBTLC1000Establishing Connection with Central Device

                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 28

                Figure 3-10 Atmel Studio Output Window

                10 Click ldquo rdquo to save the project ltCtrl+Sgt

                11 Click ldquo rdquo to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt and checkcorrect initialization of the ATBTLC1000

                12 Open the Microchip SmartConnect application on Androidtrade or iOS device13 Press the ltStart Scangt button and pair peripherals by selecting them in the device list (pass key

                123456)Note 

                1 Pairing event handling is carried out by ble_managerc Refer toble_pair_key_request_handler() for code implementation The default pass key of123456 is also fixed inside this function This can be changed here

                Figure 3-11 Console Log Window

                Note  After peripheral pairing no services information are displayed in Microchip SmartConnectapplication as no service is currently defined and started on peripheral side

                ATBTLC1000Establishing Connection with Central Device

                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 29

                4 SettingHandling of Pre-Defined ServiceThe management of services are done in the GATT layer of the ATBTLC1000 ROM coded Bluetooth LowEnergy Stack The GATT transactions are based on high-level nested objects called Profiles Servicesand Characteristics stored in SRAM memory of ATBTLC1000 device This assignment adds the pre-defined service of information service from ASF library

                Figure 4-1 ATBTLC1000 GATT Layers

                bull ProfilesProfiles are not available in the Bluetooth Low Energy peripheral they are simply a pre-definedcollection of services that have been compiled by either the Bluetooth SIG (adopted GATT basedprofile) or by the application developer (custom profiles) For example the Heart Rate Profilecombines the Heart Rate Service and the Device Information Service

                Note  The complete list of officially adopted GATT-based profiles is available on the BluetoothDeveloper Portal

                bull ServicesA service is a collection of data and associated behaviors which accomplish a particular function orfeature of a device or portions of a device A service may reference other primary or secondaryservices andor a set of characteristics that make up the service Each service distinguishes itselffrom other services by means of a unique numeric ID called as UUID which can be either 16-bit(for officially adopted Bluetooth Low Energy Services) or 128-bit (for custom services)

                Note  A full list of officially adopted services and their UUID are seen on the Bluetooth DeveloperPortal

                bull CharacteristicsA characteristic is the lowest level concept in GATT transactions It contains a single data point withdifferent attributes such as notify read or write capabilities Similar to Services each characteristiccan be distinguished by a SIG-defined adopted UUID (16-bit) or custom (128-bit) UUID This UUIDensures interoperability across Bluetooth Low Energy devices The characteristics are important tointeract with in a Bluetooth Low Energy network In addition to standard UUID the custom UUID isused in case of specific application When characteristics with custom UUID are used in a devicethen it will be interoperable only with those devices that support these characteristics with customUUID

                ATBTLC1000SettingHandling of Pre-Defined Service

                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 30

                In this assignment the following steps are added to the Host MCU application to set up and handle adevice information service within the ATBTLC1000 module The following steps are added to the startupproject

                bull Adding device info service component from ASFbull Configuring and loading the service

                Figure 4-2 Device Information Service

                41 Adding Device Info Service Component from ASF Wizard to ProjectTo use the ldquoofficially adopted GATT-based profilesrdquo from SIG ASF provides Bluetooth Low Energy servicecomponents including init functions that pre-define services in Host memory

                Note  Before starting this assignment be sure to follow the steps mentioned in 2 Creating the Projectand Initializing and 3 Establishing Connection with Central Device

                1 Click ASF gt ASF Wizard2 Search for ldquoBLE-Device Information Servicesrdquo and then click Add

                ATBTLC1000SettingHandling of Pre-Defined Service

                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 31

                Figure 4-3 Available Modules

                3 Now ldquoBLE-Device Information Servicesrdquo (component) appears in ldquoSelected ModulesrdquoFigure 4-4 Selected Modules

                4 Click Apply to add the component to the projectFigure 4-5 Adding the Modules to Project

                5 The ldquoDevice Information Servicerdquo component is added to the project and is confirmed bydevice_information folder added in Solution Explorer

                ATBTLC1000SettingHandling of Pre-Defined Service

                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 32

                Figure 4-6 Device Information Service Added to Project

                42 Configuring and Loading Device Information ServiceThe ATBTLC1000 Host driver provides a set of GATT functions that allows storing and updating theservices in ATBTLC1000 memories

                Prototype at_ble_status_t at_ble_primary_service_define(at_ble_uuid_t uuidat_ble_handle_t service_handleat_ble_included_service_t included_service_listuint16_t included_service_countat_ble_characteristic_t charactristic_listuint16_t charactristic_count)

                Description Defines a new primary service along with its included services and characteristics inATBTLC1000

                Parameters

                bull Uuid [In] ndash primary service UUIDbull service_handle [Out] ndash Service handle is returned herebull included_service_list [In] ndash an array of included service referencesbull included_service_count [In] ndash number of elements in included_service_listbull charactristic_list [InOut] ndash an array of characteristics included in the service this array

                is updated with respective characteristics handlesbull charactristic_count[In] ndash number of elements in charactristic_list

                Return Execution Status

                This function requires an argument as GATT description structure of the service that is implemented Thepreviously added Device Info service component provides Bluetooth Low Energy service middlewareincluding the init functions that predefine the services See below ldquodis_init_servicerdquo from device infoBLE service (device_infohc)

                Prototype ndash void dis_init_service(dis_gatt_service_handler_t device_info_serv)Description ndash Initialize the device information service handler in the host MCU memory

                Parameters ndash

                ATBTLC1000SettingHandling of Pre-Defined Service

                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 33

                bull device_info_serv [Inout] pointer to device info GATT description handler to beupdated

                Return None

                Here is a picture of GATT device info service descriptor definition in Host memory

                device_info_serv-gtserv_handle = 0device_info_serv-gtserv_uuidtype = AT_BLE_UUID_16device_info_serv-gtserv_uuiduuid[0] = (uint8_t) DIS_SERVICE_UUIDdevice_info_serv-gtserv_uuiduuid[1] = (uint8_t) (DIS_SERVICE_UUID gtgt 8)Characteristic Info for Manufacturer Name Stringdevice_info_serv-gtserv_chars[0]char_val_handle = 0 handle stored here device_info_serv-gtserv_chars[0]uuidtype = AT_BLE_UUID_16device_info_serv-gtserv_chars[0]uuiduuid[0] = (uint8_t) IS_CHAR_MANUFACTURER_NAME_UUID UUID Manufacturer Name String device_info_serv-gtserv_chars[0]uuiduuid[1] = (uint8_t) (DIS_CHAR_MANUFACTURER_NAME_UUID gtgt 8) UUID Manufacturer Name String device_info_serv-gtserv_chars[0]properties = AT_BLE_CHAR_READ Properties memcpy(char_valuemanufacturer_nameDEFAULT_MANUFACTURER_NAMEDIS_CHAR_MANUFACTURER_NAME_INIT_LEN)device_info_serv-gtserv_chars[0]init_value = char_valuemanufacturer_namedevice_info_serv-gtserv_chars[0]value_init_len = DIS_CHAR_MANUFACTURER_NAME_INIT_LENdevice_info_serv-gtserv_chars[0]value_max_len = DIS_CHAR_MANUFACTURER_NAME_MAX_LENif BLE_PAIR_ENABLEdevice_info_serv-gtserv_chars[0]value_permissions = AT_BLE_ATTR_READABLE_REQ_AUTHN_NO_AUTHR permissions elsedevice_info_serv-gtserv_chars[0]value_permissions = AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR permissions endifdevice_info_serv-gtserv_chars[0]user_desc = NULL user defined name device_info_serv-gtserv_chars[0]user_desc_len = 0device_info_serv-gtserv_chars[0]user_desc_max_len = 0device_info_serv-gtserv_chars[0]user_desc_permissions = AT_BLE_ATTR_NO_PERMISSIONS user description permissionsdevice_info_serv-gtserv_chars[0]client_config_permissions = AT_BLE_ATTR_NO_PERMISSIONS client config permissionsdevice_info_serm hdsv-gtserv_chars[0]server_config_permissions = AT_BLE_ATTR_NO_PERMISSIONS server config permissionsdevice_info_serv-gtserv_chars[0]user_desc_handle = 0 user desc handlesdevice_info_serv-gtserv_chars[0]client_config_handle = 0 client config handlesdevice_info_serv-gtserv_chars[0]server_config_handle = 0 server config handlesdevice_info_serv-gtserv_chars[0]presentation_format = NULL presentation format

                Note  In case of custom service the above definition initialization must be taken care of by thedeveloper

                421 Procedure to Configure and Load Device Info Service1 Include device info service header file (device_infoh) at the beginning of

                startup_templatec fileinclude ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehinclude device_infoh

                2 Define a device info service handler as global in startup_templatec file Serviceshandlers dis_gatt_service_handler_t dis_service_handler

                ATBTLC1000SettingHandling of Pre-Defined Service

                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 34

                3 Add dis_init_service and at_ble_primary_service_define functions as called abovethe advertisement start in main routine Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service)dis_init_service (ampdis_service_handler) Define the primary service in the GATT server database if ((dis_primary_service_define (ampdis_service_handler)) = AT_BLE_SUCCESS)printf(Device Information Service definition failed) Start Advertising process start_advertisement()

                4 Click to save the project ltCtrl+Sgt and compile the project by pressing button ltF7gt5 Verify that no build error appears in Atmel Studio output window

                Figure 4-7 Atmel Studio Output Window

                6 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt7 Open ldquoMicrochip SmartConnectrdquo application on Android or iOS device8 Press ltStart Scangt button and connect to peripheral

                Note  The device name is a characteristic and contains the name of the device This device namecan be read by the central device to know the name of the device in order to differentiate thedevices This is being set using at_ble_device_name_set()API The device name is set bydefault when ble_device_init is called and the value is pre-defined using BLE_DEVICE_NAMEThe device name can also be sent as part of advertisement payload to be same as the oneconfigured in at_ble_adv_data_set() API It is the responsibility of users to keep the devicename set in advertisement payload the same as that configured inat_ble_device_name_set()

                9 The Service must now be visible after pairing with peripheral under Microchip SmartConnectapplication

                ATBTLC1000SettingHandling of Pre-Defined Service

                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 35

                Figure 4-8 Service List in Microchip SmartConnect Application

                Note  If the pairing of ATBTLC1000 with Microchip Smart connect is not successful then removethe pairing information from mobile by selecting ldquoForget Devicerdquo from the mobile settings Thereason for this is that the mobile app stores the previous pairing information but the ATBTLC1000device lost the previous pairing information due to RESET since it was stored on temporary storage(RAM)

                10 The serial terminal must display the following log output windowFigure 4-9 Console Log Window

                ATBTLC1000SettingHandling of Pre-Defined Service

                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 36

                5 Setting up and Handling Custom ServiceThe previous assignment describes the handling of Bluetooth Low Energy SIG defined device infoservice which is the predefined service available in ASF component This assignment describes thecustom service So the service initialization needs to be implemented In the context of customizedenvironment service the following service description is pushed in ATBTLC1000 memory

                Figure 5-1 Custom Service

                Custom Environment Service Description

                bull UUID type ndash Custom UUID (128-bit)bull UUID ndash 1bc5d5a5-0200-a687-e511-3639c1ba5af0

                Characteristic 0 (Temperature)

                bull User Description ndash Temperaturebull UUID type ndash Custom UUID (128-bit)bull UUID ndash 1bc5d5a5-0200-a687-e511-3639d8ba5af0bull Properties ndash Read Notifybull Value permission ndash No authorization requiredbull Client config permission ndash No permissionbull Server config permission ndash No permission

                Note  In this definition UUIDs are generated randomly Custom servicescharacteristics are free to useany 128-bit UUID less than the base UUID There is no reserved space for vendors to use 16-bit or 32-bitUUIDs

                With this definition any temperature change is notified to the central The notify mechanism allows thecentral to know when the data changes When notify property of the Client Characteristic ConfigurationDescriptor is enabled by the central and the device writes the new value then this updated value isautomatically sent to the central through a notification The central is not required to send readcharacteristic commands explicitly to the peripheral (GATT server)

                To setup and handle the custom environment service in ATBTLC1000 module the following steps areadded to the Host MCU application

                bull Configure and load the custom servicebull Update Temperature characteristic and notify to the central devicebull Receive and handle notification from the Host device

                ATBTLC1000Setting up and Handling Custom Service

                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 37

                Figure 5-2 Custom Service Flowchart

                51 Configuring and Loading the Custom Environment ServiceThe ATBTLC1000 Host driver provides the following set of GATT functions that allows it to push andupdate the service descriptions in the ATBTLC1000 SRAM memory

                Note  Before starting this assignment be sure to follow the steps mentioned in 2 Creating the Projectand Initializing and 3 Establishing Connection with Central Device

                Prototype ndashat_ble_status_t at_ble_primary_service_define(at_ble_uuid_t uuidat_ble_handle_t service_handleat_ble_included_service_t included_service_listuint16_t included_service_countat_ble_characteristic_t charactristic_listuint16_t charactristic_count)

                Description ndash Defines a new primary service along with its included services and characteristics inATBTLC1000 module

                Parameters

                bull Uuid [In] ndash primary service UUIDbull service_handle [Out] ndash service handle is returned herebull included_service_list [In] ndash array of included service referencesbull included_service_count [In] ndash number of elements in included_service_listbull charactristic_list [InOut] ndash an array of characteristics included in the service this array

                is update with respective characteristics handlesbull charactristic_count[In] ndash number of elements in charactristic_list

                ATBTLC1000Setting up and Handling Custom Service

                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 38

                Return ndash Execution Status

                bull Characteristics ndashndash Characteristics definition is done through specific array of following

                ldquoat_ble_characteristic_trdquo structure instancestypedef structat_ble_handle_t char_val_handle Handler (returned during service initialisation)at_ble_uuid_t uuid Characteristic UUID (type and value)at_ble_char_properties_t propertiesCharac Properties (read write notify)uint8_t init_value initial valueuint16_t value_init_len initial value lengthuint16_t value_max_len value max lengthat_ble_attr_permissions_t value_permissions access authorization and authenticationuint8_t user_desc User descriptionuint16_t user_desc_len User description lengthuint16_t user_desc_max_len User description max lengthat_ble_char_presentation_t presentation_format Presentation formatat_ble_attr_permissions_t user_desc_permissions User description permissionat_ble_attr_permissions_t client_config_permissions client permissionat_ble_attr_permissions_t server_config_permissions server permissionat_ble_handle_t user_desc_handle description handlerat_ble_handle_t client_config_handle Client config handlerat_ble_handle_t server_config_handle Server config handler at_ble_characteristic_t

                511 Procedure to Configure and Load Custom Environment Service1 Define the following service UUID and characteristic UUID in startup_templatec file

                define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

                2 Define the following environment service handler and characteristics variable as global instartup_templatec file Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

                3 Add the following service initialization function custom_environment_service_init instartup_templatecvoid custom_environment_service_init(void) at_ble_uuid_t environment_service_uuiduint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUIDuint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperatureenvironment_service_characs[0]user_desc_len = 10environment_service_characs[0]user_desc_max_len = 10environment_service_characs[0]uuidtype = AT_BLE_UUID_128memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16)environment_service_characs[0]properties = AT_BLE_CHAR_READ |AT_BLE_CHAR_NOTIFYenvironment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature valueenvironment_service_characs[0]value_permissions =(AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuidampenvironment_service_handlerNULL0environment_service_characs1)=AT_BLE_SUCCESS)printf(n Assignment 41 Failed to Initialize custom environment service)

                ATBTLC1000Setting up and Handling Custom Service

                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 39

                elseprintf(n Assignment 41 Initialize custom environment service)

                4 Declare and implement the following GATT event callback functioncustom_char_changed_app_event in startup_templatec file If a client (central) enablesnotifications for a server the server (peripheral) receives an AT_BLE_CHARACTERISTIC_CHANGEDevent and this event callback is called Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

                5 Declare and implement the following custom_notification_confirmation_handlerfunction in startup_templatec file Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param)at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )paramif (event_param-gtstatus == AT_BLE_SUCCESS)printf(n Assignment 41Notification Successfully sent over the air) else printf(n Assignment 41Sending Notification over the air failed)return AT_BLE_SUCCESS

                6 Declare the following GATT server callback structure in startup_templatec file Thisassignment uses two GATT callbacksstatic const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handlercharacteristic_changed = custom_char_changed_app_event

                7 Add the following register_gatt_server_callbacks function in startup_templatec toregister GATT server callback for notification confirmation event Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks)ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACKBLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle)if (ble_status = true)printf(nError when Registering ATBTLC1000 callbacks)

                8 Add custom_environment_service_init and register_gatt_server_callbacksfunction calls prior to start advertisement in the application main routine to initialize custom serviceand to register the GATT server callbacksint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()

                ATBTLC1000Setting up and Handling Custom Service

                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 40

                endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks() Custom service init custom_environment_service_init ( ) Register Gatt server callbacks register_gatt_server_callbacks ( ) Start Advertising process start_advertisement()while(true)ble_event_task()

                9 Click to save the project ltCtrl+Sgt

                10 Compile the project by pressing button ltF7gt11 Verify that no build error appears in the Atmel Studio output window

                Figure 5-3 Atmel Studio Output Window

                12 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt13 Open the ldquoMicrochip SmartConnectrdquo application on Android or iOS device14 Connect and pair to the peripheral (pass key 123456)15 Custom service must now be visible after pairing with peripheral under Microchip SmartConnect

                application

                ATBTLC1000Setting up and Handling Custom Service

                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 41

                Figure 5-4 Service List in Microchip SmartConnect Application

                Note  Custom service is displayed as unknown service in the above figure as this service is not aSIG-defined service

                Figure 5-5 General Information

                16 Serial terminal client must display the following Log output

                ATBTLC1000Setting up and Handling Custom Service

                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 42

                Figure 5-6 Log Output Window

                52 Updating the Temperature CharacteristicIn the previous assignment the custom Temperature characteristic is defined with a notify attribute Thistype of attribute requires notification to be sent to central when a new characteristic value is availableThe update of any ldquonotifyrdquo characteristic value is based on following interaction between the Host MCUand the ATBTLC1000Figure 5-7 Characteristic Notification

                521 Setting a Characteristic Value ( at_ble_characteristic_value_set)Prototype ndashat_ble_status_t at_ble_characteristic_value_setat_ble_handle_t handleuint8_t valueuint16_t len)

                Description ndash Sets a characteristic value in ATBTLC1000 memory

                Parameters ndash

                ATBTLC1000Setting up and Handling Custom Service

                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 43

                bull handle [inout] ndash Pointer to Characteristic handle to be changedbull value [in] ndash New valuebull len [in] ndash Value length in bytes

                Return ndash Execution Status

                522 Sending a Notification (at_ble_notification_send)Prototype ndashat_ble_status_t at_ble_notification_send(at_ble_handle_t conn_handleat_ble_handle_t attr_handle)

                Description ndash Sends a Notification

                Parameters ndash

                bull conn_handle[in] ndash handle of the connection to be notifiedbull attr_handle [in] ndash handle of the attribute originating the notification

                Return ndash Execution Status

                523 Sending Temperature Information Once in Every 10 Seconds to Central1 Modify the following ldquotimer_callback_fnrdquo callback function from the startup_templatec

                filestatic void timer_callback_fn(void)timer_flag = true

                2 hw_timer_init()in main routine of startup_templatec initializes the hardware timer3 If a client (Central) enables the notifications for a server the server (Peripheral) receives an

                AT_BLE_CHARACTERISTIC_CHANGED event callback then start the periodic 10 second timer forsending the notification Add the following code in previously definedcustom_char_changed_app_event function Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))timer_flag = falsehw_timer_start(10)printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

                4 Declare the following Temperature_value global variable in startup_templatec staticuint8_t Temperature_value = 25 as static

                5 Add the following send_temperature_notification function in startup_templatec tosend temperature every 10 seconds Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++

                ATBTLC1000Setting up and Handling Custom Service

                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 44

                if(Temperature_value gt 75)Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set(environment_service_characs[0]char_val_handle(uint8_t )ampTemperature_valuesizeof(Temperature_value))ble_status = at_ble_notification_send(0environment_service_characs[0]char_val_handle)if(ble_status = AT_BLE_SUCCESS)printf(fail to send temperature update notification )

                6 Add the following code in main routine to send temperature data every 10 secondswhile (1) ble_event_task()if(connected_flag == true ampamp timer_flag == truetimer_flag = falsesend_temperature_notification()

                7 Click to save the project ltCtrl+Sgt

                8 Compile the project by pressing the button ltF7gt9 Verify that no build error appears in Atmel Studio output window

                Figure 5-8 Atmel Studio Output Window

                10 Click to program the project binary on the L21 Xplained XSTK11 Open ldquoMicrochip SmartConnectrdquo Application on Android or iOS device12 Connect and pair to the peripheral (pass key 123456)13 Click NOTIFY to start the notification14 Temperature information in HEX values must be displayed in Microchip SmartConnect application

                ATBTLC1000Setting up and Handling Custom Service

                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 45

                Figure 5-9 Notification Window

                15 Serial terminal must display the following log outputFigure 5-10 Log Output Window

                ATBTLC1000Setting up and Handling Custom Service

                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 46

                6 Appendix A Software Solution - Pre-Defined SvcThe following is the code implementation for handling of pre-defined service done in 4 SettingHandlingof Pre-Defined Service

                - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehinclude device_infoh

                volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false Services handlers dis_gatt_service_handler_t dis_service_handler

                static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

                void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void) Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks)

                ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 47

                ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                timer callback function static void timer_callback_fn(void) Add timer callback functionality here

                void button_cb(void) Add button callback functionality here

                int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks()

                Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service) dis_init_service(ampdis_service_handler) Define the primary service in the GATT server database if((dis_primary_service_define(ampdis_service_handler)) = AT_BLE_SUCCESS) printf(Device Information Service definition failed)

                Start Advertising process start_advertisement() while(true) ble_event_task()

                ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 48

                7 Appendix B Software Solution - Custom ServiceThe following is the code implementation for handling of pre-defined service done in 5 Setting up andHandling Custom Service

                - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templateh

                volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false

                static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

                define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0

                define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

                Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

                void custom_environment_service_init(void) at_ble_uuid_t environment_service_uuid uint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUID uint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128 memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperature environment_service_characs[0]user_desc_len = 10 environment_service_characs[0]user_desc_max_len = 10 environment_service_characs[0]uuidtype = AT_BLE_UUID_128 memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16) environment_service_characs[0]properties = AT_BLE_CHAR_READ | AT_BLE_CHAR_NOTIFY environment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature value environment_service_characs[0]value_permissions = (AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuid ampenvironment_service_handlerNULL0 environment_service_characs1)=AT_BLE_SUCCESS) printf(n Assignment 41 Failed to Initialize custom environment service) else printf(n Assignment 41 Initialize custom environment service)

                Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param) at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )param if (event_param-gtstatus == AT_BLE_SUCCESS) printf(n Assignment 41Notification Successfully sent over the air)

                ATBTLC1000Appendix B Software Solution - Custom Service

                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 49

                else printf(n Assignment 41Sending Notification over the air failed) return AT_BLE_SUCCESS

                static at_ble_status_t custom_char_changed_app_event(void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle -gt char_new_value[0])) timer_flag = false hw_timer_start(10) printf(n Assignment 41Characteristic changed event) return AT_BLE_SUCCESS

                static const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handler characteristic_changed = custom_char_changed_app_event

                Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void)

                ATBTLC1000Appendix B Software Solution - Custom Service

                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 50

                Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                timer callback function static void timer_callback_fn(void) Add timer callback functionality here timer_flag = true

                void button_cb(void) Add button callback functionality here

                static uint8_t Temperature_value = 25

                Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++ if(Temperature_value gt 75) Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set( environment_service_characs[0]char_val_handle (uint8_t )ampTemperature_value sizeof(Temperature_value)) ble_status = at_ble_notification_send(0 environment_service_characs[0]char_val_handle) if(ble_status = AT_BLE_SUCCESS) printf(fail to send temperature update notification )

                int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register Gap ATBTLC1000 Callbacks register_btlc1000_callbacks()

                Custom service init custom_environment_service_init()

                ATBTLC1000Appendix B Software Solution - Custom Service

                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 51

                Register Gatt server callback register_gatt_server_callbacks()

                Start Advertising process start_advertisement() while(true) ble_event_task() if(connected_flag == true ampamp timer_flag == true) timer_flag = false send_temperature_notification()

                ATBTLC1000Appendix B Software Solution - Custom Service

                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 52

                8 Document Revision HistoryRev B - 42018

                Section Changes

                Document Revised contents to match various Bluetooth Low Energy standard versions

                Rev A - 122017

                Section Changes

                Document Initial release

                ATBTLC1000Document Revision History

                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 53

                The Microchip Web Site

                Microchip provides online support via our web site at httpwwwmicrochipcom This web site is used asa means to make files and information easily available to customers Accessible by using your favoriteInternet browser the web site contains the following information

                bull Product Support ndash Data sheets and errata application notes and sample programs designresources userrsquos guides and hardware support documents latest software releases and archivedsoftware

                bull General Technical Support ndash Frequently Asked Questions (FAQ) technical support requestsonline discussion groups Microchip consultant program member listing

                bull Business of Microchip ndash Product selector and ordering guides latest Microchip press releaseslisting of seminars and events listings of Microchip sales offices distributors and factoryrepresentatives

                Customer Change Notification Service

                Microchiprsquos customer notification service helps keep customers current on Microchip productsSubscribers will receive e-mail notification whenever there are changes updates revisions or erratarelated to a specified product family or development tool of interest

                To register access the Microchip web site at httpwwwmicrochipcom Under ldquoSupportrdquo click onldquoCustomer Change Notificationrdquo and follow the registration instructions

                Customer Support

                Users of Microchip products can receive assistance through several channels

                bull Distributor or Representativebull Local Sales Officebull Field Application Engineer (FAE)bull Technical Support

                Customers should contact their distributor representative or Field Application Engineer (FAE) for supportLocal sales offices are also available to help customers A listing of sales offices and locations is includedin the back of this document

                Technical support is available through the web site at httpwwwmicrochipcomsupport

                Microchip Devices Code Protection Feature

                Note the following details of the code protection feature on Microchip devices

                bull Microchip products meet the specification contained in their particular Microchip Data Sheetbull Microchip believes that its family of products is one of the most secure families of its kind on the

                market today when used in the intended manner and under normal conditionsbull There are dishonest and possibly illegal methods used to breach the code protection feature All of

                these methods to our knowledge require using the Microchip products in a manner outside theoperating specifications contained in Microchiprsquos Data Sheets Most likely the person doing so isengaged in theft of intellectual property

                bull Microchip is willing to work with the customer who is concerned about the integrity of their code

                ATBTLC1000

                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 54

                bull Neither Microchip nor any other semiconductor manufacturer can guarantee the security of theircode Code protection does not mean that we are guaranteeing the product as ldquounbreakablerdquo

                Code protection is constantly evolving We at Microchip are committed to continuously improving thecode protection features of our products Attempts to break Microchiprsquos code protection feature may be aviolation of the Digital Millennium Copyright Act If such acts allow unauthorized access to your softwareor other copyrighted work you may have a right to sue for relief under that Act

                Legal Notice

                Information contained in this publication regarding device applications and the like is provided only foryour convenience and may be superseded by updates It is your responsibility to ensure that yourapplication meets with your specifications MICROCHIP MAKES NO REPRESENTATIONS ORWARRANTIES OF ANY KIND WHETHER EXPRESS OR IMPLIED WRITTEN OR ORAL STATUTORYOR OTHERWISE RELATED TO THE INFORMATION INCLUDING BUT NOT LIMITED TO ITSCONDITION QUALITY PERFORMANCE MERCHANTABILITY OR FITNESS FOR PURPOSEMicrochip disclaims all liability arising from this information and its use Use of Microchip devices in lifesupport andor safety applications is entirely at the buyerrsquos risk and the buyer agrees to defendindemnify and hold harmless Microchip from any and all damages claims suits or expenses resultingfrom such use No licenses are conveyed implicitly or otherwise under any Microchip intellectualproperty rights unless otherwise stated

                Trademarks

                The Microchip name and logo the Microchip logo AnyRate AVR AVR logo AVR Freaks BeaconThingsBitCloud CryptoMemory CryptoRF dsPIC FlashFlex flexPWR Heldo JukeBlox KeeLoq KeeLoq logoKleer LANCheck LINK MD maXStylus maXTouch MediaLB megaAVR MOST MOST logo MPLABOptoLyzer PIC picoPower PICSTART PIC32 logo Prochip Designer QTouch RightTouch SAM-BASpyNIC SST SST Logo SuperFlash tinyAVR UNIO and XMEGA are registered trademarks ofMicrochip Technology Incorporated in the USA and other countries

                ClockWorks The Embedded Control Solutions Company EtherSynch Hyper Speed Control HyperLightLoad IntelliMOS mTouch Precision Edge and Quiet-Wire are registered trademarks of MicrochipTechnology Incorporated in the USA

                Adjacent Key Suppression AKS Analog-for-the-Digital Age Any Capacitor AnyIn AnyOut BodyComchipKIT chipKIT logo CodeGuard CryptoAuthentication CryptoCompanion CryptoControllerdsPICDEM dsPICDEMnet Dynamic Average Matching DAM ECAN EtherGREEN In-Circuit SerialProgramming ICSP Inter-Chip Connectivity JitterBlocker KleerNet KleerNet logo Mindi MiWimotorBench MPASM MPF MPLAB Certified logo MPLIB MPLINK MultiTRAK NetDetach OmniscientCode Generation PICDEM PICDEMnet PICkit PICtail PureSilicon QMatrix RightTouch logo REALICE Ripple Blocker SAM-ICE Serial Quad IO SMART-IS SQI SuperSwitcher SuperSwitcher II TotalEndurance TSHARC USBCheck VariSense ViewSpan WiperLock Wireless DNA and ZENA aretrademarks of Microchip Technology Incorporated in the USA and other countries

                SQTP is a service mark of Microchip Technology Incorporated in the USA

                Silicon Storage Technology is a registered trademark of Microchip Technology Inc in other countries

                GestIC is a registered trademark of Microchip Technology Germany II GmbH amp Co KG a subsidiary ofMicrochip Technology Inc in other countries

                All other trademarks mentioned herein are property of their respective companies

                ATBTLC1000

                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 55

                copy 2018 Microchip Technology Incorporated Printed in the USA All Rights Reserved

                ISBN 978-1-5224-2921-0

                Quality Management System Certified by DNV

                ISOTS 16949Microchip received ISOTS-169492009 certification for its worldwide headquarters design and waferfabrication facilities in Chandler and Tempe Arizona Gresham Oregon and design centers in Californiaand India The Companyrsquos quality system processes and procedures are for its PICreg MCUs and dsPICreg

                DSCs KEELOQreg code hopping devices Serial EEPROMs microperipherals nonvolatile memory andanalog products In addition Microchiprsquos quality system for the design and manufacture of developmentsystems is ISO 90012000 certified

                ATBTLC1000

                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 56

                AMERICAS ASIAPACIFIC ASIAPACIFIC EUROPECorporate Office2355 West Chandler BlvdChandler AZ 85224-6199Tel 480-792-7200Fax 480-792-7277Technical SupporthttpwwwmicrochipcomsupportWeb AddresswwwmicrochipcomAtlantaDuluth GATel 678-957-9614Fax 678-957-1455Austin TXTel 512-257-3370BostonWestborough MATel 774-760-0087Fax 774-760-0088ChicagoItasca ILTel 630-285-0071Fax 630-285-0075DallasAddison TXTel 972-818-7423Fax 972-818-2924DetroitNovi MITel 248-848-4000Houston TXTel 281-894-5983IndianapolisNoblesville INTel 317-773-8323Fax 317-773-5453Tel 317-536-2380Los AngelesMission Viejo CATel 949-462-9523Fax 949-462-9608Tel 951-273-7800Raleigh NCTel 919-844-7510New York NYTel 631-435-6000San Jose CATel 408-735-9110Tel 408-436-4270Canada - TorontoTel 905-695-1980Fax 905-695-2078

                Australia - SydneyTel 61-2-9868-6733China - BeijingTel 86-10-8569-7000China - ChengduTel 86-28-8665-5511China - ChongqingTel 86-23-8980-9588China - DongguanTel 86-769-8702-9880China - GuangzhouTel 86-20-8755-8029China - HangzhouTel 86-571-8792-8115China - Hong Kong SARTel 852-2943-5100China - NanjingTel 86-25-8473-2460China - QingdaoTel 86-532-8502-7355China - ShanghaiTel 86-21-3326-8000China - ShenyangTel 86-24-2334-2829China - ShenzhenTel 86-755-8864-2200China - SuzhouTel 86-186-6233-1526China - WuhanTel 86-27-5980-5300China - XianTel 86-29-8833-7252China - XiamenTel 86-592-2388138China - ZhuhaiTel 86-756-3210040

                India - BangaloreTel 91-80-3090-4444India - New DelhiTel 91-11-4160-8631India - PuneTel 91-20-4121-0141Japan - OsakaTel 81-6-6152-7160Japan - TokyoTel 81-3-6880- 3770Korea - DaeguTel 82-53-744-4301Korea - SeoulTel 82-2-554-7200Malaysia - Kuala LumpurTel 60-3-7651-7906Malaysia - PenangTel 60-4-227-8870Philippines - ManilaTel 63-2-634-9065SingaporeTel 65-6334-8870Taiwan - Hsin ChuTel 886-3-577-8366Taiwan - KaohsiungTel 886-7-213-7830Taiwan - TaipeiTel 886-2-2508-8600Thailand - BangkokTel 66-2-694-1351Vietnam - Ho Chi MinhTel 84-28-5448-2100

                Austria - WelsTel 43-7242-2244-39Fax 43-7242-2244-393Denmark - CopenhagenTel 45-4450-2828Fax 45-4485-2829Finland - EspooTel 358-9-4520-820France - ParisTel 33-1-69-53-63-20Fax 33-1-69-30-90-79Germany - GarchingTel 49-8931-9700Germany - HaanTel 49-2129-3766400Germany - HeilbronnTel 49-7131-67-3636Germany - KarlsruheTel 49-721-625370Germany - MunichTel 49-89-627-144-0Fax 49-89-627-144-44Germany - RosenheimTel 49-8031-354-560Israel - RarsquoananaTel 972-9-744-7705Italy - MilanTel 39-0331-742611Fax 39-0331-466781Italy - PadovaTel 39-049-7625286Netherlands - DrunenTel 31-416-690399Fax 31-416-690340Norway - TrondheimTel 47-7289-7561Poland - WarsawTel 48-22-3325737Romania - BucharestTel 40-21-407-87-50Spain - MadridTel 34-91-708-08-90Fax 34-91-708-08-91Sweden - GothenbergTel 46-31-704-60-40Sweden - StockholmTel 46-8-5090-4654UK - WokinghamTel 44-118-921-5800Fax 44-118-921-5820

                Worldwide Sales and Service

                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 57

                • Introduction
                • Table of Contents
                • 1 Getting Started
                  • 11 Software Prerequisites
                    • 111 Installation Steps of Atmel Studio 7
                      • 12 Software Setup
                        • 121 Installation of Microchip SmartConnect application on a Mobile device
                          • 13 ATBTLC1000 Embedded Firmware
                          • 14 ATBTLC1000 Host Software API
                          • 15 Hardware Prerequisites
                            • 151 SMARTtrade SAM L21 Xplained Pro
                            • 152 ATBTLC1000ZR Xplained Pro Extension board
                              • 16 Hardware Setup
                                • 2 Creating the Project and Initializing
                                  • 21 Creating Project from ASF
                                  • 22 Configuring ASF for ATBTLC1000-ZR
                                  • 23 Compiling and Testing the Project
                                    • 3 Establishing Connection with Central Device
                                      • 31 Configuring and Starting the Advertisement Process
                                        • 311 Flags (AD Type 0x00)
                                        • 312 Available Service UUID (AD Types 0x02 to 0x07)
                                        • 313 Device Name (AD Types 0x08 to 0x09)
                                          • 3131 Setting the Advertisement Payload (ble_advertisement_data_set)
                                          • 3132 Starting the Advertisement Process (at_ble_adv_start)
                                            • 314 Advertisement Process
                                              • 3141 Starting the Advertisement Process
                                                  • 32 Managing GAP events
                                                    • 321 Handling of Connected and Disconnected GAP Events
                                                        • 4 SettingHandling of Pre-Defined Service
                                                          • 41 Adding Device Info Service Component from ASF Wizard to Project
                                                          • 42 Configuring and Loading Device Information Service
                                                            • 421 Procedure to Configure and Load Device Info Service
                                                                • 5 Setting up and Handling Custom Service
                                                                  • 51 Configuring and Loading the Custom Environment Service
                                                                    • 511 Procedure to Configure and Load Custom Environment Service
                                                                      • 52 Updating the Temperature Characteristic
                                                                        • 521 Setting a Characteristic Value ( at_ble_characteristic_value_set)
                                                                        • 522 Sending a Notification (at_ble_notification_send)
                                                                        • 523 Sending Temperature Information Once in Every 10 Seconds to Central
                                                                            • 6 Appendix A Software Solution - Pre-Defined Svc
                                                                            • 7 Appendix B Software Solution - Custom Service
                                                                            • 8 Document Revision History
                                                                            • The Microchip Web Site
                                                                            • Customer Change Notification Service
                                                                            • Customer Support
                                                                            • Microchip Devices Code Protection Feature
                                                                            • Legal Notice
                                                                            • Trademarks
                                                                            • Quality Management System Certified by DNV
                                                                            • Worldwide Sales and Service

                  Figure 1-6 ATBTLC1000ZR Xpro Board

                  The ATBTLC1000ZR Xplained Pro extension board contains

                  bull ATBLTC1000-ZR110CA Module ndash Bluetooth Low Energy module with 24 GHz Bluetooth LowEnergy ATBTLC1000-XR1100A SiP

                  bull AT30TSE758A Digital Temperature Sensor ndash Integrated temperature sensor with nonvolatileregisters and serial EEPROM Compatible with two-wire (I2C) and SMBus serial interfaces

                  bull Current Measurement Header ndash Allows measurement of the current consumption of the board Itmust be closed to enable power to the ATBTLC1000-ZR110CA module

                  16 Hardware Setup1 Ensure that ATBTLC1000ZR-XPRO power consumption header is closed and that jumpers are

                  placed on pins 2 to 3 of headers J105 J106 J107 and J108 as shown in the following figure

                  ATBTLC1000Getting Started

                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 9

                  Figure 1-7 ATBTLC1000ZR-XPRO Extension

                  2 Connect the ATBTLC1000ZR-XPRO extension to EXT1 of SAM L21 XPRO as illustrated in thefollowing figureFigure 1-8 ATBTLC1000ZR-XPRO Extension connected with SAM L21 XPRO

                  3 Connect the board to PC using the ldquoDebug USB ConnectorrdquoFigure 1-9 SAM L21 XPRO Connection to PC

                  ATBTLC1000Getting Started

                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 10

                  4 Now the Hardware is ready for development

                  ATBTLC1000Getting Started

                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 11

                  2 Creating the Project and InitializingThis chapter provides the process of creating an application startup project using Atmel Studio Prior tocreating a project the user must know hardware architecture and software requirements to configuredrivers

                  The hardware connection between the SAM L21 XPRO and the ATBTLC1000ZR XPRO board isillustrated in following figure This SAM L21 board is used as host MCUFigure 2-1 ATBTLC1000ZR Xpro Board Connection with SAM L21

                  Note  For more details refer to module datasheet and XPRO board design documentation

                  21 Creating Project from ASFAdvanced Software Framework has a pre-configured Bluetooth Low Energy Startup template project thatincludes Bluetooth Low Energy software API for Host and ATBTLC1000 and their peripheral driverdependencies This is used as starting project for any Bluetooth Low Energy project development

                  To create the project follow the steps below

                  1 Search for the ldquoBLE-Startup Templaterdquo from the File gt New gt Example Project menu in AtmelStudio

                  ATBTLC1000Creating the Project and Initializing

                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 12

                  Figure 2-2 Advanced Software Framework_New Example Project

                  Note  ATBTLC1000SAMB11 related projects are prefixed with ldquoBLErdquo making it easier to filter theproject in the dialogue box

                  2 Select the appropriate ldquoBLE-Startup Templaterdquo project corresponding to the intended Host MCUXplained Pro board and then press OK button to import the BLE startup template project SelectldquoBLE-Startup Template ndash SAM L21 Xplained Pro SAML21J18Brdquo for this hands-onNote  Rev B XPRO boards can be identified by SAML21J18B silk screen marking below SAML21MCU

                  3 The BLE startup project is now created and loaded in Atmel StudioFigure 2-3 Startup_Template Project

                  ATBTLC1000Creating the Project and Initializing

                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 13

                  Note  The main project routine of ldquoStartup Template projectrdquo already includes host MCU low levelinitialization BLE and ATBTLC1000 initialization The added ASF components in project can beviewed from ldquoASFgtASF Wizardrdquo Select the created project from Project drop down box

                  Figure 2-4 ASF Wizard Window

                  ndash BLE_STACK Platform Interface ndash Core manager of Bluetooth Low Energy Host API Itmanages ATBTLC1000 device initialization GAP and GATT events

                  ndash Timer Driver ndash Task timer functionality by using a Timer Counter (TC) or Timer Counter forControl (TCC) peripheral

                  ndash Console UART ndash Universal Asynchronous ReceiverTransmitter (UART) communication insynchronousblocking mode

                  ndash Generic Board Support ndash Host MCU Board specific initializationndash System Drivers ndash Select MCUrsquos System peripheral drivers These drivers are included by

                  default in ASF projects and manage the clocks and oscillator of the system4 The main routine contains the MCU low level initialization and ATBTLC1000 initialization The

                  following figure illustrates the flowchart of the main routine

                  ATBTLC1000Creating the Project and Initializing

                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 14

                  Figure 2-5 Main Routine Flowchart

                  22 Configuring ASF for ATBTLC1000-ZR1 The default ldquoStartup Template Projectrdquo is configured for ATBTLC1000-MR module with 6-Wire

                  mode2 Navigate to Project properties Project gt Project properties gt Toolchain gt ARMGNU C Compiler gt

                  Symbols3 The ATBTLC1000ZR-XSTK kit uses the ATBTLC1000-ZR110CA module Change symbol

                  BLE_MODULE to BTLC1000_ZR and enable UART_FLOWCONTROL_4WIRE_MODE forATBTLC1000-ZR module as shown in the figure belowFigure 2-6 Startup Template Project Window

                  Note  This configuration change is not required for ATBTLC1000-MR module

                  ATBTLC1000Creating the Project and Initializing

                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 15

                  23 Compiling and Testing the Project

                  1 Click the ldquo rdquo button ltF7gt to compile the project2 Verify that no build error appears in Atmel Studio output window

                  Figure 2-7 Atmel Studio Output Window

                  3 Connect the SAM L21 XPRO to PC (if not already done)4 To access the project properties go to Project gt

                  STARTUP_TEMPLATE_SAML21_XPLAINED_PRO_B1 PropertiesFigure 2-8 Compiling the Project

                  5 In project properties click the Tool tab and select the EDBG of SAM L21 Xplained Pro board asdebuggerprogrammerFigure 2-9 Selection of DebuggerProgrammer

                  6 Open any Terminal application (for example TeraTerm) Select the COM port enumerated on thePC and set the following parameters

                  ndash EDBG associated COM Port (Check Windows Device Manager)

                  ATBTLC1000Creating the Project and Initializing

                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 16

                  ndash Baudrate 115200ndash Parity Nonendash One Stop bitndash Enable Hardware Flow Control

                  7 Click to save the project ltCtrl+Sgt

                  8 Click rdquo to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt9 The initialization of the ATBTLC1000ZR module must return the Bluetooth Device Address and

                  Address typeFigure 2-10 Console Log Window

                  Note 1 If initialization fails make sure to verify the hardware configuration is aligned with the

                  description refer to 16 Hardware Setup2 The initialization of ATBTLC1000 takes few seconds due to patch download process

                  ATBTLC1000Creating the Project and Initializing

                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 17

                  3 Establishing Connection with Central DeviceThe Bluetooth Low Energy connectivity is added to the application that is used to connect with theBluetooth Low Energy central The first step is about the management of Bluetooth connection with acentral device When using ATBTLC1000 device this process is managed by dedicated API function callsassociated with ATBTLC1000 events handling

                  The interaction between Host MCU ATBTLC1000 and Bluetooth Low Energy central during connectionestablishment is as follows

                  Figure 3-1 Establishing Connection with Central Device

                  On host MCU side the management of the Bluetooth connection is performed through three main steps1 GAP callback registration2 Advertisement configuration3 ATBTLC1000 event handling

                  In the existing project main routine the integration of these steps are highlighted in red in the followingflowchart

                  ATBTLC1000Establishing Connection with Central Device

                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 18

                  Figure 3-2 Main Routine Flow Chart

                  31 Configuring and Starting the Advertisement ProcessThe Bluetooth Low Energy devices transmit advertisement packets to show their presence to nearbydevices The advertisement packet is sent periodically at a time interval defined by variableldquoadvintervalrdquo defined in Bluetooth SIG specification To avoid any collision with other wireless networksuch as Wi-Fireg a channel change is performed for each advertisement packet sent (data frequencyhopping) as illustrated in the following figureFigure 3-3 Advertisement Process

                  During advertisement the payload structure to be sent differs from application to application and is set byusing encapsulated packet data unit type information (PDU_TYPE)

                  ATBTLC1000Establishing Connection with Central Device

                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 19

                  Figure 3-4 PDU Advertising

                  The following table lists the different PDU types used according to device role

                  Advertising event types (PDU_TYPE) Broadcaster Observer Peripheral Central

                  Connectible undirected event (ADV_IND) Excluded Excluded Mandatory Excluded

                  Connectible directed event(ADV_DIRECT_IND) Excluded Excluded Optional Excluded

                  Non-connectible undirected event(ADV_NONCONN_IND) Mandatory Excluded Optional Excluded

                  Scannable undirected event (ADV_SCAN_IND) Optional Excluded Optional Excluded

                  As our device acts as a Bluetooth Low Energy peripheral the connectable undirected event (ADV_IND)advertising type is used See the following description about the ADV_IND advertisement packetFigure 3-5 ADV_IND Advertisement Packet

                  The ADV_IND payload contains different Advertisement Data types (AD0 - ADn) which provide specificinformation to the central device such as device short name Tx power level and list of availableservices UUIDs The number of advertisement data types that can be added to the advertisementpayload are limited by the advertisement payload size of 31 octets

                  Following is a list of advertisement data types that are commonly found in ADV_IND payload

                  ATBTLC1000Establishing Connection with Central Device

                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 20

                  311 Flags (AD Type 0x00)The flags describe the basic device capability such as BLE support BLE discoverable mode BREDRsupport and simultaneous BRED

                  312 Available Service UUID (AD Types 0x02 to 0x07)The Bluetooth Low Energy advertisement payloads are limited to 31 bytes Therefore only two 128-bitUUID values can be added to the payload For this purpose the specific AD types describe the length ofthe advertised UUID and provide information as to whether the payload contains a incompletecompletelist of UUID supported by the GATT server

                  bull 0x02 - Incomplete list of 16-bit UUIDs (adopted GATT services)bull 0x03 - Complete list of 16-bit UUIDs (adopted GATT services)bull 0x06 - Incomplete list of 128-bit UUIDs (custom GATT services)bull 0x07 - Complete list of 128-bit UUIDs (custom GATT services)

                  Note  When a 16-bit UUID is transmitted only the unique 2-byte value is sent The client knows that it isrequired to be injected into the base UUID For example the Health Thermometer Service is assigned as0x1809 so its equivalent UUID is 00001809-0000-1000-8000-00805F9B34FB

                  313 Device Name (AD Types 0x08 to 0x09)This AD type field is used to advertise the Local name of device in the network The Local name datatype value indicates if the name is complete or shortened If the name is shortened the complete namecan be read after the connection is established

                  bull 0x08 - Shortened Local Namebull 0x09 - Complete Local Name

                  Note 1 A shortened name contains only continuous characters from the beginning of the full name For

                  example if the device name is BT_Device_Name then the shortened name can beBT_Device or BT_Dev

                  2 Complete data type list are available at httpswwwbluetoothcomspecificationsassigned-numbersgeneric-access-profile

                  For management of advertisement process and cover the different configurations specified by SIG theATBTLC1000 Host driver provides the two functions elaborated in the following sections

                  In the application use these two functions to setup the following ADV_IN type payloadFigure 3-6 ADV_IN Type Payload Process

                  ATBTLC1000Establishing Connection with Central Device

                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 21

                  3131 Setting the Advertisement Payload (ble_advertisement_data_set)Prototype ndashat_ble_status_t at_ble_adv_data_set (uint8_t const const adv_datauint8_t adv_data_lenuint8_t const const scan_resp_datauint8_t scan_response_data_len)

                  Description ndash Set clear or update the advertisement and scan response data

                  Parameters ndash

                  bull adv_data ndash Raw data to be placed in advertisement packetbull adv_data_len ndash Data length for adv_data Max size 28 bytes (3 bytes are reserved to set

                  advertising AD type flags based on the selected Advertising mode and the user is not required toconfigure AD type flags in the advertisement payload)

                  bull scan_resp_data ndash Raw data to be placed in the scan response packet If NULL no changes aremade to the current scan response packet data

                  bull scan_response_data_len ndash Data length for scan_resp_data Max size 31 bytes

                  Return ndash Execution Status

                  This function requires a parameter raw adv_data to be sent to central Following is an example of itsdefinition

                  static uint8_t adv_data[] = 0x11 AD1 length = 170x03 AD1 Type = Complete list of 128-bit UUIDs0x1b0xc50xd50xa50x020x000xa60x87 AD1 = UUID MSBs0xe50x110x360x390xc00xba0x5a0xf00x0A AD2 Length = 100x09 AD2 Type = Complete local NamelsquoMrsquorsquoyrsquorsquo_rsquorsquoDrsquorsquoErsquorsquoVrsquo AD2 = ldquoMy_DEVrdquo

                  3132 Starting the Advertisement Process (at_ble_adv_start)Prototype ndashat_ble_status_t at_ble_adv_start (at_ble_adv_type_t typeat_ble_adv_mode_t modeat_ble_addr_t peer_addrat_ble_filter_type_t filtereduint16_t intervaluint16_t timeoutbool disable_randomness)

                  Description ndash Start advertisement process

                  Parameters ndash

                  bull type ndash Advertising type to be used can bendash AT_BLE_ADV_TYPE_UNDIRECTEDndash AT_BLE_ADV_TYPE_DIRECTEDndash AT_BLE_ADV_TYPE_SCANNABLE_UNDIRECTEDndash AT_BLE_ADV_TYPE_NONCONN_UNDIRECTEDndash AT_BLE_ADV_TYPE_DIRECTED_LDCndash AT_BLE_ADV_TYPE_SCAN_RESPONSE

                  bull mode ndash Advertising mode to be used can be

                  ATBTLC1000Establishing Connection with Central Device

                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 22

                  ndash AT_BLE_ADV_NON_DISCOVERABLEndash AT_BLE_ADV_GEN_DISCOVERABLEndash AT_BLE_ADV_LIM_DISCOVERABLEndash AT_BLE_ADV_BROADCASTER_MODE

                  bull peer_addr ndash Specify peer address when advertising type is AT_BLE_ADV_TYPE_DIRECTEDbull filtered ndash

                  ndash AT_BLE_ADV_FP_ANY ndash Allow scan and connection requests from anyonendash AT_BLE_ADV_FP_FILTER_SCANREQ ndash Allow scan request from White List devices onlyndash AT_BLE_ADV_FP_FILTER_CONNREQ ndash Allow connection request from White List devices

                  onlyndash AT_BLE_ADV_FP_FILTER_BOTH ndash Allow scan and connection requests from White List

                  devices onlybull interval ndash Advertisement interval (in 0625 ms units)bull timeout ndash Advertising timeout between 0x0001 and 0x028F in scale of seconds This parameter

                  must be set to 0 if type equals AT_BLE_ADV_TYPE_DIRECTEDbull disable_randomness ndash When disabled advertisements are performed at the exact interval

                  without adding random 10 ms tempo

                  Return ndash Execution Status

                  314 Advertisement ProcessIn this assignment the advertisement process is performed in the following configuration

                  bull Undirected (Type AT_BLE_ADV_TYPE_UNDIRECTED)bull Discoverable (Mode AT_BLE_ADV_GEN_DISCOVERABLE)bull No peer Address (peer_addr = NULL)bull No filtering (filtered = AT_BLE_ADV_FP_ANY)bull Advertisement interval 1s (interval = 1600)bull Maximum timeout (timeout 655)bull Randomness enabled (disable_randomness = FALSE)

                  3141 Starting the Advertisement Process1 Open startup_templatec file2 Declare the following ble_status global variable in startup_templatec as volatile

                  include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehvolatile at_ble_status_t ble_status

                  3 Declare the following adv_data global variable in startup_templatec as staticstatic uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD)0x09 AD2 Type = Complete local Name

                  ATBTLC1000Establishing Connection with Central Device

                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 23

                  My_SENS AD2 = ldquoMy_SENSrdquo

                  Note 1 The name of the device is to be changed (AD2 field)2 According to the new name AD2 length must be adapted to new AD2 content

                  4 Add the following start_advertisement function in startup_templatec prototype for thefunction void start_advertisement (void) also this can be added to avoid warningsvoid start_advertisement (void)printf(n Assignment 21 Start Advertisement)Set advertisement datable_status = at_ble_adv_data_set(adv_datasizeof(adv_data)NULL0)Start Advertisementble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550)if(ble_status = AT_BLE_SUCCESS)printf(n Failed to start advertisement)

                  5 Start the advertisement process by adding the following highlighted code to the application mainroutineint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Start Advertising process start_advertisement() Register PrimaryIncluded service in case of GATT Server while(true) Write application task

                  6 Click to save the project ltCtrl+Sgt

                  7 Click button to compile the project ltF7gt8 Verify that no build error appears in Atmel Studio output window

                  Figure 3-7 Atmel Studio Output Window

                  ATBTLC1000Establishing Connection with Central Device

                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 24

                  9 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt10 Open Microchip SmartConnect Application on Android or iOS device and tap START SCAN button

                  Note  The device must appear in Microchip SmartConnect Application

                  Figure 3-8 Microchip SmartConnect Application

                  11 Terminal must display the following Log outputFigure 3-9 Log Output Window

                  32 Managing GAP eventsThe management of the Bluetooth connection at the host MCU level is done through reception andhandling of events reported by the ATBTLC1000 These events are generated by ATBTLC1000 GAPGATT and L2CAP layers to notify the host about the ongoing Bluetooth interaction with other devices inits vicinity

                  ATBTLC1000Establishing Connection with Central Device

                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 25

                  To manage events coming from the ATBTLC1000 module the host driver must provide able_mgr_events_callback_handler function that allows registration of application callback functionto be executed on each event reported by the ATBTLC1000 module

                  Prototype ndashbool ble_mgr_events_callback_handler(ble_mgr_event_cb_t event_cb_typeble_mgr_event_t event_typeconst voidble_event_handler)

                  Description ndash Used by ProfileServiceApplication to register the Bluetooth Low Energy eventsrsquocallbacks

                  Parameters ndash

                  event_cb_type ndash types of actions to perform on callbacks can be either

                  REGISTER_CALL_BACK or

                  UNREGISTER_CALL_BACKevent_type ndash Any one of the event types can be used

                  BLE_GAP_EVENT_TYPEBLE_GATT_CLIENT_EVENT_TYPEBLE_GATT_SERVER_EVENT_TYPEBLE_L2CAP_EVENT_TYPEBLE_GATT_HTPT_EVENT_TYPEBLE_DTM_EVENT_TYPEBLE_CUSTOM_EVENT_TYPEble_event_handler ndash pointer to handler list

                  Structure ble_gap_event_cb_t defines the GAP callbacks Similarly structuresble_gatt_client_event_cb_t and ble_gatt_server_event_cb_t define the callbacks of GATTevents

                  typedef struct ble_gap_event_cb BLE Undefined events received from ATBTLC1000 which is not handled in Libraryble_event_callback_t undefined BLE scan information contains the peer device scan information Refer ref at_ble_scan_info_tble_event_callback_t scan_info Once the BLE scan timeout or scan stop triggers the scan report event Refer ref at_ble_scan_report_tble_event_callback_t scan_report Advertisement complete event Refer ref at_ble_adv_cmp_evt_tble_event_callback_t advt_cmp Advertisement report in case of advertisement stopped due to advertisement timeout Refer ref at_ble_adv_report_tble_event_callback_t adv_report BLE device own random address changed event Refer ref at_ble_rand_addr_changed_tble_event_callback_t rand_addr_changed BLE connected event device connected to peer device Refer ref at_ble_connected_tble_event_callback_t connected BLE disconnected event device disconnected from peer device Refer ref at_ble_disconnected_tble_event_callback_t disconnected Connection parameter update done on peer device and own device Refer ref at_ble_conn_param_update_done_t

                  ATBTLC1000Establishing Connection with Central Device

                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 26

                  ble_event_callback_t conn_parameter_update_done Connection parameter update request from peer device Refer ref at_ble_conn_param_update_request_tble_event_callback_t conn_param_update_request Pair complete event as part of end of pairing process Refer ref at_ble_pair_done_tble_event_callback_t pair_done Pair request event from Central device Refer ref at_ble_pair_request_tble_event_callback_t pair_request Slave security request received from peer Peripheral device Refer ref at_ble_slave_sec_request_tble_event_callback_t slave_sec_request Pair Key request event from Peer central device Refer ref at_ble_pair_key_request_tble_event_callback_t pair_key_request encryption request comes from the peer device Needs to supply the bonding information which is stored earlier ref at_ble_encryption_request_tble_event_callback_t encryption_request encryption status changed event received from SMP once the encryption is started ref at_ble_encryption_status_changed_tble_event_callback_t encryption_status_changed Event triggered once the Resolve random address is resolved using supplied IRKs ref at_ble_resolv_rand_addr_status_tble_event_callback_t resolv_rand_addr_status Event is triggered once the connection signature information indication received ref at_ble_sign_counter_tble_event_callback_t sign_counters_ind Peer attribute information indication received Event ref at_ble_peer_att_info_ind_tble_event_callback_t peer_att_info_ind Peer device channel map received indication ref at_ble_channel_map_tble_event_callback_t con_channel_map_indble_gap_event_cb_t

                  Note  Callback definition is application-specific If the application layer requires a specific event callbackthen the specific member of the structure is to be assigned with the address of the callback function

                  In this assignment two callback functions on Connected and Disconnected GAP events are usedThis allows the application to restart the advertising process on Disconnect manage connectioninformation and startstop of sensor data update

                  321 Handling of Connected and Disconnected GAP Events1 Open the startup_templatec file2 Define the following software flags as global variables in startup_templatec file volatile

                  bool timer_flag = false and volatile bool connected_flag = false3 Declare and implement the following ble_connected_cb function in the

                  startup_templatec file Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param)printf(n Assignment 22 Application connected )connected_flag = trueALL_UNUSED(param)return AT_BLE_SUCCESS

                  4 Declare and implement the following ble_disconnected_cb function instartup_templatec file Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param)printf(n Assignment 22 Application disconnected )connected_flag = falsestart_advertisement()ALL_UNUSED(param)return AT_BLE_SUCCESS

                  ATBTLC1000Establishing Connection with Central Device

                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 27

                  5 Declare the following static GAP callback structure in ldquostartup_templatecrdquo filestatic const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTEDdisconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                  6 Add the following register_btlc1000_callbacks function in startup_templatec Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void) Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks)ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACKBLE_GAP_EVENT_TYPEampapp_gap_handle)if (ble_status = true)printf(nError when Registering ATBTLC1000 callbacks)

                  7 Add the register_btlc1000_callbacks function call prior to start advertisement in theapplication main routineint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Gap Callbacks register_btlc1000_callbacks ( ) Start Advertising process start_advertisement() Register PrimaryIncluded service in case of GATT Server while(true) Write application task

                  8 Add the ble_event_task function call in the project main loop to handle the different incomingevents from ATBTLC1000while(true)ble_event_task()

                  9 Press button ltF7gt to compile the project and verify that no build error appear in the AtmelStudio output window

                  ATBTLC1000Establishing Connection with Central Device

                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 28

                  Figure 3-10 Atmel Studio Output Window

                  10 Click ldquo rdquo to save the project ltCtrl+Sgt

                  11 Click ldquo rdquo to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt and checkcorrect initialization of the ATBTLC1000

                  12 Open the Microchip SmartConnect application on Androidtrade or iOS device13 Press the ltStart Scangt button and pair peripherals by selecting them in the device list (pass key

                  123456)Note 

                  1 Pairing event handling is carried out by ble_managerc Refer toble_pair_key_request_handler() for code implementation The default pass key of123456 is also fixed inside this function This can be changed here

                  Figure 3-11 Console Log Window

                  Note  After peripheral pairing no services information are displayed in Microchip SmartConnectapplication as no service is currently defined and started on peripheral side

                  ATBTLC1000Establishing Connection with Central Device

                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 29

                  4 SettingHandling of Pre-Defined ServiceThe management of services are done in the GATT layer of the ATBTLC1000 ROM coded Bluetooth LowEnergy Stack The GATT transactions are based on high-level nested objects called Profiles Servicesand Characteristics stored in SRAM memory of ATBTLC1000 device This assignment adds the pre-defined service of information service from ASF library

                  Figure 4-1 ATBTLC1000 GATT Layers

                  bull ProfilesProfiles are not available in the Bluetooth Low Energy peripheral they are simply a pre-definedcollection of services that have been compiled by either the Bluetooth SIG (adopted GATT basedprofile) or by the application developer (custom profiles) For example the Heart Rate Profilecombines the Heart Rate Service and the Device Information Service

                  Note  The complete list of officially adopted GATT-based profiles is available on the BluetoothDeveloper Portal

                  bull ServicesA service is a collection of data and associated behaviors which accomplish a particular function orfeature of a device or portions of a device A service may reference other primary or secondaryservices andor a set of characteristics that make up the service Each service distinguishes itselffrom other services by means of a unique numeric ID called as UUID which can be either 16-bit(for officially adopted Bluetooth Low Energy Services) or 128-bit (for custom services)

                  Note  A full list of officially adopted services and their UUID are seen on the Bluetooth DeveloperPortal

                  bull CharacteristicsA characteristic is the lowest level concept in GATT transactions It contains a single data point withdifferent attributes such as notify read or write capabilities Similar to Services each characteristiccan be distinguished by a SIG-defined adopted UUID (16-bit) or custom (128-bit) UUID This UUIDensures interoperability across Bluetooth Low Energy devices The characteristics are important tointeract with in a Bluetooth Low Energy network In addition to standard UUID the custom UUID isused in case of specific application When characteristics with custom UUID are used in a devicethen it will be interoperable only with those devices that support these characteristics with customUUID

                  ATBTLC1000SettingHandling of Pre-Defined Service

                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 30

                  In this assignment the following steps are added to the Host MCU application to set up and handle adevice information service within the ATBTLC1000 module The following steps are added to the startupproject

                  bull Adding device info service component from ASFbull Configuring and loading the service

                  Figure 4-2 Device Information Service

                  41 Adding Device Info Service Component from ASF Wizard to ProjectTo use the ldquoofficially adopted GATT-based profilesrdquo from SIG ASF provides Bluetooth Low Energy servicecomponents including init functions that pre-define services in Host memory

                  Note  Before starting this assignment be sure to follow the steps mentioned in 2 Creating the Projectand Initializing and 3 Establishing Connection with Central Device

                  1 Click ASF gt ASF Wizard2 Search for ldquoBLE-Device Information Servicesrdquo and then click Add

                  ATBTLC1000SettingHandling of Pre-Defined Service

                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 31

                  Figure 4-3 Available Modules

                  3 Now ldquoBLE-Device Information Servicesrdquo (component) appears in ldquoSelected ModulesrdquoFigure 4-4 Selected Modules

                  4 Click Apply to add the component to the projectFigure 4-5 Adding the Modules to Project

                  5 The ldquoDevice Information Servicerdquo component is added to the project and is confirmed bydevice_information folder added in Solution Explorer

                  ATBTLC1000SettingHandling of Pre-Defined Service

                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 32

                  Figure 4-6 Device Information Service Added to Project

                  42 Configuring and Loading Device Information ServiceThe ATBTLC1000 Host driver provides a set of GATT functions that allows storing and updating theservices in ATBTLC1000 memories

                  Prototype at_ble_status_t at_ble_primary_service_define(at_ble_uuid_t uuidat_ble_handle_t service_handleat_ble_included_service_t included_service_listuint16_t included_service_countat_ble_characteristic_t charactristic_listuint16_t charactristic_count)

                  Description Defines a new primary service along with its included services and characteristics inATBTLC1000

                  Parameters

                  bull Uuid [In] ndash primary service UUIDbull service_handle [Out] ndash Service handle is returned herebull included_service_list [In] ndash an array of included service referencesbull included_service_count [In] ndash number of elements in included_service_listbull charactristic_list [InOut] ndash an array of characteristics included in the service this array

                  is updated with respective characteristics handlesbull charactristic_count[In] ndash number of elements in charactristic_list

                  Return Execution Status

                  This function requires an argument as GATT description structure of the service that is implemented Thepreviously added Device Info service component provides Bluetooth Low Energy service middlewareincluding the init functions that predefine the services See below ldquodis_init_servicerdquo from device infoBLE service (device_infohc)

                  Prototype ndash void dis_init_service(dis_gatt_service_handler_t device_info_serv)Description ndash Initialize the device information service handler in the host MCU memory

                  Parameters ndash

                  ATBTLC1000SettingHandling of Pre-Defined Service

                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 33

                  bull device_info_serv [Inout] pointer to device info GATT description handler to beupdated

                  Return None

                  Here is a picture of GATT device info service descriptor definition in Host memory

                  device_info_serv-gtserv_handle = 0device_info_serv-gtserv_uuidtype = AT_BLE_UUID_16device_info_serv-gtserv_uuiduuid[0] = (uint8_t) DIS_SERVICE_UUIDdevice_info_serv-gtserv_uuiduuid[1] = (uint8_t) (DIS_SERVICE_UUID gtgt 8)Characteristic Info for Manufacturer Name Stringdevice_info_serv-gtserv_chars[0]char_val_handle = 0 handle stored here device_info_serv-gtserv_chars[0]uuidtype = AT_BLE_UUID_16device_info_serv-gtserv_chars[0]uuiduuid[0] = (uint8_t) IS_CHAR_MANUFACTURER_NAME_UUID UUID Manufacturer Name String device_info_serv-gtserv_chars[0]uuiduuid[1] = (uint8_t) (DIS_CHAR_MANUFACTURER_NAME_UUID gtgt 8) UUID Manufacturer Name String device_info_serv-gtserv_chars[0]properties = AT_BLE_CHAR_READ Properties memcpy(char_valuemanufacturer_nameDEFAULT_MANUFACTURER_NAMEDIS_CHAR_MANUFACTURER_NAME_INIT_LEN)device_info_serv-gtserv_chars[0]init_value = char_valuemanufacturer_namedevice_info_serv-gtserv_chars[0]value_init_len = DIS_CHAR_MANUFACTURER_NAME_INIT_LENdevice_info_serv-gtserv_chars[0]value_max_len = DIS_CHAR_MANUFACTURER_NAME_MAX_LENif BLE_PAIR_ENABLEdevice_info_serv-gtserv_chars[0]value_permissions = AT_BLE_ATTR_READABLE_REQ_AUTHN_NO_AUTHR permissions elsedevice_info_serv-gtserv_chars[0]value_permissions = AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR permissions endifdevice_info_serv-gtserv_chars[0]user_desc = NULL user defined name device_info_serv-gtserv_chars[0]user_desc_len = 0device_info_serv-gtserv_chars[0]user_desc_max_len = 0device_info_serv-gtserv_chars[0]user_desc_permissions = AT_BLE_ATTR_NO_PERMISSIONS user description permissionsdevice_info_serv-gtserv_chars[0]client_config_permissions = AT_BLE_ATTR_NO_PERMISSIONS client config permissionsdevice_info_serm hdsv-gtserv_chars[0]server_config_permissions = AT_BLE_ATTR_NO_PERMISSIONS server config permissionsdevice_info_serv-gtserv_chars[0]user_desc_handle = 0 user desc handlesdevice_info_serv-gtserv_chars[0]client_config_handle = 0 client config handlesdevice_info_serv-gtserv_chars[0]server_config_handle = 0 server config handlesdevice_info_serv-gtserv_chars[0]presentation_format = NULL presentation format

                  Note  In case of custom service the above definition initialization must be taken care of by thedeveloper

                  421 Procedure to Configure and Load Device Info Service1 Include device info service header file (device_infoh) at the beginning of

                  startup_templatec fileinclude ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehinclude device_infoh

                  2 Define a device info service handler as global in startup_templatec file Serviceshandlers dis_gatt_service_handler_t dis_service_handler

                  ATBTLC1000SettingHandling of Pre-Defined Service

                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 34

                  3 Add dis_init_service and at_ble_primary_service_define functions as called abovethe advertisement start in main routine Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service)dis_init_service (ampdis_service_handler) Define the primary service in the GATT server database if ((dis_primary_service_define (ampdis_service_handler)) = AT_BLE_SUCCESS)printf(Device Information Service definition failed) Start Advertising process start_advertisement()

                  4 Click to save the project ltCtrl+Sgt and compile the project by pressing button ltF7gt5 Verify that no build error appears in Atmel Studio output window

                  Figure 4-7 Atmel Studio Output Window

                  6 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt7 Open ldquoMicrochip SmartConnectrdquo application on Android or iOS device8 Press ltStart Scangt button and connect to peripheral

                  Note  The device name is a characteristic and contains the name of the device This device namecan be read by the central device to know the name of the device in order to differentiate thedevices This is being set using at_ble_device_name_set()API The device name is set bydefault when ble_device_init is called and the value is pre-defined using BLE_DEVICE_NAMEThe device name can also be sent as part of advertisement payload to be same as the oneconfigured in at_ble_adv_data_set() API It is the responsibility of users to keep the devicename set in advertisement payload the same as that configured inat_ble_device_name_set()

                  9 The Service must now be visible after pairing with peripheral under Microchip SmartConnectapplication

                  ATBTLC1000SettingHandling of Pre-Defined Service

                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 35

                  Figure 4-8 Service List in Microchip SmartConnect Application

                  Note  If the pairing of ATBTLC1000 with Microchip Smart connect is not successful then removethe pairing information from mobile by selecting ldquoForget Devicerdquo from the mobile settings Thereason for this is that the mobile app stores the previous pairing information but the ATBTLC1000device lost the previous pairing information due to RESET since it was stored on temporary storage(RAM)

                  10 The serial terminal must display the following log output windowFigure 4-9 Console Log Window

                  ATBTLC1000SettingHandling of Pre-Defined Service

                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 36

                  5 Setting up and Handling Custom ServiceThe previous assignment describes the handling of Bluetooth Low Energy SIG defined device infoservice which is the predefined service available in ASF component This assignment describes thecustom service So the service initialization needs to be implemented In the context of customizedenvironment service the following service description is pushed in ATBTLC1000 memory

                  Figure 5-1 Custom Service

                  Custom Environment Service Description

                  bull UUID type ndash Custom UUID (128-bit)bull UUID ndash 1bc5d5a5-0200-a687-e511-3639c1ba5af0

                  Characteristic 0 (Temperature)

                  bull User Description ndash Temperaturebull UUID type ndash Custom UUID (128-bit)bull UUID ndash 1bc5d5a5-0200-a687-e511-3639d8ba5af0bull Properties ndash Read Notifybull Value permission ndash No authorization requiredbull Client config permission ndash No permissionbull Server config permission ndash No permission

                  Note  In this definition UUIDs are generated randomly Custom servicescharacteristics are free to useany 128-bit UUID less than the base UUID There is no reserved space for vendors to use 16-bit or 32-bitUUIDs

                  With this definition any temperature change is notified to the central The notify mechanism allows thecentral to know when the data changes When notify property of the Client Characteristic ConfigurationDescriptor is enabled by the central and the device writes the new value then this updated value isautomatically sent to the central through a notification The central is not required to send readcharacteristic commands explicitly to the peripheral (GATT server)

                  To setup and handle the custom environment service in ATBTLC1000 module the following steps areadded to the Host MCU application

                  bull Configure and load the custom servicebull Update Temperature characteristic and notify to the central devicebull Receive and handle notification from the Host device

                  ATBTLC1000Setting up and Handling Custom Service

                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 37

                  Figure 5-2 Custom Service Flowchart

                  51 Configuring and Loading the Custom Environment ServiceThe ATBTLC1000 Host driver provides the following set of GATT functions that allows it to push andupdate the service descriptions in the ATBTLC1000 SRAM memory

                  Note  Before starting this assignment be sure to follow the steps mentioned in 2 Creating the Projectand Initializing and 3 Establishing Connection with Central Device

                  Prototype ndashat_ble_status_t at_ble_primary_service_define(at_ble_uuid_t uuidat_ble_handle_t service_handleat_ble_included_service_t included_service_listuint16_t included_service_countat_ble_characteristic_t charactristic_listuint16_t charactristic_count)

                  Description ndash Defines a new primary service along with its included services and characteristics inATBTLC1000 module

                  Parameters

                  bull Uuid [In] ndash primary service UUIDbull service_handle [Out] ndash service handle is returned herebull included_service_list [In] ndash array of included service referencesbull included_service_count [In] ndash number of elements in included_service_listbull charactristic_list [InOut] ndash an array of characteristics included in the service this array

                  is update with respective characteristics handlesbull charactristic_count[In] ndash number of elements in charactristic_list

                  ATBTLC1000Setting up and Handling Custom Service

                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 38

                  Return ndash Execution Status

                  bull Characteristics ndashndash Characteristics definition is done through specific array of following

                  ldquoat_ble_characteristic_trdquo structure instancestypedef structat_ble_handle_t char_val_handle Handler (returned during service initialisation)at_ble_uuid_t uuid Characteristic UUID (type and value)at_ble_char_properties_t propertiesCharac Properties (read write notify)uint8_t init_value initial valueuint16_t value_init_len initial value lengthuint16_t value_max_len value max lengthat_ble_attr_permissions_t value_permissions access authorization and authenticationuint8_t user_desc User descriptionuint16_t user_desc_len User description lengthuint16_t user_desc_max_len User description max lengthat_ble_char_presentation_t presentation_format Presentation formatat_ble_attr_permissions_t user_desc_permissions User description permissionat_ble_attr_permissions_t client_config_permissions client permissionat_ble_attr_permissions_t server_config_permissions server permissionat_ble_handle_t user_desc_handle description handlerat_ble_handle_t client_config_handle Client config handlerat_ble_handle_t server_config_handle Server config handler at_ble_characteristic_t

                  511 Procedure to Configure and Load Custom Environment Service1 Define the following service UUID and characteristic UUID in startup_templatec file

                  define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

                  2 Define the following environment service handler and characteristics variable as global instartup_templatec file Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

                  3 Add the following service initialization function custom_environment_service_init instartup_templatecvoid custom_environment_service_init(void) at_ble_uuid_t environment_service_uuiduint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUIDuint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperatureenvironment_service_characs[0]user_desc_len = 10environment_service_characs[0]user_desc_max_len = 10environment_service_characs[0]uuidtype = AT_BLE_UUID_128memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16)environment_service_characs[0]properties = AT_BLE_CHAR_READ |AT_BLE_CHAR_NOTIFYenvironment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature valueenvironment_service_characs[0]value_permissions =(AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuidampenvironment_service_handlerNULL0environment_service_characs1)=AT_BLE_SUCCESS)printf(n Assignment 41 Failed to Initialize custom environment service)

                  ATBTLC1000Setting up and Handling Custom Service

                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 39

                  elseprintf(n Assignment 41 Initialize custom environment service)

                  4 Declare and implement the following GATT event callback functioncustom_char_changed_app_event in startup_templatec file If a client (central) enablesnotifications for a server the server (peripheral) receives an AT_BLE_CHARACTERISTIC_CHANGEDevent and this event callback is called Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

                  5 Declare and implement the following custom_notification_confirmation_handlerfunction in startup_templatec file Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param)at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )paramif (event_param-gtstatus == AT_BLE_SUCCESS)printf(n Assignment 41Notification Successfully sent over the air) else printf(n Assignment 41Sending Notification over the air failed)return AT_BLE_SUCCESS

                  6 Declare the following GATT server callback structure in startup_templatec file Thisassignment uses two GATT callbacksstatic const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handlercharacteristic_changed = custom_char_changed_app_event

                  7 Add the following register_gatt_server_callbacks function in startup_templatec toregister GATT server callback for notification confirmation event Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks)ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACKBLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle)if (ble_status = true)printf(nError when Registering ATBTLC1000 callbacks)

                  8 Add custom_environment_service_init and register_gatt_server_callbacksfunction calls prior to start advertisement in the application main routine to initialize custom serviceand to register the GATT server callbacksint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()

                  ATBTLC1000Setting up and Handling Custom Service

                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 40

                  endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks() Custom service init custom_environment_service_init ( ) Register Gatt server callbacks register_gatt_server_callbacks ( ) Start Advertising process start_advertisement()while(true)ble_event_task()

                  9 Click to save the project ltCtrl+Sgt

                  10 Compile the project by pressing button ltF7gt11 Verify that no build error appears in the Atmel Studio output window

                  Figure 5-3 Atmel Studio Output Window

                  12 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt13 Open the ldquoMicrochip SmartConnectrdquo application on Android or iOS device14 Connect and pair to the peripheral (pass key 123456)15 Custom service must now be visible after pairing with peripheral under Microchip SmartConnect

                  application

                  ATBTLC1000Setting up and Handling Custom Service

                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 41

                  Figure 5-4 Service List in Microchip SmartConnect Application

                  Note  Custom service is displayed as unknown service in the above figure as this service is not aSIG-defined service

                  Figure 5-5 General Information

                  16 Serial terminal client must display the following Log output

                  ATBTLC1000Setting up and Handling Custom Service

                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 42

                  Figure 5-6 Log Output Window

                  52 Updating the Temperature CharacteristicIn the previous assignment the custom Temperature characteristic is defined with a notify attribute Thistype of attribute requires notification to be sent to central when a new characteristic value is availableThe update of any ldquonotifyrdquo characteristic value is based on following interaction between the Host MCUand the ATBTLC1000Figure 5-7 Characteristic Notification

                  521 Setting a Characteristic Value ( at_ble_characteristic_value_set)Prototype ndashat_ble_status_t at_ble_characteristic_value_setat_ble_handle_t handleuint8_t valueuint16_t len)

                  Description ndash Sets a characteristic value in ATBTLC1000 memory

                  Parameters ndash

                  ATBTLC1000Setting up and Handling Custom Service

                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 43

                  bull handle [inout] ndash Pointer to Characteristic handle to be changedbull value [in] ndash New valuebull len [in] ndash Value length in bytes

                  Return ndash Execution Status

                  522 Sending a Notification (at_ble_notification_send)Prototype ndashat_ble_status_t at_ble_notification_send(at_ble_handle_t conn_handleat_ble_handle_t attr_handle)

                  Description ndash Sends a Notification

                  Parameters ndash

                  bull conn_handle[in] ndash handle of the connection to be notifiedbull attr_handle [in] ndash handle of the attribute originating the notification

                  Return ndash Execution Status

                  523 Sending Temperature Information Once in Every 10 Seconds to Central1 Modify the following ldquotimer_callback_fnrdquo callback function from the startup_templatec

                  filestatic void timer_callback_fn(void)timer_flag = true

                  2 hw_timer_init()in main routine of startup_templatec initializes the hardware timer3 If a client (Central) enables the notifications for a server the server (Peripheral) receives an

                  AT_BLE_CHARACTERISTIC_CHANGED event callback then start the periodic 10 second timer forsending the notification Add the following code in previously definedcustom_char_changed_app_event function Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))timer_flag = falsehw_timer_start(10)printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

                  4 Declare the following Temperature_value global variable in startup_templatec staticuint8_t Temperature_value = 25 as static

                  5 Add the following send_temperature_notification function in startup_templatec tosend temperature every 10 seconds Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++

                  ATBTLC1000Setting up and Handling Custom Service

                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 44

                  if(Temperature_value gt 75)Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set(environment_service_characs[0]char_val_handle(uint8_t )ampTemperature_valuesizeof(Temperature_value))ble_status = at_ble_notification_send(0environment_service_characs[0]char_val_handle)if(ble_status = AT_BLE_SUCCESS)printf(fail to send temperature update notification )

                  6 Add the following code in main routine to send temperature data every 10 secondswhile (1) ble_event_task()if(connected_flag == true ampamp timer_flag == truetimer_flag = falsesend_temperature_notification()

                  7 Click to save the project ltCtrl+Sgt

                  8 Compile the project by pressing the button ltF7gt9 Verify that no build error appears in Atmel Studio output window

                  Figure 5-8 Atmel Studio Output Window

                  10 Click to program the project binary on the L21 Xplained XSTK11 Open ldquoMicrochip SmartConnectrdquo Application on Android or iOS device12 Connect and pair to the peripheral (pass key 123456)13 Click NOTIFY to start the notification14 Temperature information in HEX values must be displayed in Microchip SmartConnect application

                  ATBTLC1000Setting up and Handling Custom Service

                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 45

                  Figure 5-9 Notification Window

                  15 Serial terminal must display the following log outputFigure 5-10 Log Output Window

                  ATBTLC1000Setting up and Handling Custom Service

                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 46

                  6 Appendix A Software Solution - Pre-Defined SvcThe following is the code implementation for handling of pre-defined service done in 4 SettingHandlingof Pre-Defined Service

                  - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehinclude device_infoh

                  volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false Services handlers dis_gatt_service_handler_t dis_service_handler

                  static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

                  void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                  Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                  Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                  static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                  Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void) Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks)

                  ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 47

                  ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                  timer callback function static void timer_callback_fn(void) Add timer callback functionality here

                  void button_cb(void) Add button callback functionality here

                  int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                  Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                  DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks()

                  Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service) dis_init_service(ampdis_service_handler) Define the primary service in the GATT server database if((dis_primary_service_define(ampdis_service_handler)) = AT_BLE_SUCCESS) printf(Device Information Service definition failed)

                  Start Advertising process start_advertisement() while(true) ble_event_task()

                  ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 48

                  7 Appendix B Software Solution - Custom ServiceThe following is the code implementation for handling of pre-defined service done in 5 Setting up andHandling Custom Service

                  - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templateh

                  volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false

                  static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

                  define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0

                  define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

                  Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

                  void custom_environment_service_init(void) at_ble_uuid_t environment_service_uuid uint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUID uint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128 memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperature environment_service_characs[0]user_desc_len = 10 environment_service_characs[0]user_desc_max_len = 10 environment_service_characs[0]uuidtype = AT_BLE_UUID_128 memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16) environment_service_characs[0]properties = AT_BLE_CHAR_READ | AT_BLE_CHAR_NOTIFY environment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature value environment_service_characs[0]value_permissions = (AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuid ampenvironment_service_handlerNULL0 environment_service_characs1)=AT_BLE_SUCCESS) printf(n Assignment 41 Failed to Initialize custom environment service) else printf(n Assignment 41 Initialize custom environment service)

                  Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param) at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )param if (event_param-gtstatus == AT_BLE_SUCCESS) printf(n Assignment 41Notification Successfully sent over the air)

                  ATBTLC1000Appendix B Software Solution - Custom Service

                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 49

                  else printf(n Assignment 41Sending Notification over the air failed) return AT_BLE_SUCCESS

                  static at_ble_status_t custom_char_changed_app_event(void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle -gt char_new_value[0])) timer_flag = false hw_timer_start(10) printf(n Assignment 41Characteristic changed event) return AT_BLE_SUCCESS

                  static const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handler characteristic_changed = custom_char_changed_app_event

                  Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                  void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                  Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                  Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                  static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                  Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void)

                  ATBTLC1000Appendix B Software Solution - Custom Service

                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 50

                  Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                  timer callback function static void timer_callback_fn(void) Add timer callback functionality here timer_flag = true

                  void button_cb(void) Add button callback functionality here

                  static uint8_t Temperature_value = 25

                  Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++ if(Temperature_value gt 75) Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set( environment_service_characs[0]char_val_handle (uint8_t )ampTemperature_value sizeof(Temperature_value)) ble_status = at_ble_notification_send(0 environment_service_characs[0]char_val_handle) if(ble_status = AT_BLE_SUCCESS) printf(fail to send temperature update notification )

                  int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                  Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                  DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register Gap ATBTLC1000 Callbacks register_btlc1000_callbacks()

                  Custom service init custom_environment_service_init()

                  ATBTLC1000Appendix B Software Solution - Custom Service

                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 51

                  Register Gatt server callback register_gatt_server_callbacks()

                  Start Advertising process start_advertisement() while(true) ble_event_task() if(connected_flag == true ampamp timer_flag == true) timer_flag = false send_temperature_notification()

                  ATBTLC1000Appendix B Software Solution - Custom Service

                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 52

                  8 Document Revision HistoryRev B - 42018

                  Section Changes

                  Document Revised contents to match various Bluetooth Low Energy standard versions

                  Rev A - 122017

                  Section Changes

                  Document Initial release

                  ATBTLC1000Document Revision History

                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 53

                  The Microchip Web Site

                  Microchip provides online support via our web site at httpwwwmicrochipcom This web site is used asa means to make files and information easily available to customers Accessible by using your favoriteInternet browser the web site contains the following information

                  bull Product Support ndash Data sheets and errata application notes and sample programs designresources userrsquos guides and hardware support documents latest software releases and archivedsoftware

                  bull General Technical Support ndash Frequently Asked Questions (FAQ) technical support requestsonline discussion groups Microchip consultant program member listing

                  bull Business of Microchip ndash Product selector and ordering guides latest Microchip press releaseslisting of seminars and events listings of Microchip sales offices distributors and factoryrepresentatives

                  Customer Change Notification Service

                  Microchiprsquos customer notification service helps keep customers current on Microchip productsSubscribers will receive e-mail notification whenever there are changes updates revisions or erratarelated to a specified product family or development tool of interest

                  To register access the Microchip web site at httpwwwmicrochipcom Under ldquoSupportrdquo click onldquoCustomer Change Notificationrdquo and follow the registration instructions

                  Customer Support

                  Users of Microchip products can receive assistance through several channels

                  bull Distributor or Representativebull Local Sales Officebull Field Application Engineer (FAE)bull Technical Support

                  Customers should contact their distributor representative or Field Application Engineer (FAE) for supportLocal sales offices are also available to help customers A listing of sales offices and locations is includedin the back of this document

                  Technical support is available through the web site at httpwwwmicrochipcomsupport

                  Microchip Devices Code Protection Feature

                  Note the following details of the code protection feature on Microchip devices

                  bull Microchip products meet the specification contained in their particular Microchip Data Sheetbull Microchip believes that its family of products is one of the most secure families of its kind on the

                  market today when used in the intended manner and under normal conditionsbull There are dishonest and possibly illegal methods used to breach the code protection feature All of

                  these methods to our knowledge require using the Microchip products in a manner outside theoperating specifications contained in Microchiprsquos Data Sheets Most likely the person doing so isengaged in theft of intellectual property

                  bull Microchip is willing to work with the customer who is concerned about the integrity of their code

                  ATBTLC1000

                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 54

                  bull Neither Microchip nor any other semiconductor manufacturer can guarantee the security of theircode Code protection does not mean that we are guaranteeing the product as ldquounbreakablerdquo

                  Code protection is constantly evolving We at Microchip are committed to continuously improving thecode protection features of our products Attempts to break Microchiprsquos code protection feature may be aviolation of the Digital Millennium Copyright Act If such acts allow unauthorized access to your softwareor other copyrighted work you may have a right to sue for relief under that Act

                  Legal Notice

                  Information contained in this publication regarding device applications and the like is provided only foryour convenience and may be superseded by updates It is your responsibility to ensure that yourapplication meets with your specifications MICROCHIP MAKES NO REPRESENTATIONS ORWARRANTIES OF ANY KIND WHETHER EXPRESS OR IMPLIED WRITTEN OR ORAL STATUTORYOR OTHERWISE RELATED TO THE INFORMATION INCLUDING BUT NOT LIMITED TO ITSCONDITION QUALITY PERFORMANCE MERCHANTABILITY OR FITNESS FOR PURPOSEMicrochip disclaims all liability arising from this information and its use Use of Microchip devices in lifesupport andor safety applications is entirely at the buyerrsquos risk and the buyer agrees to defendindemnify and hold harmless Microchip from any and all damages claims suits or expenses resultingfrom such use No licenses are conveyed implicitly or otherwise under any Microchip intellectualproperty rights unless otherwise stated

                  Trademarks

                  The Microchip name and logo the Microchip logo AnyRate AVR AVR logo AVR Freaks BeaconThingsBitCloud CryptoMemory CryptoRF dsPIC FlashFlex flexPWR Heldo JukeBlox KeeLoq KeeLoq logoKleer LANCheck LINK MD maXStylus maXTouch MediaLB megaAVR MOST MOST logo MPLABOptoLyzer PIC picoPower PICSTART PIC32 logo Prochip Designer QTouch RightTouch SAM-BASpyNIC SST SST Logo SuperFlash tinyAVR UNIO and XMEGA are registered trademarks ofMicrochip Technology Incorporated in the USA and other countries

                  ClockWorks The Embedded Control Solutions Company EtherSynch Hyper Speed Control HyperLightLoad IntelliMOS mTouch Precision Edge and Quiet-Wire are registered trademarks of MicrochipTechnology Incorporated in the USA

                  Adjacent Key Suppression AKS Analog-for-the-Digital Age Any Capacitor AnyIn AnyOut BodyComchipKIT chipKIT logo CodeGuard CryptoAuthentication CryptoCompanion CryptoControllerdsPICDEM dsPICDEMnet Dynamic Average Matching DAM ECAN EtherGREEN In-Circuit SerialProgramming ICSP Inter-Chip Connectivity JitterBlocker KleerNet KleerNet logo Mindi MiWimotorBench MPASM MPF MPLAB Certified logo MPLIB MPLINK MultiTRAK NetDetach OmniscientCode Generation PICDEM PICDEMnet PICkit PICtail PureSilicon QMatrix RightTouch logo REALICE Ripple Blocker SAM-ICE Serial Quad IO SMART-IS SQI SuperSwitcher SuperSwitcher II TotalEndurance TSHARC USBCheck VariSense ViewSpan WiperLock Wireless DNA and ZENA aretrademarks of Microchip Technology Incorporated in the USA and other countries

                  SQTP is a service mark of Microchip Technology Incorporated in the USA

                  Silicon Storage Technology is a registered trademark of Microchip Technology Inc in other countries

                  GestIC is a registered trademark of Microchip Technology Germany II GmbH amp Co KG a subsidiary ofMicrochip Technology Inc in other countries

                  All other trademarks mentioned herein are property of their respective companies

                  ATBTLC1000

                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 55

                  copy 2018 Microchip Technology Incorporated Printed in the USA All Rights Reserved

                  ISBN 978-1-5224-2921-0

                  Quality Management System Certified by DNV

                  ISOTS 16949Microchip received ISOTS-169492009 certification for its worldwide headquarters design and waferfabrication facilities in Chandler and Tempe Arizona Gresham Oregon and design centers in Californiaand India The Companyrsquos quality system processes and procedures are for its PICreg MCUs and dsPICreg

                  DSCs KEELOQreg code hopping devices Serial EEPROMs microperipherals nonvolatile memory andanalog products In addition Microchiprsquos quality system for the design and manufacture of developmentsystems is ISO 90012000 certified

                  ATBTLC1000

                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 56

                  AMERICAS ASIAPACIFIC ASIAPACIFIC EUROPECorporate Office2355 West Chandler BlvdChandler AZ 85224-6199Tel 480-792-7200Fax 480-792-7277Technical SupporthttpwwwmicrochipcomsupportWeb AddresswwwmicrochipcomAtlantaDuluth GATel 678-957-9614Fax 678-957-1455Austin TXTel 512-257-3370BostonWestborough MATel 774-760-0087Fax 774-760-0088ChicagoItasca ILTel 630-285-0071Fax 630-285-0075DallasAddison TXTel 972-818-7423Fax 972-818-2924DetroitNovi MITel 248-848-4000Houston TXTel 281-894-5983IndianapolisNoblesville INTel 317-773-8323Fax 317-773-5453Tel 317-536-2380Los AngelesMission Viejo CATel 949-462-9523Fax 949-462-9608Tel 951-273-7800Raleigh NCTel 919-844-7510New York NYTel 631-435-6000San Jose CATel 408-735-9110Tel 408-436-4270Canada - TorontoTel 905-695-1980Fax 905-695-2078

                  Australia - SydneyTel 61-2-9868-6733China - BeijingTel 86-10-8569-7000China - ChengduTel 86-28-8665-5511China - ChongqingTel 86-23-8980-9588China - DongguanTel 86-769-8702-9880China - GuangzhouTel 86-20-8755-8029China - HangzhouTel 86-571-8792-8115China - Hong Kong SARTel 852-2943-5100China - NanjingTel 86-25-8473-2460China - QingdaoTel 86-532-8502-7355China - ShanghaiTel 86-21-3326-8000China - ShenyangTel 86-24-2334-2829China - ShenzhenTel 86-755-8864-2200China - SuzhouTel 86-186-6233-1526China - WuhanTel 86-27-5980-5300China - XianTel 86-29-8833-7252China - XiamenTel 86-592-2388138China - ZhuhaiTel 86-756-3210040

                  India - BangaloreTel 91-80-3090-4444India - New DelhiTel 91-11-4160-8631India - PuneTel 91-20-4121-0141Japan - OsakaTel 81-6-6152-7160Japan - TokyoTel 81-3-6880- 3770Korea - DaeguTel 82-53-744-4301Korea - SeoulTel 82-2-554-7200Malaysia - Kuala LumpurTel 60-3-7651-7906Malaysia - PenangTel 60-4-227-8870Philippines - ManilaTel 63-2-634-9065SingaporeTel 65-6334-8870Taiwan - Hsin ChuTel 886-3-577-8366Taiwan - KaohsiungTel 886-7-213-7830Taiwan - TaipeiTel 886-2-2508-8600Thailand - BangkokTel 66-2-694-1351Vietnam - Ho Chi MinhTel 84-28-5448-2100

                  Austria - WelsTel 43-7242-2244-39Fax 43-7242-2244-393Denmark - CopenhagenTel 45-4450-2828Fax 45-4485-2829Finland - EspooTel 358-9-4520-820France - ParisTel 33-1-69-53-63-20Fax 33-1-69-30-90-79Germany - GarchingTel 49-8931-9700Germany - HaanTel 49-2129-3766400Germany - HeilbronnTel 49-7131-67-3636Germany - KarlsruheTel 49-721-625370Germany - MunichTel 49-89-627-144-0Fax 49-89-627-144-44Germany - RosenheimTel 49-8031-354-560Israel - RarsquoananaTel 972-9-744-7705Italy - MilanTel 39-0331-742611Fax 39-0331-466781Italy - PadovaTel 39-049-7625286Netherlands - DrunenTel 31-416-690399Fax 31-416-690340Norway - TrondheimTel 47-7289-7561Poland - WarsawTel 48-22-3325737Romania - BucharestTel 40-21-407-87-50Spain - MadridTel 34-91-708-08-90Fax 34-91-708-08-91Sweden - GothenbergTel 46-31-704-60-40Sweden - StockholmTel 46-8-5090-4654UK - WokinghamTel 44-118-921-5800Fax 44-118-921-5820

                  Worldwide Sales and Service

                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 57

                  • Introduction
                  • Table of Contents
                  • 1 Getting Started
                    • 11 Software Prerequisites
                      • 111 Installation Steps of Atmel Studio 7
                        • 12 Software Setup
                          • 121 Installation of Microchip SmartConnect application on a Mobile device
                            • 13 ATBTLC1000 Embedded Firmware
                            • 14 ATBTLC1000 Host Software API
                            • 15 Hardware Prerequisites
                              • 151 SMARTtrade SAM L21 Xplained Pro
                              • 152 ATBTLC1000ZR Xplained Pro Extension board
                                • 16 Hardware Setup
                                  • 2 Creating the Project and Initializing
                                    • 21 Creating Project from ASF
                                    • 22 Configuring ASF for ATBTLC1000-ZR
                                    • 23 Compiling and Testing the Project
                                      • 3 Establishing Connection with Central Device
                                        • 31 Configuring and Starting the Advertisement Process
                                          • 311 Flags (AD Type 0x00)
                                          • 312 Available Service UUID (AD Types 0x02 to 0x07)
                                          • 313 Device Name (AD Types 0x08 to 0x09)
                                            • 3131 Setting the Advertisement Payload (ble_advertisement_data_set)
                                            • 3132 Starting the Advertisement Process (at_ble_adv_start)
                                              • 314 Advertisement Process
                                                • 3141 Starting the Advertisement Process
                                                    • 32 Managing GAP events
                                                      • 321 Handling of Connected and Disconnected GAP Events
                                                          • 4 SettingHandling of Pre-Defined Service
                                                            • 41 Adding Device Info Service Component from ASF Wizard to Project
                                                            • 42 Configuring and Loading Device Information Service
                                                              • 421 Procedure to Configure and Load Device Info Service
                                                                  • 5 Setting up and Handling Custom Service
                                                                    • 51 Configuring and Loading the Custom Environment Service
                                                                      • 511 Procedure to Configure and Load Custom Environment Service
                                                                        • 52 Updating the Temperature Characteristic
                                                                          • 521 Setting a Characteristic Value ( at_ble_characteristic_value_set)
                                                                          • 522 Sending a Notification (at_ble_notification_send)
                                                                          • 523 Sending Temperature Information Once in Every 10 Seconds to Central
                                                                              • 6 Appendix A Software Solution - Pre-Defined Svc
                                                                              • 7 Appendix B Software Solution - Custom Service
                                                                              • 8 Document Revision History
                                                                              • The Microchip Web Site
                                                                              • Customer Change Notification Service
                                                                              • Customer Support
                                                                              • Microchip Devices Code Protection Feature
                                                                              • Legal Notice
                                                                              • Trademarks
                                                                              • Quality Management System Certified by DNV
                                                                              • Worldwide Sales and Service

                    Figure 1-7 ATBTLC1000ZR-XPRO Extension

                    2 Connect the ATBTLC1000ZR-XPRO extension to EXT1 of SAM L21 XPRO as illustrated in thefollowing figureFigure 1-8 ATBTLC1000ZR-XPRO Extension connected with SAM L21 XPRO

                    3 Connect the board to PC using the ldquoDebug USB ConnectorrdquoFigure 1-9 SAM L21 XPRO Connection to PC

                    ATBTLC1000Getting Started

                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 10

                    4 Now the Hardware is ready for development

                    ATBTLC1000Getting Started

                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 11

                    2 Creating the Project and InitializingThis chapter provides the process of creating an application startup project using Atmel Studio Prior tocreating a project the user must know hardware architecture and software requirements to configuredrivers

                    The hardware connection between the SAM L21 XPRO and the ATBTLC1000ZR XPRO board isillustrated in following figure This SAM L21 board is used as host MCUFigure 2-1 ATBTLC1000ZR Xpro Board Connection with SAM L21

                    Note  For more details refer to module datasheet and XPRO board design documentation

                    21 Creating Project from ASFAdvanced Software Framework has a pre-configured Bluetooth Low Energy Startup template project thatincludes Bluetooth Low Energy software API for Host and ATBTLC1000 and their peripheral driverdependencies This is used as starting project for any Bluetooth Low Energy project development

                    To create the project follow the steps below

                    1 Search for the ldquoBLE-Startup Templaterdquo from the File gt New gt Example Project menu in AtmelStudio

                    ATBTLC1000Creating the Project and Initializing

                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 12

                    Figure 2-2 Advanced Software Framework_New Example Project

                    Note  ATBTLC1000SAMB11 related projects are prefixed with ldquoBLErdquo making it easier to filter theproject in the dialogue box

                    2 Select the appropriate ldquoBLE-Startup Templaterdquo project corresponding to the intended Host MCUXplained Pro board and then press OK button to import the BLE startup template project SelectldquoBLE-Startup Template ndash SAM L21 Xplained Pro SAML21J18Brdquo for this hands-onNote  Rev B XPRO boards can be identified by SAML21J18B silk screen marking below SAML21MCU

                    3 The BLE startup project is now created and loaded in Atmel StudioFigure 2-3 Startup_Template Project

                    ATBTLC1000Creating the Project and Initializing

                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 13

                    Note  The main project routine of ldquoStartup Template projectrdquo already includes host MCU low levelinitialization BLE and ATBTLC1000 initialization The added ASF components in project can beviewed from ldquoASFgtASF Wizardrdquo Select the created project from Project drop down box

                    Figure 2-4 ASF Wizard Window

                    ndash BLE_STACK Platform Interface ndash Core manager of Bluetooth Low Energy Host API Itmanages ATBTLC1000 device initialization GAP and GATT events

                    ndash Timer Driver ndash Task timer functionality by using a Timer Counter (TC) or Timer Counter forControl (TCC) peripheral

                    ndash Console UART ndash Universal Asynchronous ReceiverTransmitter (UART) communication insynchronousblocking mode

                    ndash Generic Board Support ndash Host MCU Board specific initializationndash System Drivers ndash Select MCUrsquos System peripheral drivers These drivers are included by

                    default in ASF projects and manage the clocks and oscillator of the system4 The main routine contains the MCU low level initialization and ATBTLC1000 initialization The

                    following figure illustrates the flowchart of the main routine

                    ATBTLC1000Creating the Project and Initializing

                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 14

                    Figure 2-5 Main Routine Flowchart

                    22 Configuring ASF for ATBTLC1000-ZR1 The default ldquoStartup Template Projectrdquo is configured for ATBTLC1000-MR module with 6-Wire

                    mode2 Navigate to Project properties Project gt Project properties gt Toolchain gt ARMGNU C Compiler gt

                    Symbols3 The ATBTLC1000ZR-XSTK kit uses the ATBTLC1000-ZR110CA module Change symbol

                    BLE_MODULE to BTLC1000_ZR and enable UART_FLOWCONTROL_4WIRE_MODE forATBTLC1000-ZR module as shown in the figure belowFigure 2-6 Startup Template Project Window

                    Note  This configuration change is not required for ATBTLC1000-MR module

                    ATBTLC1000Creating the Project and Initializing

                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 15

                    23 Compiling and Testing the Project

                    1 Click the ldquo rdquo button ltF7gt to compile the project2 Verify that no build error appears in Atmel Studio output window

                    Figure 2-7 Atmel Studio Output Window

                    3 Connect the SAM L21 XPRO to PC (if not already done)4 To access the project properties go to Project gt

                    STARTUP_TEMPLATE_SAML21_XPLAINED_PRO_B1 PropertiesFigure 2-8 Compiling the Project

                    5 In project properties click the Tool tab and select the EDBG of SAM L21 Xplained Pro board asdebuggerprogrammerFigure 2-9 Selection of DebuggerProgrammer

                    6 Open any Terminal application (for example TeraTerm) Select the COM port enumerated on thePC and set the following parameters

                    ndash EDBG associated COM Port (Check Windows Device Manager)

                    ATBTLC1000Creating the Project and Initializing

                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 16

                    ndash Baudrate 115200ndash Parity Nonendash One Stop bitndash Enable Hardware Flow Control

                    7 Click to save the project ltCtrl+Sgt

                    8 Click rdquo to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt9 The initialization of the ATBTLC1000ZR module must return the Bluetooth Device Address and

                    Address typeFigure 2-10 Console Log Window

                    Note 1 If initialization fails make sure to verify the hardware configuration is aligned with the

                    description refer to 16 Hardware Setup2 The initialization of ATBTLC1000 takes few seconds due to patch download process

                    ATBTLC1000Creating the Project and Initializing

                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 17

                    3 Establishing Connection with Central DeviceThe Bluetooth Low Energy connectivity is added to the application that is used to connect with theBluetooth Low Energy central The first step is about the management of Bluetooth connection with acentral device When using ATBTLC1000 device this process is managed by dedicated API function callsassociated with ATBTLC1000 events handling

                    The interaction between Host MCU ATBTLC1000 and Bluetooth Low Energy central during connectionestablishment is as follows

                    Figure 3-1 Establishing Connection with Central Device

                    On host MCU side the management of the Bluetooth connection is performed through three main steps1 GAP callback registration2 Advertisement configuration3 ATBTLC1000 event handling

                    In the existing project main routine the integration of these steps are highlighted in red in the followingflowchart

                    ATBTLC1000Establishing Connection with Central Device

                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 18

                    Figure 3-2 Main Routine Flow Chart

                    31 Configuring and Starting the Advertisement ProcessThe Bluetooth Low Energy devices transmit advertisement packets to show their presence to nearbydevices The advertisement packet is sent periodically at a time interval defined by variableldquoadvintervalrdquo defined in Bluetooth SIG specification To avoid any collision with other wireless networksuch as Wi-Fireg a channel change is performed for each advertisement packet sent (data frequencyhopping) as illustrated in the following figureFigure 3-3 Advertisement Process

                    During advertisement the payload structure to be sent differs from application to application and is set byusing encapsulated packet data unit type information (PDU_TYPE)

                    ATBTLC1000Establishing Connection with Central Device

                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 19

                    Figure 3-4 PDU Advertising

                    The following table lists the different PDU types used according to device role

                    Advertising event types (PDU_TYPE) Broadcaster Observer Peripheral Central

                    Connectible undirected event (ADV_IND) Excluded Excluded Mandatory Excluded

                    Connectible directed event(ADV_DIRECT_IND) Excluded Excluded Optional Excluded

                    Non-connectible undirected event(ADV_NONCONN_IND) Mandatory Excluded Optional Excluded

                    Scannable undirected event (ADV_SCAN_IND) Optional Excluded Optional Excluded

                    As our device acts as a Bluetooth Low Energy peripheral the connectable undirected event (ADV_IND)advertising type is used See the following description about the ADV_IND advertisement packetFigure 3-5 ADV_IND Advertisement Packet

                    The ADV_IND payload contains different Advertisement Data types (AD0 - ADn) which provide specificinformation to the central device such as device short name Tx power level and list of availableservices UUIDs The number of advertisement data types that can be added to the advertisementpayload are limited by the advertisement payload size of 31 octets

                    Following is a list of advertisement data types that are commonly found in ADV_IND payload

                    ATBTLC1000Establishing Connection with Central Device

                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 20

                    311 Flags (AD Type 0x00)The flags describe the basic device capability such as BLE support BLE discoverable mode BREDRsupport and simultaneous BRED

                    312 Available Service UUID (AD Types 0x02 to 0x07)The Bluetooth Low Energy advertisement payloads are limited to 31 bytes Therefore only two 128-bitUUID values can be added to the payload For this purpose the specific AD types describe the length ofthe advertised UUID and provide information as to whether the payload contains a incompletecompletelist of UUID supported by the GATT server

                    bull 0x02 - Incomplete list of 16-bit UUIDs (adopted GATT services)bull 0x03 - Complete list of 16-bit UUIDs (adopted GATT services)bull 0x06 - Incomplete list of 128-bit UUIDs (custom GATT services)bull 0x07 - Complete list of 128-bit UUIDs (custom GATT services)

                    Note  When a 16-bit UUID is transmitted only the unique 2-byte value is sent The client knows that it isrequired to be injected into the base UUID For example the Health Thermometer Service is assigned as0x1809 so its equivalent UUID is 00001809-0000-1000-8000-00805F9B34FB

                    313 Device Name (AD Types 0x08 to 0x09)This AD type field is used to advertise the Local name of device in the network The Local name datatype value indicates if the name is complete or shortened If the name is shortened the complete namecan be read after the connection is established

                    bull 0x08 - Shortened Local Namebull 0x09 - Complete Local Name

                    Note 1 A shortened name contains only continuous characters from the beginning of the full name For

                    example if the device name is BT_Device_Name then the shortened name can beBT_Device or BT_Dev

                    2 Complete data type list are available at httpswwwbluetoothcomspecificationsassigned-numbersgeneric-access-profile

                    For management of advertisement process and cover the different configurations specified by SIG theATBTLC1000 Host driver provides the two functions elaborated in the following sections

                    In the application use these two functions to setup the following ADV_IN type payloadFigure 3-6 ADV_IN Type Payload Process

                    ATBTLC1000Establishing Connection with Central Device

                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 21

                    3131 Setting the Advertisement Payload (ble_advertisement_data_set)Prototype ndashat_ble_status_t at_ble_adv_data_set (uint8_t const const adv_datauint8_t adv_data_lenuint8_t const const scan_resp_datauint8_t scan_response_data_len)

                    Description ndash Set clear or update the advertisement and scan response data

                    Parameters ndash

                    bull adv_data ndash Raw data to be placed in advertisement packetbull adv_data_len ndash Data length for adv_data Max size 28 bytes (3 bytes are reserved to set

                    advertising AD type flags based on the selected Advertising mode and the user is not required toconfigure AD type flags in the advertisement payload)

                    bull scan_resp_data ndash Raw data to be placed in the scan response packet If NULL no changes aremade to the current scan response packet data

                    bull scan_response_data_len ndash Data length for scan_resp_data Max size 31 bytes

                    Return ndash Execution Status

                    This function requires a parameter raw adv_data to be sent to central Following is an example of itsdefinition

                    static uint8_t adv_data[] = 0x11 AD1 length = 170x03 AD1 Type = Complete list of 128-bit UUIDs0x1b0xc50xd50xa50x020x000xa60x87 AD1 = UUID MSBs0xe50x110x360x390xc00xba0x5a0xf00x0A AD2 Length = 100x09 AD2 Type = Complete local NamelsquoMrsquorsquoyrsquorsquo_rsquorsquoDrsquorsquoErsquorsquoVrsquo AD2 = ldquoMy_DEVrdquo

                    3132 Starting the Advertisement Process (at_ble_adv_start)Prototype ndashat_ble_status_t at_ble_adv_start (at_ble_adv_type_t typeat_ble_adv_mode_t modeat_ble_addr_t peer_addrat_ble_filter_type_t filtereduint16_t intervaluint16_t timeoutbool disable_randomness)

                    Description ndash Start advertisement process

                    Parameters ndash

                    bull type ndash Advertising type to be used can bendash AT_BLE_ADV_TYPE_UNDIRECTEDndash AT_BLE_ADV_TYPE_DIRECTEDndash AT_BLE_ADV_TYPE_SCANNABLE_UNDIRECTEDndash AT_BLE_ADV_TYPE_NONCONN_UNDIRECTEDndash AT_BLE_ADV_TYPE_DIRECTED_LDCndash AT_BLE_ADV_TYPE_SCAN_RESPONSE

                    bull mode ndash Advertising mode to be used can be

                    ATBTLC1000Establishing Connection with Central Device

                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 22

                    ndash AT_BLE_ADV_NON_DISCOVERABLEndash AT_BLE_ADV_GEN_DISCOVERABLEndash AT_BLE_ADV_LIM_DISCOVERABLEndash AT_BLE_ADV_BROADCASTER_MODE

                    bull peer_addr ndash Specify peer address when advertising type is AT_BLE_ADV_TYPE_DIRECTEDbull filtered ndash

                    ndash AT_BLE_ADV_FP_ANY ndash Allow scan and connection requests from anyonendash AT_BLE_ADV_FP_FILTER_SCANREQ ndash Allow scan request from White List devices onlyndash AT_BLE_ADV_FP_FILTER_CONNREQ ndash Allow connection request from White List devices

                    onlyndash AT_BLE_ADV_FP_FILTER_BOTH ndash Allow scan and connection requests from White List

                    devices onlybull interval ndash Advertisement interval (in 0625 ms units)bull timeout ndash Advertising timeout between 0x0001 and 0x028F in scale of seconds This parameter

                    must be set to 0 if type equals AT_BLE_ADV_TYPE_DIRECTEDbull disable_randomness ndash When disabled advertisements are performed at the exact interval

                    without adding random 10 ms tempo

                    Return ndash Execution Status

                    314 Advertisement ProcessIn this assignment the advertisement process is performed in the following configuration

                    bull Undirected (Type AT_BLE_ADV_TYPE_UNDIRECTED)bull Discoverable (Mode AT_BLE_ADV_GEN_DISCOVERABLE)bull No peer Address (peer_addr = NULL)bull No filtering (filtered = AT_BLE_ADV_FP_ANY)bull Advertisement interval 1s (interval = 1600)bull Maximum timeout (timeout 655)bull Randomness enabled (disable_randomness = FALSE)

                    3141 Starting the Advertisement Process1 Open startup_templatec file2 Declare the following ble_status global variable in startup_templatec as volatile

                    include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehvolatile at_ble_status_t ble_status

                    3 Declare the following adv_data global variable in startup_templatec as staticstatic uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD)0x09 AD2 Type = Complete local Name

                    ATBTLC1000Establishing Connection with Central Device

                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 23

                    My_SENS AD2 = ldquoMy_SENSrdquo

                    Note 1 The name of the device is to be changed (AD2 field)2 According to the new name AD2 length must be adapted to new AD2 content

                    4 Add the following start_advertisement function in startup_templatec prototype for thefunction void start_advertisement (void) also this can be added to avoid warningsvoid start_advertisement (void)printf(n Assignment 21 Start Advertisement)Set advertisement datable_status = at_ble_adv_data_set(adv_datasizeof(adv_data)NULL0)Start Advertisementble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550)if(ble_status = AT_BLE_SUCCESS)printf(n Failed to start advertisement)

                    5 Start the advertisement process by adding the following highlighted code to the application mainroutineint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Start Advertising process start_advertisement() Register PrimaryIncluded service in case of GATT Server while(true) Write application task

                    6 Click to save the project ltCtrl+Sgt

                    7 Click button to compile the project ltF7gt8 Verify that no build error appears in Atmel Studio output window

                    Figure 3-7 Atmel Studio Output Window

                    ATBTLC1000Establishing Connection with Central Device

                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 24

                    9 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt10 Open Microchip SmartConnect Application on Android or iOS device and tap START SCAN button

                    Note  The device must appear in Microchip SmartConnect Application

                    Figure 3-8 Microchip SmartConnect Application

                    11 Terminal must display the following Log outputFigure 3-9 Log Output Window

                    32 Managing GAP eventsThe management of the Bluetooth connection at the host MCU level is done through reception andhandling of events reported by the ATBTLC1000 These events are generated by ATBTLC1000 GAPGATT and L2CAP layers to notify the host about the ongoing Bluetooth interaction with other devices inits vicinity

                    ATBTLC1000Establishing Connection with Central Device

                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 25

                    To manage events coming from the ATBTLC1000 module the host driver must provide able_mgr_events_callback_handler function that allows registration of application callback functionto be executed on each event reported by the ATBTLC1000 module

                    Prototype ndashbool ble_mgr_events_callback_handler(ble_mgr_event_cb_t event_cb_typeble_mgr_event_t event_typeconst voidble_event_handler)

                    Description ndash Used by ProfileServiceApplication to register the Bluetooth Low Energy eventsrsquocallbacks

                    Parameters ndash

                    event_cb_type ndash types of actions to perform on callbacks can be either

                    REGISTER_CALL_BACK or

                    UNREGISTER_CALL_BACKevent_type ndash Any one of the event types can be used

                    BLE_GAP_EVENT_TYPEBLE_GATT_CLIENT_EVENT_TYPEBLE_GATT_SERVER_EVENT_TYPEBLE_L2CAP_EVENT_TYPEBLE_GATT_HTPT_EVENT_TYPEBLE_DTM_EVENT_TYPEBLE_CUSTOM_EVENT_TYPEble_event_handler ndash pointer to handler list

                    Structure ble_gap_event_cb_t defines the GAP callbacks Similarly structuresble_gatt_client_event_cb_t and ble_gatt_server_event_cb_t define the callbacks of GATTevents

                    typedef struct ble_gap_event_cb BLE Undefined events received from ATBTLC1000 which is not handled in Libraryble_event_callback_t undefined BLE scan information contains the peer device scan information Refer ref at_ble_scan_info_tble_event_callback_t scan_info Once the BLE scan timeout or scan stop triggers the scan report event Refer ref at_ble_scan_report_tble_event_callback_t scan_report Advertisement complete event Refer ref at_ble_adv_cmp_evt_tble_event_callback_t advt_cmp Advertisement report in case of advertisement stopped due to advertisement timeout Refer ref at_ble_adv_report_tble_event_callback_t adv_report BLE device own random address changed event Refer ref at_ble_rand_addr_changed_tble_event_callback_t rand_addr_changed BLE connected event device connected to peer device Refer ref at_ble_connected_tble_event_callback_t connected BLE disconnected event device disconnected from peer device Refer ref at_ble_disconnected_tble_event_callback_t disconnected Connection parameter update done on peer device and own device Refer ref at_ble_conn_param_update_done_t

                    ATBTLC1000Establishing Connection with Central Device

                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 26

                    ble_event_callback_t conn_parameter_update_done Connection parameter update request from peer device Refer ref at_ble_conn_param_update_request_tble_event_callback_t conn_param_update_request Pair complete event as part of end of pairing process Refer ref at_ble_pair_done_tble_event_callback_t pair_done Pair request event from Central device Refer ref at_ble_pair_request_tble_event_callback_t pair_request Slave security request received from peer Peripheral device Refer ref at_ble_slave_sec_request_tble_event_callback_t slave_sec_request Pair Key request event from Peer central device Refer ref at_ble_pair_key_request_tble_event_callback_t pair_key_request encryption request comes from the peer device Needs to supply the bonding information which is stored earlier ref at_ble_encryption_request_tble_event_callback_t encryption_request encryption status changed event received from SMP once the encryption is started ref at_ble_encryption_status_changed_tble_event_callback_t encryption_status_changed Event triggered once the Resolve random address is resolved using supplied IRKs ref at_ble_resolv_rand_addr_status_tble_event_callback_t resolv_rand_addr_status Event is triggered once the connection signature information indication received ref at_ble_sign_counter_tble_event_callback_t sign_counters_ind Peer attribute information indication received Event ref at_ble_peer_att_info_ind_tble_event_callback_t peer_att_info_ind Peer device channel map received indication ref at_ble_channel_map_tble_event_callback_t con_channel_map_indble_gap_event_cb_t

                    Note  Callback definition is application-specific If the application layer requires a specific event callbackthen the specific member of the structure is to be assigned with the address of the callback function

                    In this assignment two callback functions on Connected and Disconnected GAP events are usedThis allows the application to restart the advertising process on Disconnect manage connectioninformation and startstop of sensor data update

                    321 Handling of Connected and Disconnected GAP Events1 Open the startup_templatec file2 Define the following software flags as global variables in startup_templatec file volatile

                    bool timer_flag = false and volatile bool connected_flag = false3 Declare and implement the following ble_connected_cb function in the

                    startup_templatec file Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param)printf(n Assignment 22 Application connected )connected_flag = trueALL_UNUSED(param)return AT_BLE_SUCCESS

                    4 Declare and implement the following ble_disconnected_cb function instartup_templatec file Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param)printf(n Assignment 22 Application disconnected )connected_flag = falsestart_advertisement()ALL_UNUSED(param)return AT_BLE_SUCCESS

                    ATBTLC1000Establishing Connection with Central Device

                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 27

                    5 Declare the following static GAP callback structure in ldquostartup_templatecrdquo filestatic const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTEDdisconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                    6 Add the following register_btlc1000_callbacks function in startup_templatec Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void) Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks)ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACKBLE_GAP_EVENT_TYPEampapp_gap_handle)if (ble_status = true)printf(nError when Registering ATBTLC1000 callbacks)

                    7 Add the register_btlc1000_callbacks function call prior to start advertisement in theapplication main routineint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Gap Callbacks register_btlc1000_callbacks ( ) Start Advertising process start_advertisement() Register PrimaryIncluded service in case of GATT Server while(true) Write application task

                    8 Add the ble_event_task function call in the project main loop to handle the different incomingevents from ATBTLC1000while(true)ble_event_task()

                    9 Press button ltF7gt to compile the project and verify that no build error appear in the AtmelStudio output window

                    ATBTLC1000Establishing Connection with Central Device

                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 28

                    Figure 3-10 Atmel Studio Output Window

                    10 Click ldquo rdquo to save the project ltCtrl+Sgt

                    11 Click ldquo rdquo to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt and checkcorrect initialization of the ATBTLC1000

                    12 Open the Microchip SmartConnect application on Androidtrade or iOS device13 Press the ltStart Scangt button and pair peripherals by selecting them in the device list (pass key

                    123456)Note 

                    1 Pairing event handling is carried out by ble_managerc Refer toble_pair_key_request_handler() for code implementation The default pass key of123456 is also fixed inside this function This can be changed here

                    Figure 3-11 Console Log Window

                    Note  After peripheral pairing no services information are displayed in Microchip SmartConnectapplication as no service is currently defined and started on peripheral side

                    ATBTLC1000Establishing Connection with Central Device

                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 29

                    4 SettingHandling of Pre-Defined ServiceThe management of services are done in the GATT layer of the ATBTLC1000 ROM coded Bluetooth LowEnergy Stack The GATT transactions are based on high-level nested objects called Profiles Servicesand Characteristics stored in SRAM memory of ATBTLC1000 device This assignment adds the pre-defined service of information service from ASF library

                    Figure 4-1 ATBTLC1000 GATT Layers

                    bull ProfilesProfiles are not available in the Bluetooth Low Energy peripheral they are simply a pre-definedcollection of services that have been compiled by either the Bluetooth SIG (adopted GATT basedprofile) or by the application developer (custom profiles) For example the Heart Rate Profilecombines the Heart Rate Service and the Device Information Service

                    Note  The complete list of officially adopted GATT-based profiles is available on the BluetoothDeveloper Portal

                    bull ServicesA service is a collection of data and associated behaviors which accomplish a particular function orfeature of a device or portions of a device A service may reference other primary or secondaryservices andor a set of characteristics that make up the service Each service distinguishes itselffrom other services by means of a unique numeric ID called as UUID which can be either 16-bit(for officially adopted Bluetooth Low Energy Services) or 128-bit (for custom services)

                    Note  A full list of officially adopted services and their UUID are seen on the Bluetooth DeveloperPortal

                    bull CharacteristicsA characteristic is the lowest level concept in GATT transactions It contains a single data point withdifferent attributes such as notify read or write capabilities Similar to Services each characteristiccan be distinguished by a SIG-defined adopted UUID (16-bit) or custom (128-bit) UUID This UUIDensures interoperability across Bluetooth Low Energy devices The characteristics are important tointeract with in a Bluetooth Low Energy network In addition to standard UUID the custom UUID isused in case of specific application When characteristics with custom UUID are used in a devicethen it will be interoperable only with those devices that support these characteristics with customUUID

                    ATBTLC1000SettingHandling of Pre-Defined Service

                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 30

                    In this assignment the following steps are added to the Host MCU application to set up and handle adevice information service within the ATBTLC1000 module The following steps are added to the startupproject

                    bull Adding device info service component from ASFbull Configuring and loading the service

                    Figure 4-2 Device Information Service

                    41 Adding Device Info Service Component from ASF Wizard to ProjectTo use the ldquoofficially adopted GATT-based profilesrdquo from SIG ASF provides Bluetooth Low Energy servicecomponents including init functions that pre-define services in Host memory

                    Note  Before starting this assignment be sure to follow the steps mentioned in 2 Creating the Projectand Initializing and 3 Establishing Connection with Central Device

                    1 Click ASF gt ASF Wizard2 Search for ldquoBLE-Device Information Servicesrdquo and then click Add

                    ATBTLC1000SettingHandling of Pre-Defined Service

                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 31

                    Figure 4-3 Available Modules

                    3 Now ldquoBLE-Device Information Servicesrdquo (component) appears in ldquoSelected ModulesrdquoFigure 4-4 Selected Modules

                    4 Click Apply to add the component to the projectFigure 4-5 Adding the Modules to Project

                    5 The ldquoDevice Information Servicerdquo component is added to the project and is confirmed bydevice_information folder added in Solution Explorer

                    ATBTLC1000SettingHandling of Pre-Defined Service

                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 32

                    Figure 4-6 Device Information Service Added to Project

                    42 Configuring and Loading Device Information ServiceThe ATBTLC1000 Host driver provides a set of GATT functions that allows storing and updating theservices in ATBTLC1000 memories

                    Prototype at_ble_status_t at_ble_primary_service_define(at_ble_uuid_t uuidat_ble_handle_t service_handleat_ble_included_service_t included_service_listuint16_t included_service_countat_ble_characteristic_t charactristic_listuint16_t charactristic_count)

                    Description Defines a new primary service along with its included services and characteristics inATBTLC1000

                    Parameters

                    bull Uuid [In] ndash primary service UUIDbull service_handle [Out] ndash Service handle is returned herebull included_service_list [In] ndash an array of included service referencesbull included_service_count [In] ndash number of elements in included_service_listbull charactristic_list [InOut] ndash an array of characteristics included in the service this array

                    is updated with respective characteristics handlesbull charactristic_count[In] ndash number of elements in charactristic_list

                    Return Execution Status

                    This function requires an argument as GATT description structure of the service that is implemented Thepreviously added Device Info service component provides Bluetooth Low Energy service middlewareincluding the init functions that predefine the services See below ldquodis_init_servicerdquo from device infoBLE service (device_infohc)

                    Prototype ndash void dis_init_service(dis_gatt_service_handler_t device_info_serv)Description ndash Initialize the device information service handler in the host MCU memory

                    Parameters ndash

                    ATBTLC1000SettingHandling of Pre-Defined Service

                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 33

                    bull device_info_serv [Inout] pointer to device info GATT description handler to beupdated

                    Return None

                    Here is a picture of GATT device info service descriptor definition in Host memory

                    device_info_serv-gtserv_handle = 0device_info_serv-gtserv_uuidtype = AT_BLE_UUID_16device_info_serv-gtserv_uuiduuid[0] = (uint8_t) DIS_SERVICE_UUIDdevice_info_serv-gtserv_uuiduuid[1] = (uint8_t) (DIS_SERVICE_UUID gtgt 8)Characteristic Info for Manufacturer Name Stringdevice_info_serv-gtserv_chars[0]char_val_handle = 0 handle stored here device_info_serv-gtserv_chars[0]uuidtype = AT_BLE_UUID_16device_info_serv-gtserv_chars[0]uuiduuid[0] = (uint8_t) IS_CHAR_MANUFACTURER_NAME_UUID UUID Manufacturer Name String device_info_serv-gtserv_chars[0]uuiduuid[1] = (uint8_t) (DIS_CHAR_MANUFACTURER_NAME_UUID gtgt 8) UUID Manufacturer Name String device_info_serv-gtserv_chars[0]properties = AT_BLE_CHAR_READ Properties memcpy(char_valuemanufacturer_nameDEFAULT_MANUFACTURER_NAMEDIS_CHAR_MANUFACTURER_NAME_INIT_LEN)device_info_serv-gtserv_chars[0]init_value = char_valuemanufacturer_namedevice_info_serv-gtserv_chars[0]value_init_len = DIS_CHAR_MANUFACTURER_NAME_INIT_LENdevice_info_serv-gtserv_chars[0]value_max_len = DIS_CHAR_MANUFACTURER_NAME_MAX_LENif BLE_PAIR_ENABLEdevice_info_serv-gtserv_chars[0]value_permissions = AT_BLE_ATTR_READABLE_REQ_AUTHN_NO_AUTHR permissions elsedevice_info_serv-gtserv_chars[0]value_permissions = AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR permissions endifdevice_info_serv-gtserv_chars[0]user_desc = NULL user defined name device_info_serv-gtserv_chars[0]user_desc_len = 0device_info_serv-gtserv_chars[0]user_desc_max_len = 0device_info_serv-gtserv_chars[0]user_desc_permissions = AT_BLE_ATTR_NO_PERMISSIONS user description permissionsdevice_info_serv-gtserv_chars[0]client_config_permissions = AT_BLE_ATTR_NO_PERMISSIONS client config permissionsdevice_info_serm hdsv-gtserv_chars[0]server_config_permissions = AT_BLE_ATTR_NO_PERMISSIONS server config permissionsdevice_info_serv-gtserv_chars[0]user_desc_handle = 0 user desc handlesdevice_info_serv-gtserv_chars[0]client_config_handle = 0 client config handlesdevice_info_serv-gtserv_chars[0]server_config_handle = 0 server config handlesdevice_info_serv-gtserv_chars[0]presentation_format = NULL presentation format

                    Note  In case of custom service the above definition initialization must be taken care of by thedeveloper

                    421 Procedure to Configure and Load Device Info Service1 Include device info service header file (device_infoh) at the beginning of

                    startup_templatec fileinclude ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehinclude device_infoh

                    2 Define a device info service handler as global in startup_templatec file Serviceshandlers dis_gatt_service_handler_t dis_service_handler

                    ATBTLC1000SettingHandling of Pre-Defined Service

                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 34

                    3 Add dis_init_service and at_ble_primary_service_define functions as called abovethe advertisement start in main routine Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service)dis_init_service (ampdis_service_handler) Define the primary service in the GATT server database if ((dis_primary_service_define (ampdis_service_handler)) = AT_BLE_SUCCESS)printf(Device Information Service definition failed) Start Advertising process start_advertisement()

                    4 Click to save the project ltCtrl+Sgt and compile the project by pressing button ltF7gt5 Verify that no build error appears in Atmel Studio output window

                    Figure 4-7 Atmel Studio Output Window

                    6 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt7 Open ldquoMicrochip SmartConnectrdquo application on Android or iOS device8 Press ltStart Scangt button and connect to peripheral

                    Note  The device name is a characteristic and contains the name of the device This device namecan be read by the central device to know the name of the device in order to differentiate thedevices This is being set using at_ble_device_name_set()API The device name is set bydefault when ble_device_init is called and the value is pre-defined using BLE_DEVICE_NAMEThe device name can also be sent as part of advertisement payload to be same as the oneconfigured in at_ble_adv_data_set() API It is the responsibility of users to keep the devicename set in advertisement payload the same as that configured inat_ble_device_name_set()

                    9 The Service must now be visible after pairing with peripheral under Microchip SmartConnectapplication

                    ATBTLC1000SettingHandling of Pre-Defined Service

                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 35

                    Figure 4-8 Service List in Microchip SmartConnect Application

                    Note  If the pairing of ATBTLC1000 with Microchip Smart connect is not successful then removethe pairing information from mobile by selecting ldquoForget Devicerdquo from the mobile settings Thereason for this is that the mobile app stores the previous pairing information but the ATBTLC1000device lost the previous pairing information due to RESET since it was stored on temporary storage(RAM)

                    10 The serial terminal must display the following log output windowFigure 4-9 Console Log Window

                    ATBTLC1000SettingHandling of Pre-Defined Service

                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 36

                    5 Setting up and Handling Custom ServiceThe previous assignment describes the handling of Bluetooth Low Energy SIG defined device infoservice which is the predefined service available in ASF component This assignment describes thecustom service So the service initialization needs to be implemented In the context of customizedenvironment service the following service description is pushed in ATBTLC1000 memory

                    Figure 5-1 Custom Service

                    Custom Environment Service Description

                    bull UUID type ndash Custom UUID (128-bit)bull UUID ndash 1bc5d5a5-0200-a687-e511-3639c1ba5af0

                    Characteristic 0 (Temperature)

                    bull User Description ndash Temperaturebull UUID type ndash Custom UUID (128-bit)bull UUID ndash 1bc5d5a5-0200-a687-e511-3639d8ba5af0bull Properties ndash Read Notifybull Value permission ndash No authorization requiredbull Client config permission ndash No permissionbull Server config permission ndash No permission

                    Note  In this definition UUIDs are generated randomly Custom servicescharacteristics are free to useany 128-bit UUID less than the base UUID There is no reserved space for vendors to use 16-bit or 32-bitUUIDs

                    With this definition any temperature change is notified to the central The notify mechanism allows thecentral to know when the data changes When notify property of the Client Characteristic ConfigurationDescriptor is enabled by the central and the device writes the new value then this updated value isautomatically sent to the central through a notification The central is not required to send readcharacteristic commands explicitly to the peripheral (GATT server)

                    To setup and handle the custom environment service in ATBTLC1000 module the following steps areadded to the Host MCU application

                    bull Configure and load the custom servicebull Update Temperature characteristic and notify to the central devicebull Receive and handle notification from the Host device

                    ATBTLC1000Setting up and Handling Custom Service

                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 37

                    Figure 5-2 Custom Service Flowchart

                    51 Configuring and Loading the Custom Environment ServiceThe ATBTLC1000 Host driver provides the following set of GATT functions that allows it to push andupdate the service descriptions in the ATBTLC1000 SRAM memory

                    Note  Before starting this assignment be sure to follow the steps mentioned in 2 Creating the Projectand Initializing and 3 Establishing Connection with Central Device

                    Prototype ndashat_ble_status_t at_ble_primary_service_define(at_ble_uuid_t uuidat_ble_handle_t service_handleat_ble_included_service_t included_service_listuint16_t included_service_countat_ble_characteristic_t charactristic_listuint16_t charactristic_count)

                    Description ndash Defines a new primary service along with its included services and characteristics inATBTLC1000 module

                    Parameters

                    bull Uuid [In] ndash primary service UUIDbull service_handle [Out] ndash service handle is returned herebull included_service_list [In] ndash array of included service referencesbull included_service_count [In] ndash number of elements in included_service_listbull charactristic_list [InOut] ndash an array of characteristics included in the service this array

                    is update with respective characteristics handlesbull charactristic_count[In] ndash number of elements in charactristic_list

                    ATBTLC1000Setting up and Handling Custom Service

                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 38

                    Return ndash Execution Status

                    bull Characteristics ndashndash Characteristics definition is done through specific array of following

                    ldquoat_ble_characteristic_trdquo structure instancestypedef structat_ble_handle_t char_val_handle Handler (returned during service initialisation)at_ble_uuid_t uuid Characteristic UUID (type and value)at_ble_char_properties_t propertiesCharac Properties (read write notify)uint8_t init_value initial valueuint16_t value_init_len initial value lengthuint16_t value_max_len value max lengthat_ble_attr_permissions_t value_permissions access authorization and authenticationuint8_t user_desc User descriptionuint16_t user_desc_len User description lengthuint16_t user_desc_max_len User description max lengthat_ble_char_presentation_t presentation_format Presentation formatat_ble_attr_permissions_t user_desc_permissions User description permissionat_ble_attr_permissions_t client_config_permissions client permissionat_ble_attr_permissions_t server_config_permissions server permissionat_ble_handle_t user_desc_handle description handlerat_ble_handle_t client_config_handle Client config handlerat_ble_handle_t server_config_handle Server config handler at_ble_characteristic_t

                    511 Procedure to Configure and Load Custom Environment Service1 Define the following service UUID and characteristic UUID in startup_templatec file

                    define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

                    2 Define the following environment service handler and characteristics variable as global instartup_templatec file Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

                    3 Add the following service initialization function custom_environment_service_init instartup_templatecvoid custom_environment_service_init(void) at_ble_uuid_t environment_service_uuiduint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUIDuint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperatureenvironment_service_characs[0]user_desc_len = 10environment_service_characs[0]user_desc_max_len = 10environment_service_characs[0]uuidtype = AT_BLE_UUID_128memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16)environment_service_characs[0]properties = AT_BLE_CHAR_READ |AT_BLE_CHAR_NOTIFYenvironment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature valueenvironment_service_characs[0]value_permissions =(AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuidampenvironment_service_handlerNULL0environment_service_characs1)=AT_BLE_SUCCESS)printf(n Assignment 41 Failed to Initialize custom environment service)

                    ATBTLC1000Setting up and Handling Custom Service

                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 39

                    elseprintf(n Assignment 41 Initialize custom environment service)

                    4 Declare and implement the following GATT event callback functioncustom_char_changed_app_event in startup_templatec file If a client (central) enablesnotifications for a server the server (peripheral) receives an AT_BLE_CHARACTERISTIC_CHANGEDevent and this event callback is called Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

                    5 Declare and implement the following custom_notification_confirmation_handlerfunction in startup_templatec file Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param)at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )paramif (event_param-gtstatus == AT_BLE_SUCCESS)printf(n Assignment 41Notification Successfully sent over the air) else printf(n Assignment 41Sending Notification over the air failed)return AT_BLE_SUCCESS

                    6 Declare the following GATT server callback structure in startup_templatec file Thisassignment uses two GATT callbacksstatic const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handlercharacteristic_changed = custom_char_changed_app_event

                    7 Add the following register_gatt_server_callbacks function in startup_templatec toregister GATT server callback for notification confirmation event Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks)ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACKBLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle)if (ble_status = true)printf(nError when Registering ATBTLC1000 callbacks)

                    8 Add custom_environment_service_init and register_gatt_server_callbacksfunction calls prior to start advertisement in the application main routine to initialize custom serviceand to register the GATT server callbacksint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()

                    ATBTLC1000Setting up and Handling Custom Service

                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 40

                    endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks() Custom service init custom_environment_service_init ( ) Register Gatt server callbacks register_gatt_server_callbacks ( ) Start Advertising process start_advertisement()while(true)ble_event_task()

                    9 Click to save the project ltCtrl+Sgt

                    10 Compile the project by pressing button ltF7gt11 Verify that no build error appears in the Atmel Studio output window

                    Figure 5-3 Atmel Studio Output Window

                    12 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt13 Open the ldquoMicrochip SmartConnectrdquo application on Android or iOS device14 Connect and pair to the peripheral (pass key 123456)15 Custom service must now be visible after pairing with peripheral under Microchip SmartConnect

                    application

                    ATBTLC1000Setting up and Handling Custom Service

                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 41

                    Figure 5-4 Service List in Microchip SmartConnect Application

                    Note  Custom service is displayed as unknown service in the above figure as this service is not aSIG-defined service

                    Figure 5-5 General Information

                    16 Serial terminal client must display the following Log output

                    ATBTLC1000Setting up and Handling Custom Service

                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 42

                    Figure 5-6 Log Output Window

                    52 Updating the Temperature CharacteristicIn the previous assignment the custom Temperature characteristic is defined with a notify attribute Thistype of attribute requires notification to be sent to central when a new characteristic value is availableThe update of any ldquonotifyrdquo characteristic value is based on following interaction between the Host MCUand the ATBTLC1000Figure 5-7 Characteristic Notification

                    521 Setting a Characteristic Value ( at_ble_characteristic_value_set)Prototype ndashat_ble_status_t at_ble_characteristic_value_setat_ble_handle_t handleuint8_t valueuint16_t len)

                    Description ndash Sets a characteristic value in ATBTLC1000 memory

                    Parameters ndash

                    ATBTLC1000Setting up and Handling Custom Service

                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 43

                    bull handle [inout] ndash Pointer to Characteristic handle to be changedbull value [in] ndash New valuebull len [in] ndash Value length in bytes

                    Return ndash Execution Status

                    522 Sending a Notification (at_ble_notification_send)Prototype ndashat_ble_status_t at_ble_notification_send(at_ble_handle_t conn_handleat_ble_handle_t attr_handle)

                    Description ndash Sends a Notification

                    Parameters ndash

                    bull conn_handle[in] ndash handle of the connection to be notifiedbull attr_handle [in] ndash handle of the attribute originating the notification

                    Return ndash Execution Status

                    523 Sending Temperature Information Once in Every 10 Seconds to Central1 Modify the following ldquotimer_callback_fnrdquo callback function from the startup_templatec

                    filestatic void timer_callback_fn(void)timer_flag = true

                    2 hw_timer_init()in main routine of startup_templatec initializes the hardware timer3 If a client (Central) enables the notifications for a server the server (Peripheral) receives an

                    AT_BLE_CHARACTERISTIC_CHANGED event callback then start the periodic 10 second timer forsending the notification Add the following code in previously definedcustom_char_changed_app_event function Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))timer_flag = falsehw_timer_start(10)printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

                    4 Declare the following Temperature_value global variable in startup_templatec staticuint8_t Temperature_value = 25 as static

                    5 Add the following send_temperature_notification function in startup_templatec tosend temperature every 10 seconds Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++

                    ATBTLC1000Setting up and Handling Custom Service

                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 44

                    if(Temperature_value gt 75)Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set(environment_service_characs[0]char_val_handle(uint8_t )ampTemperature_valuesizeof(Temperature_value))ble_status = at_ble_notification_send(0environment_service_characs[0]char_val_handle)if(ble_status = AT_BLE_SUCCESS)printf(fail to send temperature update notification )

                    6 Add the following code in main routine to send temperature data every 10 secondswhile (1) ble_event_task()if(connected_flag == true ampamp timer_flag == truetimer_flag = falsesend_temperature_notification()

                    7 Click to save the project ltCtrl+Sgt

                    8 Compile the project by pressing the button ltF7gt9 Verify that no build error appears in Atmel Studio output window

                    Figure 5-8 Atmel Studio Output Window

                    10 Click to program the project binary on the L21 Xplained XSTK11 Open ldquoMicrochip SmartConnectrdquo Application on Android or iOS device12 Connect and pair to the peripheral (pass key 123456)13 Click NOTIFY to start the notification14 Temperature information in HEX values must be displayed in Microchip SmartConnect application

                    ATBTLC1000Setting up and Handling Custom Service

                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 45

                    Figure 5-9 Notification Window

                    15 Serial terminal must display the following log outputFigure 5-10 Log Output Window

                    ATBTLC1000Setting up and Handling Custom Service

                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 46

                    6 Appendix A Software Solution - Pre-Defined SvcThe following is the code implementation for handling of pre-defined service done in 4 SettingHandlingof Pre-Defined Service

                    - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehinclude device_infoh

                    volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false Services handlers dis_gatt_service_handler_t dis_service_handler

                    static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

                    void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                    Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                    Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                    static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                    Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void) Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks)

                    ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 47

                    ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                    timer callback function static void timer_callback_fn(void) Add timer callback functionality here

                    void button_cb(void) Add button callback functionality here

                    int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                    Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                    DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks()

                    Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service) dis_init_service(ampdis_service_handler) Define the primary service in the GATT server database if((dis_primary_service_define(ampdis_service_handler)) = AT_BLE_SUCCESS) printf(Device Information Service definition failed)

                    Start Advertising process start_advertisement() while(true) ble_event_task()

                    ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 48

                    7 Appendix B Software Solution - Custom ServiceThe following is the code implementation for handling of pre-defined service done in 5 Setting up andHandling Custom Service

                    - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templateh

                    volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false

                    static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

                    define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0

                    define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

                    Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

                    void custom_environment_service_init(void) at_ble_uuid_t environment_service_uuid uint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUID uint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128 memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperature environment_service_characs[0]user_desc_len = 10 environment_service_characs[0]user_desc_max_len = 10 environment_service_characs[0]uuidtype = AT_BLE_UUID_128 memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16) environment_service_characs[0]properties = AT_BLE_CHAR_READ | AT_BLE_CHAR_NOTIFY environment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature value environment_service_characs[0]value_permissions = (AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuid ampenvironment_service_handlerNULL0 environment_service_characs1)=AT_BLE_SUCCESS) printf(n Assignment 41 Failed to Initialize custom environment service) else printf(n Assignment 41 Initialize custom environment service)

                    Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param) at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )param if (event_param-gtstatus == AT_BLE_SUCCESS) printf(n Assignment 41Notification Successfully sent over the air)

                    ATBTLC1000Appendix B Software Solution - Custom Service

                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 49

                    else printf(n Assignment 41Sending Notification over the air failed) return AT_BLE_SUCCESS

                    static at_ble_status_t custom_char_changed_app_event(void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle -gt char_new_value[0])) timer_flag = false hw_timer_start(10) printf(n Assignment 41Characteristic changed event) return AT_BLE_SUCCESS

                    static const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handler characteristic_changed = custom_char_changed_app_event

                    Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                    void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                    Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                    Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                    static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                    Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void)

                    ATBTLC1000Appendix B Software Solution - Custom Service

                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 50

                    Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                    timer callback function static void timer_callback_fn(void) Add timer callback functionality here timer_flag = true

                    void button_cb(void) Add button callback functionality here

                    static uint8_t Temperature_value = 25

                    Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++ if(Temperature_value gt 75) Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set( environment_service_characs[0]char_val_handle (uint8_t )ampTemperature_value sizeof(Temperature_value)) ble_status = at_ble_notification_send(0 environment_service_characs[0]char_val_handle) if(ble_status = AT_BLE_SUCCESS) printf(fail to send temperature update notification )

                    int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                    Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                    DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register Gap ATBTLC1000 Callbacks register_btlc1000_callbacks()

                    Custom service init custom_environment_service_init()

                    ATBTLC1000Appendix B Software Solution - Custom Service

                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 51

                    Register Gatt server callback register_gatt_server_callbacks()

                    Start Advertising process start_advertisement() while(true) ble_event_task() if(connected_flag == true ampamp timer_flag == true) timer_flag = false send_temperature_notification()

                    ATBTLC1000Appendix B Software Solution - Custom Service

                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 52

                    8 Document Revision HistoryRev B - 42018

                    Section Changes

                    Document Revised contents to match various Bluetooth Low Energy standard versions

                    Rev A - 122017

                    Section Changes

                    Document Initial release

                    ATBTLC1000Document Revision History

                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 53

                    The Microchip Web Site

                    Microchip provides online support via our web site at httpwwwmicrochipcom This web site is used asa means to make files and information easily available to customers Accessible by using your favoriteInternet browser the web site contains the following information

                    bull Product Support ndash Data sheets and errata application notes and sample programs designresources userrsquos guides and hardware support documents latest software releases and archivedsoftware

                    bull General Technical Support ndash Frequently Asked Questions (FAQ) technical support requestsonline discussion groups Microchip consultant program member listing

                    bull Business of Microchip ndash Product selector and ordering guides latest Microchip press releaseslisting of seminars and events listings of Microchip sales offices distributors and factoryrepresentatives

                    Customer Change Notification Service

                    Microchiprsquos customer notification service helps keep customers current on Microchip productsSubscribers will receive e-mail notification whenever there are changes updates revisions or erratarelated to a specified product family or development tool of interest

                    To register access the Microchip web site at httpwwwmicrochipcom Under ldquoSupportrdquo click onldquoCustomer Change Notificationrdquo and follow the registration instructions

                    Customer Support

                    Users of Microchip products can receive assistance through several channels

                    bull Distributor or Representativebull Local Sales Officebull Field Application Engineer (FAE)bull Technical Support

                    Customers should contact their distributor representative or Field Application Engineer (FAE) for supportLocal sales offices are also available to help customers A listing of sales offices and locations is includedin the back of this document

                    Technical support is available through the web site at httpwwwmicrochipcomsupport

                    Microchip Devices Code Protection Feature

                    Note the following details of the code protection feature on Microchip devices

                    bull Microchip products meet the specification contained in their particular Microchip Data Sheetbull Microchip believes that its family of products is one of the most secure families of its kind on the

                    market today when used in the intended manner and under normal conditionsbull There are dishonest and possibly illegal methods used to breach the code protection feature All of

                    these methods to our knowledge require using the Microchip products in a manner outside theoperating specifications contained in Microchiprsquos Data Sheets Most likely the person doing so isengaged in theft of intellectual property

                    bull Microchip is willing to work with the customer who is concerned about the integrity of their code

                    ATBTLC1000

                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 54

                    bull Neither Microchip nor any other semiconductor manufacturer can guarantee the security of theircode Code protection does not mean that we are guaranteeing the product as ldquounbreakablerdquo

                    Code protection is constantly evolving We at Microchip are committed to continuously improving thecode protection features of our products Attempts to break Microchiprsquos code protection feature may be aviolation of the Digital Millennium Copyright Act If such acts allow unauthorized access to your softwareor other copyrighted work you may have a right to sue for relief under that Act

                    Legal Notice

                    Information contained in this publication regarding device applications and the like is provided only foryour convenience and may be superseded by updates It is your responsibility to ensure that yourapplication meets with your specifications MICROCHIP MAKES NO REPRESENTATIONS ORWARRANTIES OF ANY KIND WHETHER EXPRESS OR IMPLIED WRITTEN OR ORAL STATUTORYOR OTHERWISE RELATED TO THE INFORMATION INCLUDING BUT NOT LIMITED TO ITSCONDITION QUALITY PERFORMANCE MERCHANTABILITY OR FITNESS FOR PURPOSEMicrochip disclaims all liability arising from this information and its use Use of Microchip devices in lifesupport andor safety applications is entirely at the buyerrsquos risk and the buyer agrees to defendindemnify and hold harmless Microchip from any and all damages claims suits or expenses resultingfrom such use No licenses are conveyed implicitly or otherwise under any Microchip intellectualproperty rights unless otherwise stated

                    Trademarks

                    The Microchip name and logo the Microchip logo AnyRate AVR AVR logo AVR Freaks BeaconThingsBitCloud CryptoMemory CryptoRF dsPIC FlashFlex flexPWR Heldo JukeBlox KeeLoq KeeLoq logoKleer LANCheck LINK MD maXStylus maXTouch MediaLB megaAVR MOST MOST logo MPLABOptoLyzer PIC picoPower PICSTART PIC32 logo Prochip Designer QTouch RightTouch SAM-BASpyNIC SST SST Logo SuperFlash tinyAVR UNIO and XMEGA are registered trademarks ofMicrochip Technology Incorporated in the USA and other countries

                    ClockWorks The Embedded Control Solutions Company EtherSynch Hyper Speed Control HyperLightLoad IntelliMOS mTouch Precision Edge and Quiet-Wire are registered trademarks of MicrochipTechnology Incorporated in the USA

                    Adjacent Key Suppression AKS Analog-for-the-Digital Age Any Capacitor AnyIn AnyOut BodyComchipKIT chipKIT logo CodeGuard CryptoAuthentication CryptoCompanion CryptoControllerdsPICDEM dsPICDEMnet Dynamic Average Matching DAM ECAN EtherGREEN In-Circuit SerialProgramming ICSP Inter-Chip Connectivity JitterBlocker KleerNet KleerNet logo Mindi MiWimotorBench MPASM MPF MPLAB Certified logo MPLIB MPLINK MultiTRAK NetDetach OmniscientCode Generation PICDEM PICDEMnet PICkit PICtail PureSilicon QMatrix RightTouch logo REALICE Ripple Blocker SAM-ICE Serial Quad IO SMART-IS SQI SuperSwitcher SuperSwitcher II TotalEndurance TSHARC USBCheck VariSense ViewSpan WiperLock Wireless DNA and ZENA aretrademarks of Microchip Technology Incorporated in the USA and other countries

                    SQTP is a service mark of Microchip Technology Incorporated in the USA

                    Silicon Storage Technology is a registered trademark of Microchip Technology Inc in other countries

                    GestIC is a registered trademark of Microchip Technology Germany II GmbH amp Co KG a subsidiary ofMicrochip Technology Inc in other countries

                    All other trademarks mentioned herein are property of their respective companies

                    ATBTLC1000

                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 55

                    copy 2018 Microchip Technology Incorporated Printed in the USA All Rights Reserved

                    ISBN 978-1-5224-2921-0

                    Quality Management System Certified by DNV

                    ISOTS 16949Microchip received ISOTS-169492009 certification for its worldwide headquarters design and waferfabrication facilities in Chandler and Tempe Arizona Gresham Oregon and design centers in Californiaand India The Companyrsquos quality system processes and procedures are for its PICreg MCUs and dsPICreg

                    DSCs KEELOQreg code hopping devices Serial EEPROMs microperipherals nonvolatile memory andanalog products In addition Microchiprsquos quality system for the design and manufacture of developmentsystems is ISO 90012000 certified

                    ATBTLC1000

                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 56

                    AMERICAS ASIAPACIFIC ASIAPACIFIC EUROPECorporate Office2355 West Chandler BlvdChandler AZ 85224-6199Tel 480-792-7200Fax 480-792-7277Technical SupporthttpwwwmicrochipcomsupportWeb AddresswwwmicrochipcomAtlantaDuluth GATel 678-957-9614Fax 678-957-1455Austin TXTel 512-257-3370BostonWestborough MATel 774-760-0087Fax 774-760-0088ChicagoItasca ILTel 630-285-0071Fax 630-285-0075DallasAddison TXTel 972-818-7423Fax 972-818-2924DetroitNovi MITel 248-848-4000Houston TXTel 281-894-5983IndianapolisNoblesville INTel 317-773-8323Fax 317-773-5453Tel 317-536-2380Los AngelesMission Viejo CATel 949-462-9523Fax 949-462-9608Tel 951-273-7800Raleigh NCTel 919-844-7510New York NYTel 631-435-6000San Jose CATel 408-735-9110Tel 408-436-4270Canada - TorontoTel 905-695-1980Fax 905-695-2078

                    Australia - SydneyTel 61-2-9868-6733China - BeijingTel 86-10-8569-7000China - ChengduTel 86-28-8665-5511China - ChongqingTel 86-23-8980-9588China - DongguanTel 86-769-8702-9880China - GuangzhouTel 86-20-8755-8029China - HangzhouTel 86-571-8792-8115China - Hong Kong SARTel 852-2943-5100China - NanjingTel 86-25-8473-2460China - QingdaoTel 86-532-8502-7355China - ShanghaiTel 86-21-3326-8000China - ShenyangTel 86-24-2334-2829China - ShenzhenTel 86-755-8864-2200China - SuzhouTel 86-186-6233-1526China - WuhanTel 86-27-5980-5300China - XianTel 86-29-8833-7252China - XiamenTel 86-592-2388138China - ZhuhaiTel 86-756-3210040

                    India - BangaloreTel 91-80-3090-4444India - New DelhiTel 91-11-4160-8631India - PuneTel 91-20-4121-0141Japan - OsakaTel 81-6-6152-7160Japan - TokyoTel 81-3-6880- 3770Korea - DaeguTel 82-53-744-4301Korea - SeoulTel 82-2-554-7200Malaysia - Kuala LumpurTel 60-3-7651-7906Malaysia - PenangTel 60-4-227-8870Philippines - ManilaTel 63-2-634-9065SingaporeTel 65-6334-8870Taiwan - Hsin ChuTel 886-3-577-8366Taiwan - KaohsiungTel 886-7-213-7830Taiwan - TaipeiTel 886-2-2508-8600Thailand - BangkokTel 66-2-694-1351Vietnam - Ho Chi MinhTel 84-28-5448-2100

                    Austria - WelsTel 43-7242-2244-39Fax 43-7242-2244-393Denmark - CopenhagenTel 45-4450-2828Fax 45-4485-2829Finland - EspooTel 358-9-4520-820France - ParisTel 33-1-69-53-63-20Fax 33-1-69-30-90-79Germany - GarchingTel 49-8931-9700Germany - HaanTel 49-2129-3766400Germany - HeilbronnTel 49-7131-67-3636Germany - KarlsruheTel 49-721-625370Germany - MunichTel 49-89-627-144-0Fax 49-89-627-144-44Germany - RosenheimTel 49-8031-354-560Israel - RarsquoananaTel 972-9-744-7705Italy - MilanTel 39-0331-742611Fax 39-0331-466781Italy - PadovaTel 39-049-7625286Netherlands - DrunenTel 31-416-690399Fax 31-416-690340Norway - TrondheimTel 47-7289-7561Poland - WarsawTel 48-22-3325737Romania - BucharestTel 40-21-407-87-50Spain - MadridTel 34-91-708-08-90Fax 34-91-708-08-91Sweden - GothenbergTel 46-31-704-60-40Sweden - StockholmTel 46-8-5090-4654UK - WokinghamTel 44-118-921-5800Fax 44-118-921-5820

                    Worldwide Sales and Service

                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 57

                    • Introduction
                    • Table of Contents
                    • 1 Getting Started
                      • 11 Software Prerequisites
                        • 111 Installation Steps of Atmel Studio 7
                          • 12 Software Setup
                            • 121 Installation of Microchip SmartConnect application on a Mobile device
                              • 13 ATBTLC1000 Embedded Firmware
                              • 14 ATBTLC1000 Host Software API
                              • 15 Hardware Prerequisites
                                • 151 SMARTtrade SAM L21 Xplained Pro
                                • 152 ATBTLC1000ZR Xplained Pro Extension board
                                  • 16 Hardware Setup
                                    • 2 Creating the Project and Initializing
                                      • 21 Creating Project from ASF
                                      • 22 Configuring ASF for ATBTLC1000-ZR
                                      • 23 Compiling and Testing the Project
                                        • 3 Establishing Connection with Central Device
                                          • 31 Configuring and Starting the Advertisement Process
                                            • 311 Flags (AD Type 0x00)
                                            • 312 Available Service UUID (AD Types 0x02 to 0x07)
                                            • 313 Device Name (AD Types 0x08 to 0x09)
                                              • 3131 Setting the Advertisement Payload (ble_advertisement_data_set)
                                              • 3132 Starting the Advertisement Process (at_ble_adv_start)
                                                • 314 Advertisement Process
                                                  • 3141 Starting the Advertisement Process
                                                      • 32 Managing GAP events
                                                        • 321 Handling of Connected and Disconnected GAP Events
                                                            • 4 SettingHandling of Pre-Defined Service
                                                              • 41 Adding Device Info Service Component from ASF Wizard to Project
                                                              • 42 Configuring and Loading Device Information Service
                                                                • 421 Procedure to Configure and Load Device Info Service
                                                                    • 5 Setting up and Handling Custom Service
                                                                      • 51 Configuring and Loading the Custom Environment Service
                                                                        • 511 Procedure to Configure and Load Custom Environment Service
                                                                          • 52 Updating the Temperature Characteristic
                                                                            • 521 Setting a Characteristic Value ( at_ble_characteristic_value_set)
                                                                            • 522 Sending a Notification (at_ble_notification_send)
                                                                            • 523 Sending Temperature Information Once in Every 10 Seconds to Central
                                                                                • 6 Appendix A Software Solution - Pre-Defined Svc
                                                                                • 7 Appendix B Software Solution - Custom Service
                                                                                • 8 Document Revision History
                                                                                • The Microchip Web Site
                                                                                • Customer Change Notification Service
                                                                                • Customer Support
                                                                                • Microchip Devices Code Protection Feature
                                                                                • Legal Notice
                                                                                • Trademarks
                                                                                • Quality Management System Certified by DNV
                                                                                • Worldwide Sales and Service

                      4 Now the Hardware is ready for development

                      ATBTLC1000Getting Started

                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 11

                      2 Creating the Project and InitializingThis chapter provides the process of creating an application startup project using Atmel Studio Prior tocreating a project the user must know hardware architecture and software requirements to configuredrivers

                      The hardware connection between the SAM L21 XPRO and the ATBTLC1000ZR XPRO board isillustrated in following figure This SAM L21 board is used as host MCUFigure 2-1 ATBTLC1000ZR Xpro Board Connection with SAM L21

                      Note  For more details refer to module datasheet and XPRO board design documentation

                      21 Creating Project from ASFAdvanced Software Framework has a pre-configured Bluetooth Low Energy Startup template project thatincludes Bluetooth Low Energy software API for Host and ATBTLC1000 and their peripheral driverdependencies This is used as starting project for any Bluetooth Low Energy project development

                      To create the project follow the steps below

                      1 Search for the ldquoBLE-Startup Templaterdquo from the File gt New gt Example Project menu in AtmelStudio

                      ATBTLC1000Creating the Project and Initializing

                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 12

                      Figure 2-2 Advanced Software Framework_New Example Project

                      Note  ATBTLC1000SAMB11 related projects are prefixed with ldquoBLErdquo making it easier to filter theproject in the dialogue box

                      2 Select the appropriate ldquoBLE-Startup Templaterdquo project corresponding to the intended Host MCUXplained Pro board and then press OK button to import the BLE startup template project SelectldquoBLE-Startup Template ndash SAM L21 Xplained Pro SAML21J18Brdquo for this hands-onNote  Rev B XPRO boards can be identified by SAML21J18B silk screen marking below SAML21MCU

                      3 The BLE startup project is now created and loaded in Atmel StudioFigure 2-3 Startup_Template Project

                      ATBTLC1000Creating the Project and Initializing

                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 13

                      Note  The main project routine of ldquoStartup Template projectrdquo already includes host MCU low levelinitialization BLE and ATBTLC1000 initialization The added ASF components in project can beviewed from ldquoASFgtASF Wizardrdquo Select the created project from Project drop down box

                      Figure 2-4 ASF Wizard Window

                      ndash BLE_STACK Platform Interface ndash Core manager of Bluetooth Low Energy Host API Itmanages ATBTLC1000 device initialization GAP and GATT events

                      ndash Timer Driver ndash Task timer functionality by using a Timer Counter (TC) or Timer Counter forControl (TCC) peripheral

                      ndash Console UART ndash Universal Asynchronous ReceiverTransmitter (UART) communication insynchronousblocking mode

                      ndash Generic Board Support ndash Host MCU Board specific initializationndash System Drivers ndash Select MCUrsquos System peripheral drivers These drivers are included by

                      default in ASF projects and manage the clocks and oscillator of the system4 The main routine contains the MCU low level initialization and ATBTLC1000 initialization The

                      following figure illustrates the flowchart of the main routine

                      ATBTLC1000Creating the Project and Initializing

                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 14

                      Figure 2-5 Main Routine Flowchart

                      22 Configuring ASF for ATBTLC1000-ZR1 The default ldquoStartup Template Projectrdquo is configured for ATBTLC1000-MR module with 6-Wire

                      mode2 Navigate to Project properties Project gt Project properties gt Toolchain gt ARMGNU C Compiler gt

                      Symbols3 The ATBTLC1000ZR-XSTK kit uses the ATBTLC1000-ZR110CA module Change symbol

                      BLE_MODULE to BTLC1000_ZR and enable UART_FLOWCONTROL_4WIRE_MODE forATBTLC1000-ZR module as shown in the figure belowFigure 2-6 Startup Template Project Window

                      Note  This configuration change is not required for ATBTLC1000-MR module

                      ATBTLC1000Creating the Project and Initializing

                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 15

                      23 Compiling and Testing the Project

                      1 Click the ldquo rdquo button ltF7gt to compile the project2 Verify that no build error appears in Atmel Studio output window

                      Figure 2-7 Atmel Studio Output Window

                      3 Connect the SAM L21 XPRO to PC (if not already done)4 To access the project properties go to Project gt

                      STARTUP_TEMPLATE_SAML21_XPLAINED_PRO_B1 PropertiesFigure 2-8 Compiling the Project

                      5 In project properties click the Tool tab and select the EDBG of SAM L21 Xplained Pro board asdebuggerprogrammerFigure 2-9 Selection of DebuggerProgrammer

                      6 Open any Terminal application (for example TeraTerm) Select the COM port enumerated on thePC and set the following parameters

                      ndash EDBG associated COM Port (Check Windows Device Manager)

                      ATBTLC1000Creating the Project and Initializing

                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 16

                      ndash Baudrate 115200ndash Parity Nonendash One Stop bitndash Enable Hardware Flow Control

                      7 Click to save the project ltCtrl+Sgt

                      8 Click rdquo to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt9 The initialization of the ATBTLC1000ZR module must return the Bluetooth Device Address and

                      Address typeFigure 2-10 Console Log Window

                      Note 1 If initialization fails make sure to verify the hardware configuration is aligned with the

                      description refer to 16 Hardware Setup2 The initialization of ATBTLC1000 takes few seconds due to patch download process

                      ATBTLC1000Creating the Project and Initializing

                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 17

                      3 Establishing Connection with Central DeviceThe Bluetooth Low Energy connectivity is added to the application that is used to connect with theBluetooth Low Energy central The first step is about the management of Bluetooth connection with acentral device When using ATBTLC1000 device this process is managed by dedicated API function callsassociated with ATBTLC1000 events handling

                      The interaction between Host MCU ATBTLC1000 and Bluetooth Low Energy central during connectionestablishment is as follows

                      Figure 3-1 Establishing Connection with Central Device

                      On host MCU side the management of the Bluetooth connection is performed through three main steps1 GAP callback registration2 Advertisement configuration3 ATBTLC1000 event handling

                      In the existing project main routine the integration of these steps are highlighted in red in the followingflowchart

                      ATBTLC1000Establishing Connection with Central Device

                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 18

                      Figure 3-2 Main Routine Flow Chart

                      31 Configuring and Starting the Advertisement ProcessThe Bluetooth Low Energy devices transmit advertisement packets to show their presence to nearbydevices The advertisement packet is sent periodically at a time interval defined by variableldquoadvintervalrdquo defined in Bluetooth SIG specification To avoid any collision with other wireless networksuch as Wi-Fireg a channel change is performed for each advertisement packet sent (data frequencyhopping) as illustrated in the following figureFigure 3-3 Advertisement Process

                      During advertisement the payload structure to be sent differs from application to application and is set byusing encapsulated packet data unit type information (PDU_TYPE)

                      ATBTLC1000Establishing Connection with Central Device

                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 19

                      Figure 3-4 PDU Advertising

                      The following table lists the different PDU types used according to device role

                      Advertising event types (PDU_TYPE) Broadcaster Observer Peripheral Central

                      Connectible undirected event (ADV_IND) Excluded Excluded Mandatory Excluded

                      Connectible directed event(ADV_DIRECT_IND) Excluded Excluded Optional Excluded

                      Non-connectible undirected event(ADV_NONCONN_IND) Mandatory Excluded Optional Excluded

                      Scannable undirected event (ADV_SCAN_IND) Optional Excluded Optional Excluded

                      As our device acts as a Bluetooth Low Energy peripheral the connectable undirected event (ADV_IND)advertising type is used See the following description about the ADV_IND advertisement packetFigure 3-5 ADV_IND Advertisement Packet

                      The ADV_IND payload contains different Advertisement Data types (AD0 - ADn) which provide specificinformation to the central device such as device short name Tx power level and list of availableservices UUIDs The number of advertisement data types that can be added to the advertisementpayload are limited by the advertisement payload size of 31 octets

                      Following is a list of advertisement data types that are commonly found in ADV_IND payload

                      ATBTLC1000Establishing Connection with Central Device

                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 20

                      311 Flags (AD Type 0x00)The flags describe the basic device capability such as BLE support BLE discoverable mode BREDRsupport and simultaneous BRED

                      312 Available Service UUID (AD Types 0x02 to 0x07)The Bluetooth Low Energy advertisement payloads are limited to 31 bytes Therefore only two 128-bitUUID values can be added to the payload For this purpose the specific AD types describe the length ofthe advertised UUID and provide information as to whether the payload contains a incompletecompletelist of UUID supported by the GATT server

                      bull 0x02 - Incomplete list of 16-bit UUIDs (adopted GATT services)bull 0x03 - Complete list of 16-bit UUIDs (adopted GATT services)bull 0x06 - Incomplete list of 128-bit UUIDs (custom GATT services)bull 0x07 - Complete list of 128-bit UUIDs (custom GATT services)

                      Note  When a 16-bit UUID is transmitted only the unique 2-byte value is sent The client knows that it isrequired to be injected into the base UUID For example the Health Thermometer Service is assigned as0x1809 so its equivalent UUID is 00001809-0000-1000-8000-00805F9B34FB

                      313 Device Name (AD Types 0x08 to 0x09)This AD type field is used to advertise the Local name of device in the network The Local name datatype value indicates if the name is complete or shortened If the name is shortened the complete namecan be read after the connection is established

                      bull 0x08 - Shortened Local Namebull 0x09 - Complete Local Name

                      Note 1 A shortened name contains only continuous characters from the beginning of the full name For

                      example if the device name is BT_Device_Name then the shortened name can beBT_Device or BT_Dev

                      2 Complete data type list are available at httpswwwbluetoothcomspecificationsassigned-numbersgeneric-access-profile

                      For management of advertisement process and cover the different configurations specified by SIG theATBTLC1000 Host driver provides the two functions elaborated in the following sections

                      In the application use these two functions to setup the following ADV_IN type payloadFigure 3-6 ADV_IN Type Payload Process

                      ATBTLC1000Establishing Connection with Central Device

                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 21

                      3131 Setting the Advertisement Payload (ble_advertisement_data_set)Prototype ndashat_ble_status_t at_ble_adv_data_set (uint8_t const const adv_datauint8_t adv_data_lenuint8_t const const scan_resp_datauint8_t scan_response_data_len)

                      Description ndash Set clear or update the advertisement and scan response data

                      Parameters ndash

                      bull adv_data ndash Raw data to be placed in advertisement packetbull adv_data_len ndash Data length for adv_data Max size 28 bytes (3 bytes are reserved to set

                      advertising AD type flags based on the selected Advertising mode and the user is not required toconfigure AD type flags in the advertisement payload)

                      bull scan_resp_data ndash Raw data to be placed in the scan response packet If NULL no changes aremade to the current scan response packet data

                      bull scan_response_data_len ndash Data length for scan_resp_data Max size 31 bytes

                      Return ndash Execution Status

                      This function requires a parameter raw adv_data to be sent to central Following is an example of itsdefinition

                      static uint8_t adv_data[] = 0x11 AD1 length = 170x03 AD1 Type = Complete list of 128-bit UUIDs0x1b0xc50xd50xa50x020x000xa60x87 AD1 = UUID MSBs0xe50x110x360x390xc00xba0x5a0xf00x0A AD2 Length = 100x09 AD2 Type = Complete local NamelsquoMrsquorsquoyrsquorsquo_rsquorsquoDrsquorsquoErsquorsquoVrsquo AD2 = ldquoMy_DEVrdquo

                      3132 Starting the Advertisement Process (at_ble_adv_start)Prototype ndashat_ble_status_t at_ble_adv_start (at_ble_adv_type_t typeat_ble_adv_mode_t modeat_ble_addr_t peer_addrat_ble_filter_type_t filtereduint16_t intervaluint16_t timeoutbool disable_randomness)

                      Description ndash Start advertisement process

                      Parameters ndash

                      bull type ndash Advertising type to be used can bendash AT_BLE_ADV_TYPE_UNDIRECTEDndash AT_BLE_ADV_TYPE_DIRECTEDndash AT_BLE_ADV_TYPE_SCANNABLE_UNDIRECTEDndash AT_BLE_ADV_TYPE_NONCONN_UNDIRECTEDndash AT_BLE_ADV_TYPE_DIRECTED_LDCndash AT_BLE_ADV_TYPE_SCAN_RESPONSE

                      bull mode ndash Advertising mode to be used can be

                      ATBTLC1000Establishing Connection with Central Device

                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 22

                      ndash AT_BLE_ADV_NON_DISCOVERABLEndash AT_BLE_ADV_GEN_DISCOVERABLEndash AT_BLE_ADV_LIM_DISCOVERABLEndash AT_BLE_ADV_BROADCASTER_MODE

                      bull peer_addr ndash Specify peer address when advertising type is AT_BLE_ADV_TYPE_DIRECTEDbull filtered ndash

                      ndash AT_BLE_ADV_FP_ANY ndash Allow scan and connection requests from anyonendash AT_BLE_ADV_FP_FILTER_SCANREQ ndash Allow scan request from White List devices onlyndash AT_BLE_ADV_FP_FILTER_CONNREQ ndash Allow connection request from White List devices

                      onlyndash AT_BLE_ADV_FP_FILTER_BOTH ndash Allow scan and connection requests from White List

                      devices onlybull interval ndash Advertisement interval (in 0625 ms units)bull timeout ndash Advertising timeout between 0x0001 and 0x028F in scale of seconds This parameter

                      must be set to 0 if type equals AT_BLE_ADV_TYPE_DIRECTEDbull disable_randomness ndash When disabled advertisements are performed at the exact interval

                      without adding random 10 ms tempo

                      Return ndash Execution Status

                      314 Advertisement ProcessIn this assignment the advertisement process is performed in the following configuration

                      bull Undirected (Type AT_BLE_ADV_TYPE_UNDIRECTED)bull Discoverable (Mode AT_BLE_ADV_GEN_DISCOVERABLE)bull No peer Address (peer_addr = NULL)bull No filtering (filtered = AT_BLE_ADV_FP_ANY)bull Advertisement interval 1s (interval = 1600)bull Maximum timeout (timeout 655)bull Randomness enabled (disable_randomness = FALSE)

                      3141 Starting the Advertisement Process1 Open startup_templatec file2 Declare the following ble_status global variable in startup_templatec as volatile

                      include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehvolatile at_ble_status_t ble_status

                      3 Declare the following adv_data global variable in startup_templatec as staticstatic uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD)0x09 AD2 Type = Complete local Name

                      ATBTLC1000Establishing Connection with Central Device

                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 23

                      My_SENS AD2 = ldquoMy_SENSrdquo

                      Note 1 The name of the device is to be changed (AD2 field)2 According to the new name AD2 length must be adapted to new AD2 content

                      4 Add the following start_advertisement function in startup_templatec prototype for thefunction void start_advertisement (void) also this can be added to avoid warningsvoid start_advertisement (void)printf(n Assignment 21 Start Advertisement)Set advertisement datable_status = at_ble_adv_data_set(adv_datasizeof(adv_data)NULL0)Start Advertisementble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550)if(ble_status = AT_BLE_SUCCESS)printf(n Failed to start advertisement)

                      5 Start the advertisement process by adding the following highlighted code to the application mainroutineint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Start Advertising process start_advertisement() Register PrimaryIncluded service in case of GATT Server while(true) Write application task

                      6 Click to save the project ltCtrl+Sgt

                      7 Click button to compile the project ltF7gt8 Verify that no build error appears in Atmel Studio output window

                      Figure 3-7 Atmel Studio Output Window

                      ATBTLC1000Establishing Connection with Central Device

                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 24

                      9 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt10 Open Microchip SmartConnect Application on Android or iOS device and tap START SCAN button

                      Note  The device must appear in Microchip SmartConnect Application

                      Figure 3-8 Microchip SmartConnect Application

                      11 Terminal must display the following Log outputFigure 3-9 Log Output Window

                      32 Managing GAP eventsThe management of the Bluetooth connection at the host MCU level is done through reception andhandling of events reported by the ATBTLC1000 These events are generated by ATBTLC1000 GAPGATT and L2CAP layers to notify the host about the ongoing Bluetooth interaction with other devices inits vicinity

                      ATBTLC1000Establishing Connection with Central Device

                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 25

                      To manage events coming from the ATBTLC1000 module the host driver must provide able_mgr_events_callback_handler function that allows registration of application callback functionto be executed on each event reported by the ATBTLC1000 module

                      Prototype ndashbool ble_mgr_events_callback_handler(ble_mgr_event_cb_t event_cb_typeble_mgr_event_t event_typeconst voidble_event_handler)

                      Description ndash Used by ProfileServiceApplication to register the Bluetooth Low Energy eventsrsquocallbacks

                      Parameters ndash

                      event_cb_type ndash types of actions to perform on callbacks can be either

                      REGISTER_CALL_BACK or

                      UNREGISTER_CALL_BACKevent_type ndash Any one of the event types can be used

                      BLE_GAP_EVENT_TYPEBLE_GATT_CLIENT_EVENT_TYPEBLE_GATT_SERVER_EVENT_TYPEBLE_L2CAP_EVENT_TYPEBLE_GATT_HTPT_EVENT_TYPEBLE_DTM_EVENT_TYPEBLE_CUSTOM_EVENT_TYPEble_event_handler ndash pointer to handler list

                      Structure ble_gap_event_cb_t defines the GAP callbacks Similarly structuresble_gatt_client_event_cb_t and ble_gatt_server_event_cb_t define the callbacks of GATTevents

                      typedef struct ble_gap_event_cb BLE Undefined events received from ATBTLC1000 which is not handled in Libraryble_event_callback_t undefined BLE scan information contains the peer device scan information Refer ref at_ble_scan_info_tble_event_callback_t scan_info Once the BLE scan timeout or scan stop triggers the scan report event Refer ref at_ble_scan_report_tble_event_callback_t scan_report Advertisement complete event Refer ref at_ble_adv_cmp_evt_tble_event_callback_t advt_cmp Advertisement report in case of advertisement stopped due to advertisement timeout Refer ref at_ble_adv_report_tble_event_callback_t adv_report BLE device own random address changed event Refer ref at_ble_rand_addr_changed_tble_event_callback_t rand_addr_changed BLE connected event device connected to peer device Refer ref at_ble_connected_tble_event_callback_t connected BLE disconnected event device disconnected from peer device Refer ref at_ble_disconnected_tble_event_callback_t disconnected Connection parameter update done on peer device and own device Refer ref at_ble_conn_param_update_done_t

                      ATBTLC1000Establishing Connection with Central Device

                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 26

                      ble_event_callback_t conn_parameter_update_done Connection parameter update request from peer device Refer ref at_ble_conn_param_update_request_tble_event_callback_t conn_param_update_request Pair complete event as part of end of pairing process Refer ref at_ble_pair_done_tble_event_callback_t pair_done Pair request event from Central device Refer ref at_ble_pair_request_tble_event_callback_t pair_request Slave security request received from peer Peripheral device Refer ref at_ble_slave_sec_request_tble_event_callback_t slave_sec_request Pair Key request event from Peer central device Refer ref at_ble_pair_key_request_tble_event_callback_t pair_key_request encryption request comes from the peer device Needs to supply the bonding information which is stored earlier ref at_ble_encryption_request_tble_event_callback_t encryption_request encryption status changed event received from SMP once the encryption is started ref at_ble_encryption_status_changed_tble_event_callback_t encryption_status_changed Event triggered once the Resolve random address is resolved using supplied IRKs ref at_ble_resolv_rand_addr_status_tble_event_callback_t resolv_rand_addr_status Event is triggered once the connection signature information indication received ref at_ble_sign_counter_tble_event_callback_t sign_counters_ind Peer attribute information indication received Event ref at_ble_peer_att_info_ind_tble_event_callback_t peer_att_info_ind Peer device channel map received indication ref at_ble_channel_map_tble_event_callback_t con_channel_map_indble_gap_event_cb_t

                      Note  Callback definition is application-specific If the application layer requires a specific event callbackthen the specific member of the structure is to be assigned with the address of the callback function

                      In this assignment two callback functions on Connected and Disconnected GAP events are usedThis allows the application to restart the advertising process on Disconnect manage connectioninformation and startstop of sensor data update

                      321 Handling of Connected and Disconnected GAP Events1 Open the startup_templatec file2 Define the following software flags as global variables in startup_templatec file volatile

                      bool timer_flag = false and volatile bool connected_flag = false3 Declare and implement the following ble_connected_cb function in the

                      startup_templatec file Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param)printf(n Assignment 22 Application connected )connected_flag = trueALL_UNUSED(param)return AT_BLE_SUCCESS

                      4 Declare and implement the following ble_disconnected_cb function instartup_templatec file Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param)printf(n Assignment 22 Application disconnected )connected_flag = falsestart_advertisement()ALL_UNUSED(param)return AT_BLE_SUCCESS

                      ATBTLC1000Establishing Connection with Central Device

                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 27

                      5 Declare the following static GAP callback structure in ldquostartup_templatecrdquo filestatic const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTEDdisconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                      6 Add the following register_btlc1000_callbacks function in startup_templatec Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void) Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks)ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACKBLE_GAP_EVENT_TYPEampapp_gap_handle)if (ble_status = true)printf(nError when Registering ATBTLC1000 callbacks)

                      7 Add the register_btlc1000_callbacks function call prior to start advertisement in theapplication main routineint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Gap Callbacks register_btlc1000_callbacks ( ) Start Advertising process start_advertisement() Register PrimaryIncluded service in case of GATT Server while(true) Write application task

                      8 Add the ble_event_task function call in the project main loop to handle the different incomingevents from ATBTLC1000while(true)ble_event_task()

                      9 Press button ltF7gt to compile the project and verify that no build error appear in the AtmelStudio output window

                      ATBTLC1000Establishing Connection with Central Device

                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 28

                      Figure 3-10 Atmel Studio Output Window

                      10 Click ldquo rdquo to save the project ltCtrl+Sgt

                      11 Click ldquo rdquo to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt and checkcorrect initialization of the ATBTLC1000

                      12 Open the Microchip SmartConnect application on Androidtrade or iOS device13 Press the ltStart Scangt button and pair peripherals by selecting them in the device list (pass key

                      123456)Note 

                      1 Pairing event handling is carried out by ble_managerc Refer toble_pair_key_request_handler() for code implementation The default pass key of123456 is also fixed inside this function This can be changed here

                      Figure 3-11 Console Log Window

                      Note  After peripheral pairing no services information are displayed in Microchip SmartConnectapplication as no service is currently defined and started on peripheral side

                      ATBTLC1000Establishing Connection with Central Device

                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 29

                      4 SettingHandling of Pre-Defined ServiceThe management of services are done in the GATT layer of the ATBTLC1000 ROM coded Bluetooth LowEnergy Stack The GATT transactions are based on high-level nested objects called Profiles Servicesand Characteristics stored in SRAM memory of ATBTLC1000 device This assignment adds the pre-defined service of information service from ASF library

                      Figure 4-1 ATBTLC1000 GATT Layers

                      bull ProfilesProfiles are not available in the Bluetooth Low Energy peripheral they are simply a pre-definedcollection of services that have been compiled by either the Bluetooth SIG (adopted GATT basedprofile) or by the application developer (custom profiles) For example the Heart Rate Profilecombines the Heart Rate Service and the Device Information Service

                      Note  The complete list of officially adopted GATT-based profiles is available on the BluetoothDeveloper Portal

                      bull ServicesA service is a collection of data and associated behaviors which accomplish a particular function orfeature of a device or portions of a device A service may reference other primary or secondaryservices andor a set of characteristics that make up the service Each service distinguishes itselffrom other services by means of a unique numeric ID called as UUID which can be either 16-bit(for officially adopted Bluetooth Low Energy Services) or 128-bit (for custom services)

                      Note  A full list of officially adopted services and their UUID are seen on the Bluetooth DeveloperPortal

                      bull CharacteristicsA characteristic is the lowest level concept in GATT transactions It contains a single data point withdifferent attributes such as notify read or write capabilities Similar to Services each characteristiccan be distinguished by a SIG-defined adopted UUID (16-bit) or custom (128-bit) UUID This UUIDensures interoperability across Bluetooth Low Energy devices The characteristics are important tointeract with in a Bluetooth Low Energy network In addition to standard UUID the custom UUID isused in case of specific application When characteristics with custom UUID are used in a devicethen it will be interoperable only with those devices that support these characteristics with customUUID

                      ATBTLC1000SettingHandling of Pre-Defined Service

                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 30

                      In this assignment the following steps are added to the Host MCU application to set up and handle adevice information service within the ATBTLC1000 module The following steps are added to the startupproject

                      bull Adding device info service component from ASFbull Configuring and loading the service

                      Figure 4-2 Device Information Service

                      41 Adding Device Info Service Component from ASF Wizard to ProjectTo use the ldquoofficially adopted GATT-based profilesrdquo from SIG ASF provides Bluetooth Low Energy servicecomponents including init functions that pre-define services in Host memory

                      Note  Before starting this assignment be sure to follow the steps mentioned in 2 Creating the Projectand Initializing and 3 Establishing Connection with Central Device

                      1 Click ASF gt ASF Wizard2 Search for ldquoBLE-Device Information Servicesrdquo and then click Add

                      ATBTLC1000SettingHandling of Pre-Defined Service

                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 31

                      Figure 4-3 Available Modules

                      3 Now ldquoBLE-Device Information Servicesrdquo (component) appears in ldquoSelected ModulesrdquoFigure 4-4 Selected Modules

                      4 Click Apply to add the component to the projectFigure 4-5 Adding the Modules to Project

                      5 The ldquoDevice Information Servicerdquo component is added to the project and is confirmed bydevice_information folder added in Solution Explorer

                      ATBTLC1000SettingHandling of Pre-Defined Service

                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 32

                      Figure 4-6 Device Information Service Added to Project

                      42 Configuring and Loading Device Information ServiceThe ATBTLC1000 Host driver provides a set of GATT functions that allows storing and updating theservices in ATBTLC1000 memories

                      Prototype at_ble_status_t at_ble_primary_service_define(at_ble_uuid_t uuidat_ble_handle_t service_handleat_ble_included_service_t included_service_listuint16_t included_service_countat_ble_characteristic_t charactristic_listuint16_t charactristic_count)

                      Description Defines a new primary service along with its included services and characteristics inATBTLC1000

                      Parameters

                      bull Uuid [In] ndash primary service UUIDbull service_handle [Out] ndash Service handle is returned herebull included_service_list [In] ndash an array of included service referencesbull included_service_count [In] ndash number of elements in included_service_listbull charactristic_list [InOut] ndash an array of characteristics included in the service this array

                      is updated with respective characteristics handlesbull charactristic_count[In] ndash number of elements in charactristic_list

                      Return Execution Status

                      This function requires an argument as GATT description structure of the service that is implemented Thepreviously added Device Info service component provides Bluetooth Low Energy service middlewareincluding the init functions that predefine the services See below ldquodis_init_servicerdquo from device infoBLE service (device_infohc)

                      Prototype ndash void dis_init_service(dis_gatt_service_handler_t device_info_serv)Description ndash Initialize the device information service handler in the host MCU memory

                      Parameters ndash

                      ATBTLC1000SettingHandling of Pre-Defined Service

                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 33

                      bull device_info_serv [Inout] pointer to device info GATT description handler to beupdated

                      Return None

                      Here is a picture of GATT device info service descriptor definition in Host memory

                      device_info_serv-gtserv_handle = 0device_info_serv-gtserv_uuidtype = AT_BLE_UUID_16device_info_serv-gtserv_uuiduuid[0] = (uint8_t) DIS_SERVICE_UUIDdevice_info_serv-gtserv_uuiduuid[1] = (uint8_t) (DIS_SERVICE_UUID gtgt 8)Characteristic Info for Manufacturer Name Stringdevice_info_serv-gtserv_chars[0]char_val_handle = 0 handle stored here device_info_serv-gtserv_chars[0]uuidtype = AT_BLE_UUID_16device_info_serv-gtserv_chars[0]uuiduuid[0] = (uint8_t) IS_CHAR_MANUFACTURER_NAME_UUID UUID Manufacturer Name String device_info_serv-gtserv_chars[0]uuiduuid[1] = (uint8_t) (DIS_CHAR_MANUFACTURER_NAME_UUID gtgt 8) UUID Manufacturer Name String device_info_serv-gtserv_chars[0]properties = AT_BLE_CHAR_READ Properties memcpy(char_valuemanufacturer_nameDEFAULT_MANUFACTURER_NAMEDIS_CHAR_MANUFACTURER_NAME_INIT_LEN)device_info_serv-gtserv_chars[0]init_value = char_valuemanufacturer_namedevice_info_serv-gtserv_chars[0]value_init_len = DIS_CHAR_MANUFACTURER_NAME_INIT_LENdevice_info_serv-gtserv_chars[0]value_max_len = DIS_CHAR_MANUFACTURER_NAME_MAX_LENif BLE_PAIR_ENABLEdevice_info_serv-gtserv_chars[0]value_permissions = AT_BLE_ATTR_READABLE_REQ_AUTHN_NO_AUTHR permissions elsedevice_info_serv-gtserv_chars[0]value_permissions = AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR permissions endifdevice_info_serv-gtserv_chars[0]user_desc = NULL user defined name device_info_serv-gtserv_chars[0]user_desc_len = 0device_info_serv-gtserv_chars[0]user_desc_max_len = 0device_info_serv-gtserv_chars[0]user_desc_permissions = AT_BLE_ATTR_NO_PERMISSIONS user description permissionsdevice_info_serv-gtserv_chars[0]client_config_permissions = AT_BLE_ATTR_NO_PERMISSIONS client config permissionsdevice_info_serm hdsv-gtserv_chars[0]server_config_permissions = AT_BLE_ATTR_NO_PERMISSIONS server config permissionsdevice_info_serv-gtserv_chars[0]user_desc_handle = 0 user desc handlesdevice_info_serv-gtserv_chars[0]client_config_handle = 0 client config handlesdevice_info_serv-gtserv_chars[0]server_config_handle = 0 server config handlesdevice_info_serv-gtserv_chars[0]presentation_format = NULL presentation format

                      Note  In case of custom service the above definition initialization must be taken care of by thedeveloper

                      421 Procedure to Configure and Load Device Info Service1 Include device info service header file (device_infoh) at the beginning of

                      startup_templatec fileinclude ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehinclude device_infoh

                      2 Define a device info service handler as global in startup_templatec file Serviceshandlers dis_gatt_service_handler_t dis_service_handler

                      ATBTLC1000SettingHandling of Pre-Defined Service

                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 34

                      3 Add dis_init_service and at_ble_primary_service_define functions as called abovethe advertisement start in main routine Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service)dis_init_service (ampdis_service_handler) Define the primary service in the GATT server database if ((dis_primary_service_define (ampdis_service_handler)) = AT_BLE_SUCCESS)printf(Device Information Service definition failed) Start Advertising process start_advertisement()

                      4 Click to save the project ltCtrl+Sgt and compile the project by pressing button ltF7gt5 Verify that no build error appears in Atmel Studio output window

                      Figure 4-7 Atmel Studio Output Window

                      6 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt7 Open ldquoMicrochip SmartConnectrdquo application on Android or iOS device8 Press ltStart Scangt button and connect to peripheral

                      Note  The device name is a characteristic and contains the name of the device This device namecan be read by the central device to know the name of the device in order to differentiate thedevices This is being set using at_ble_device_name_set()API The device name is set bydefault when ble_device_init is called and the value is pre-defined using BLE_DEVICE_NAMEThe device name can also be sent as part of advertisement payload to be same as the oneconfigured in at_ble_adv_data_set() API It is the responsibility of users to keep the devicename set in advertisement payload the same as that configured inat_ble_device_name_set()

                      9 The Service must now be visible after pairing with peripheral under Microchip SmartConnectapplication

                      ATBTLC1000SettingHandling of Pre-Defined Service

                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 35

                      Figure 4-8 Service List in Microchip SmartConnect Application

                      Note  If the pairing of ATBTLC1000 with Microchip Smart connect is not successful then removethe pairing information from mobile by selecting ldquoForget Devicerdquo from the mobile settings Thereason for this is that the mobile app stores the previous pairing information but the ATBTLC1000device lost the previous pairing information due to RESET since it was stored on temporary storage(RAM)

                      10 The serial terminal must display the following log output windowFigure 4-9 Console Log Window

                      ATBTLC1000SettingHandling of Pre-Defined Service

                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 36

                      5 Setting up and Handling Custom ServiceThe previous assignment describes the handling of Bluetooth Low Energy SIG defined device infoservice which is the predefined service available in ASF component This assignment describes thecustom service So the service initialization needs to be implemented In the context of customizedenvironment service the following service description is pushed in ATBTLC1000 memory

                      Figure 5-1 Custom Service

                      Custom Environment Service Description

                      bull UUID type ndash Custom UUID (128-bit)bull UUID ndash 1bc5d5a5-0200-a687-e511-3639c1ba5af0

                      Characteristic 0 (Temperature)

                      bull User Description ndash Temperaturebull UUID type ndash Custom UUID (128-bit)bull UUID ndash 1bc5d5a5-0200-a687-e511-3639d8ba5af0bull Properties ndash Read Notifybull Value permission ndash No authorization requiredbull Client config permission ndash No permissionbull Server config permission ndash No permission

                      Note  In this definition UUIDs are generated randomly Custom servicescharacteristics are free to useany 128-bit UUID less than the base UUID There is no reserved space for vendors to use 16-bit or 32-bitUUIDs

                      With this definition any temperature change is notified to the central The notify mechanism allows thecentral to know when the data changes When notify property of the Client Characteristic ConfigurationDescriptor is enabled by the central and the device writes the new value then this updated value isautomatically sent to the central through a notification The central is not required to send readcharacteristic commands explicitly to the peripheral (GATT server)

                      To setup and handle the custom environment service in ATBTLC1000 module the following steps areadded to the Host MCU application

                      bull Configure and load the custom servicebull Update Temperature characteristic and notify to the central devicebull Receive and handle notification from the Host device

                      ATBTLC1000Setting up and Handling Custom Service

                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 37

                      Figure 5-2 Custom Service Flowchart

                      51 Configuring and Loading the Custom Environment ServiceThe ATBTLC1000 Host driver provides the following set of GATT functions that allows it to push andupdate the service descriptions in the ATBTLC1000 SRAM memory

                      Note  Before starting this assignment be sure to follow the steps mentioned in 2 Creating the Projectand Initializing and 3 Establishing Connection with Central Device

                      Prototype ndashat_ble_status_t at_ble_primary_service_define(at_ble_uuid_t uuidat_ble_handle_t service_handleat_ble_included_service_t included_service_listuint16_t included_service_countat_ble_characteristic_t charactristic_listuint16_t charactristic_count)

                      Description ndash Defines a new primary service along with its included services and characteristics inATBTLC1000 module

                      Parameters

                      bull Uuid [In] ndash primary service UUIDbull service_handle [Out] ndash service handle is returned herebull included_service_list [In] ndash array of included service referencesbull included_service_count [In] ndash number of elements in included_service_listbull charactristic_list [InOut] ndash an array of characteristics included in the service this array

                      is update with respective characteristics handlesbull charactristic_count[In] ndash number of elements in charactristic_list

                      ATBTLC1000Setting up and Handling Custom Service

                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 38

                      Return ndash Execution Status

                      bull Characteristics ndashndash Characteristics definition is done through specific array of following

                      ldquoat_ble_characteristic_trdquo structure instancestypedef structat_ble_handle_t char_val_handle Handler (returned during service initialisation)at_ble_uuid_t uuid Characteristic UUID (type and value)at_ble_char_properties_t propertiesCharac Properties (read write notify)uint8_t init_value initial valueuint16_t value_init_len initial value lengthuint16_t value_max_len value max lengthat_ble_attr_permissions_t value_permissions access authorization and authenticationuint8_t user_desc User descriptionuint16_t user_desc_len User description lengthuint16_t user_desc_max_len User description max lengthat_ble_char_presentation_t presentation_format Presentation formatat_ble_attr_permissions_t user_desc_permissions User description permissionat_ble_attr_permissions_t client_config_permissions client permissionat_ble_attr_permissions_t server_config_permissions server permissionat_ble_handle_t user_desc_handle description handlerat_ble_handle_t client_config_handle Client config handlerat_ble_handle_t server_config_handle Server config handler at_ble_characteristic_t

                      511 Procedure to Configure and Load Custom Environment Service1 Define the following service UUID and characteristic UUID in startup_templatec file

                      define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

                      2 Define the following environment service handler and characteristics variable as global instartup_templatec file Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

                      3 Add the following service initialization function custom_environment_service_init instartup_templatecvoid custom_environment_service_init(void) at_ble_uuid_t environment_service_uuiduint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUIDuint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperatureenvironment_service_characs[0]user_desc_len = 10environment_service_characs[0]user_desc_max_len = 10environment_service_characs[0]uuidtype = AT_BLE_UUID_128memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16)environment_service_characs[0]properties = AT_BLE_CHAR_READ |AT_BLE_CHAR_NOTIFYenvironment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature valueenvironment_service_characs[0]value_permissions =(AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuidampenvironment_service_handlerNULL0environment_service_characs1)=AT_BLE_SUCCESS)printf(n Assignment 41 Failed to Initialize custom environment service)

                      ATBTLC1000Setting up and Handling Custom Service

                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 39

                      elseprintf(n Assignment 41 Initialize custom environment service)

                      4 Declare and implement the following GATT event callback functioncustom_char_changed_app_event in startup_templatec file If a client (central) enablesnotifications for a server the server (peripheral) receives an AT_BLE_CHARACTERISTIC_CHANGEDevent and this event callback is called Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

                      5 Declare and implement the following custom_notification_confirmation_handlerfunction in startup_templatec file Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param)at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )paramif (event_param-gtstatus == AT_BLE_SUCCESS)printf(n Assignment 41Notification Successfully sent over the air) else printf(n Assignment 41Sending Notification over the air failed)return AT_BLE_SUCCESS

                      6 Declare the following GATT server callback structure in startup_templatec file Thisassignment uses two GATT callbacksstatic const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handlercharacteristic_changed = custom_char_changed_app_event

                      7 Add the following register_gatt_server_callbacks function in startup_templatec toregister GATT server callback for notification confirmation event Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks)ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACKBLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle)if (ble_status = true)printf(nError when Registering ATBTLC1000 callbacks)

                      8 Add custom_environment_service_init and register_gatt_server_callbacksfunction calls prior to start advertisement in the application main routine to initialize custom serviceand to register the GATT server callbacksint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()

                      ATBTLC1000Setting up and Handling Custom Service

                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 40

                      endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks() Custom service init custom_environment_service_init ( ) Register Gatt server callbacks register_gatt_server_callbacks ( ) Start Advertising process start_advertisement()while(true)ble_event_task()

                      9 Click to save the project ltCtrl+Sgt

                      10 Compile the project by pressing button ltF7gt11 Verify that no build error appears in the Atmel Studio output window

                      Figure 5-3 Atmel Studio Output Window

                      12 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt13 Open the ldquoMicrochip SmartConnectrdquo application on Android or iOS device14 Connect and pair to the peripheral (pass key 123456)15 Custom service must now be visible after pairing with peripheral under Microchip SmartConnect

                      application

                      ATBTLC1000Setting up and Handling Custom Service

                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 41

                      Figure 5-4 Service List in Microchip SmartConnect Application

                      Note  Custom service is displayed as unknown service in the above figure as this service is not aSIG-defined service

                      Figure 5-5 General Information

                      16 Serial terminal client must display the following Log output

                      ATBTLC1000Setting up and Handling Custom Service

                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 42

                      Figure 5-6 Log Output Window

                      52 Updating the Temperature CharacteristicIn the previous assignment the custom Temperature characteristic is defined with a notify attribute Thistype of attribute requires notification to be sent to central when a new characteristic value is availableThe update of any ldquonotifyrdquo characteristic value is based on following interaction between the Host MCUand the ATBTLC1000Figure 5-7 Characteristic Notification

                      521 Setting a Characteristic Value ( at_ble_characteristic_value_set)Prototype ndashat_ble_status_t at_ble_characteristic_value_setat_ble_handle_t handleuint8_t valueuint16_t len)

                      Description ndash Sets a characteristic value in ATBTLC1000 memory

                      Parameters ndash

                      ATBTLC1000Setting up and Handling Custom Service

                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 43

                      bull handle [inout] ndash Pointer to Characteristic handle to be changedbull value [in] ndash New valuebull len [in] ndash Value length in bytes

                      Return ndash Execution Status

                      522 Sending a Notification (at_ble_notification_send)Prototype ndashat_ble_status_t at_ble_notification_send(at_ble_handle_t conn_handleat_ble_handle_t attr_handle)

                      Description ndash Sends a Notification

                      Parameters ndash

                      bull conn_handle[in] ndash handle of the connection to be notifiedbull attr_handle [in] ndash handle of the attribute originating the notification

                      Return ndash Execution Status

                      523 Sending Temperature Information Once in Every 10 Seconds to Central1 Modify the following ldquotimer_callback_fnrdquo callback function from the startup_templatec

                      filestatic void timer_callback_fn(void)timer_flag = true

                      2 hw_timer_init()in main routine of startup_templatec initializes the hardware timer3 If a client (Central) enables the notifications for a server the server (Peripheral) receives an

                      AT_BLE_CHARACTERISTIC_CHANGED event callback then start the periodic 10 second timer forsending the notification Add the following code in previously definedcustom_char_changed_app_event function Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))timer_flag = falsehw_timer_start(10)printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

                      4 Declare the following Temperature_value global variable in startup_templatec staticuint8_t Temperature_value = 25 as static

                      5 Add the following send_temperature_notification function in startup_templatec tosend temperature every 10 seconds Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++

                      ATBTLC1000Setting up and Handling Custom Service

                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 44

                      if(Temperature_value gt 75)Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set(environment_service_characs[0]char_val_handle(uint8_t )ampTemperature_valuesizeof(Temperature_value))ble_status = at_ble_notification_send(0environment_service_characs[0]char_val_handle)if(ble_status = AT_BLE_SUCCESS)printf(fail to send temperature update notification )

                      6 Add the following code in main routine to send temperature data every 10 secondswhile (1) ble_event_task()if(connected_flag == true ampamp timer_flag == truetimer_flag = falsesend_temperature_notification()

                      7 Click to save the project ltCtrl+Sgt

                      8 Compile the project by pressing the button ltF7gt9 Verify that no build error appears in Atmel Studio output window

                      Figure 5-8 Atmel Studio Output Window

                      10 Click to program the project binary on the L21 Xplained XSTK11 Open ldquoMicrochip SmartConnectrdquo Application on Android or iOS device12 Connect and pair to the peripheral (pass key 123456)13 Click NOTIFY to start the notification14 Temperature information in HEX values must be displayed in Microchip SmartConnect application

                      ATBTLC1000Setting up and Handling Custom Service

                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 45

                      Figure 5-9 Notification Window

                      15 Serial terminal must display the following log outputFigure 5-10 Log Output Window

                      ATBTLC1000Setting up and Handling Custom Service

                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 46

                      6 Appendix A Software Solution - Pre-Defined SvcThe following is the code implementation for handling of pre-defined service done in 4 SettingHandlingof Pre-Defined Service

                      - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehinclude device_infoh

                      volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false Services handlers dis_gatt_service_handler_t dis_service_handler

                      static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

                      void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                      Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                      Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                      static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                      Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void) Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks)

                      ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 47

                      ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                      timer callback function static void timer_callback_fn(void) Add timer callback functionality here

                      void button_cb(void) Add button callback functionality here

                      int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                      Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                      DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks()

                      Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service) dis_init_service(ampdis_service_handler) Define the primary service in the GATT server database if((dis_primary_service_define(ampdis_service_handler)) = AT_BLE_SUCCESS) printf(Device Information Service definition failed)

                      Start Advertising process start_advertisement() while(true) ble_event_task()

                      ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 48

                      7 Appendix B Software Solution - Custom ServiceThe following is the code implementation for handling of pre-defined service done in 5 Setting up andHandling Custom Service

                      - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templateh

                      volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false

                      static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

                      define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0

                      define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

                      Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

                      void custom_environment_service_init(void) at_ble_uuid_t environment_service_uuid uint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUID uint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128 memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperature environment_service_characs[0]user_desc_len = 10 environment_service_characs[0]user_desc_max_len = 10 environment_service_characs[0]uuidtype = AT_BLE_UUID_128 memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16) environment_service_characs[0]properties = AT_BLE_CHAR_READ | AT_BLE_CHAR_NOTIFY environment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature value environment_service_characs[0]value_permissions = (AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuid ampenvironment_service_handlerNULL0 environment_service_characs1)=AT_BLE_SUCCESS) printf(n Assignment 41 Failed to Initialize custom environment service) else printf(n Assignment 41 Initialize custom environment service)

                      Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param) at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )param if (event_param-gtstatus == AT_BLE_SUCCESS) printf(n Assignment 41Notification Successfully sent over the air)

                      ATBTLC1000Appendix B Software Solution - Custom Service

                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 49

                      else printf(n Assignment 41Sending Notification over the air failed) return AT_BLE_SUCCESS

                      static at_ble_status_t custom_char_changed_app_event(void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle -gt char_new_value[0])) timer_flag = false hw_timer_start(10) printf(n Assignment 41Characteristic changed event) return AT_BLE_SUCCESS

                      static const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handler characteristic_changed = custom_char_changed_app_event

                      Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                      void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                      Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                      Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                      static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                      Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void)

                      ATBTLC1000Appendix B Software Solution - Custom Service

                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 50

                      Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                      timer callback function static void timer_callback_fn(void) Add timer callback functionality here timer_flag = true

                      void button_cb(void) Add button callback functionality here

                      static uint8_t Temperature_value = 25

                      Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++ if(Temperature_value gt 75) Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set( environment_service_characs[0]char_val_handle (uint8_t )ampTemperature_value sizeof(Temperature_value)) ble_status = at_ble_notification_send(0 environment_service_characs[0]char_val_handle) if(ble_status = AT_BLE_SUCCESS) printf(fail to send temperature update notification )

                      int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                      Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                      DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register Gap ATBTLC1000 Callbacks register_btlc1000_callbacks()

                      Custom service init custom_environment_service_init()

                      ATBTLC1000Appendix B Software Solution - Custom Service

                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 51

                      Register Gatt server callback register_gatt_server_callbacks()

                      Start Advertising process start_advertisement() while(true) ble_event_task() if(connected_flag == true ampamp timer_flag == true) timer_flag = false send_temperature_notification()

                      ATBTLC1000Appendix B Software Solution - Custom Service

                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 52

                      8 Document Revision HistoryRev B - 42018

                      Section Changes

                      Document Revised contents to match various Bluetooth Low Energy standard versions

                      Rev A - 122017

                      Section Changes

                      Document Initial release

                      ATBTLC1000Document Revision History

                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 53

                      The Microchip Web Site

                      Microchip provides online support via our web site at httpwwwmicrochipcom This web site is used asa means to make files and information easily available to customers Accessible by using your favoriteInternet browser the web site contains the following information

                      bull Product Support ndash Data sheets and errata application notes and sample programs designresources userrsquos guides and hardware support documents latest software releases and archivedsoftware

                      bull General Technical Support ndash Frequently Asked Questions (FAQ) technical support requestsonline discussion groups Microchip consultant program member listing

                      bull Business of Microchip ndash Product selector and ordering guides latest Microchip press releaseslisting of seminars and events listings of Microchip sales offices distributors and factoryrepresentatives

                      Customer Change Notification Service

                      Microchiprsquos customer notification service helps keep customers current on Microchip productsSubscribers will receive e-mail notification whenever there are changes updates revisions or erratarelated to a specified product family or development tool of interest

                      To register access the Microchip web site at httpwwwmicrochipcom Under ldquoSupportrdquo click onldquoCustomer Change Notificationrdquo and follow the registration instructions

                      Customer Support

                      Users of Microchip products can receive assistance through several channels

                      bull Distributor or Representativebull Local Sales Officebull Field Application Engineer (FAE)bull Technical Support

                      Customers should contact their distributor representative or Field Application Engineer (FAE) for supportLocal sales offices are also available to help customers A listing of sales offices and locations is includedin the back of this document

                      Technical support is available through the web site at httpwwwmicrochipcomsupport

                      Microchip Devices Code Protection Feature

                      Note the following details of the code protection feature on Microchip devices

                      bull Microchip products meet the specification contained in their particular Microchip Data Sheetbull Microchip believes that its family of products is one of the most secure families of its kind on the

                      market today when used in the intended manner and under normal conditionsbull There are dishonest and possibly illegal methods used to breach the code protection feature All of

                      these methods to our knowledge require using the Microchip products in a manner outside theoperating specifications contained in Microchiprsquos Data Sheets Most likely the person doing so isengaged in theft of intellectual property

                      bull Microchip is willing to work with the customer who is concerned about the integrity of their code

                      ATBTLC1000

                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 54

                      bull Neither Microchip nor any other semiconductor manufacturer can guarantee the security of theircode Code protection does not mean that we are guaranteeing the product as ldquounbreakablerdquo

                      Code protection is constantly evolving We at Microchip are committed to continuously improving thecode protection features of our products Attempts to break Microchiprsquos code protection feature may be aviolation of the Digital Millennium Copyright Act If such acts allow unauthorized access to your softwareor other copyrighted work you may have a right to sue for relief under that Act

                      Legal Notice

                      Information contained in this publication regarding device applications and the like is provided only foryour convenience and may be superseded by updates It is your responsibility to ensure that yourapplication meets with your specifications MICROCHIP MAKES NO REPRESENTATIONS ORWARRANTIES OF ANY KIND WHETHER EXPRESS OR IMPLIED WRITTEN OR ORAL STATUTORYOR OTHERWISE RELATED TO THE INFORMATION INCLUDING BUT NOT LIMITED TO ITSCONDITION QUALITY PERFORMANCE MERCHANTABILITY OR FITNESS FOR PURPOSEMicrochip disclaims all liability arising from this information and its use Use of Microchip devices in lifesupport andor safety applications is entirely at the buyerrsquos risk and the buyer agrees to defendindemnify and hold harmless Microchip from any and all damages claims suits or expenses resultingfrom such use No licenses are conveyed implicitly or otherwise under any Microchip intellectualproperty rights unless otherwise stated

                      Trademarks

                      The Microchip name and logo the Microchip logo AnyRate AVR AVR logo AVR Freaks BeaconThingsBitCloud CryptoMemory CryptoRF dsPIC FlashFlex flexPWR Heldo JukeBlox KeeLoq KeeLoq logoKleer LANCheck LINK MD maXStylus maXTouch MediaLB megaAVR MOST MOST logo MPLABOptoLyzer PIC picoPower PICSTART PIC32 logo Prochip Designer QTouch RightTouch SAM-BASpyNIC SST SST Logo SuperFlash tinyAVR UNIO and XMEGA are registered trademarks ofMicrochip Technology Incorporated in the USA and other countries

                      ClockWorks The Embedded Control Solutions Company EtherSynch Hyper Speed Control HyperLightLoad IntelliMOS mTouch Precision Edge and Quiet-Wire are registered trademarks of MicrochipTechnology Incorporated in the USA

                      Adjacent Key Suppression AKS Analog-for-the-Digital Age Any Capacitor AnyIn AnyOut BodyComchipKIT chipKIT logo CodeGuard CryptoAuthentication CryptoCompanion CryptoControllerdsPICDEM dsPICDEMnet Dynamic Average Matching DAM ECAN EtherGREEN In-Circuit SerialProgramming ICSP Inter-Chip Connectivity JitterBlocker KleerNet KleerNet logo Mindi MiWimotorBench MPASM MPF MPLAB Certified logo MPLIB MPLINK MultiTRAK NetDetach OmniscientCode Generation PICDEM PICDEMnet PICkit PICtail PureSilicon QMatrix RightTouch logo REALICE Ripple Blocker SAM-ICE Serial Quad IO SMART-IS SQI SuperSwitcher SuperSwitcher II TotalEndurance TSHARC USBCheck VariSense ViewSpan WiperLock Wireless DNA and ZENA aretrademarks of Microchip Technology Incorporated in the USA and other countries

                      SQTP is a service mark of Microchip Technology Incorporated in the USA

                      Silicon Storage Technology is a registered trademark of Microchip Technology Inc in other countries

                      GestIC is a registered trademark of Microchip Technology Germany II GmbH amp Co KG a subsidiary ofMicrochip Technology Inc in other countries

                      All other trademarks mentioned herein are property of their respective companies

                      ATBTLC1000

                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 55

                      copy 2018 Microchip Technology Incorporated Printed in the USA All Rights Reserved

                      ISBN 978-1-5224-2921-0

                      Quality Management System Certified by DNV

                      ISOTS 16949Microchip received ISOTS-169492009 certification for its worldwide headquarters design and waferfabrication facilities in Chandler and Tempe Arizona Gresham Oregon and design centers in Californiaand India The Companyrsquos quality system processes and procedures are for its PICreg MCUs and dsPICreg

                      DSCs KEELOQreg code hopping devices Serial EEPROMs microperipherals nonvolatile memory andanalog products In addition Microchiprsquos quality system for the design and manufacture of developmentsystems is ISO 90012000 certified

                      ATBTLC1000

                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 56

                      AMERICAS ASIAPACIFIC ASIAPACIFIC EUROPECorporate Office2355 West Chandler BlvdChandler AZ 85224-6199Tel 480-792-7200Fax 480-792-7277Technical SupporthttpwwwmicrochipcomsupportWeb AddresswwwmicrochipcomAtlantaDuluth GATel 678-957-9614Fax 678-957-1455Austin TXTel 512-257-3370BostonWestborough MATel 774-760-0087Fax 774-760-0088ChicagoItasca ILTel 630-285-0071Fax 630-285-0075DallasAddison TXTel 972-818-7423Fax 972-818-2924DetroitNovi MITel 248-848-4000Houston TXTel 281-894-5983IndianapolisNoblesville INTel 317-773-8323Fax 317-773-5453Tel 317-536-2380Los AngelesMission Viejo CATel 949-462-9523Fax 949-462-9608Tel 951-273-7800Raleigh NCTel 919-844-7510New York NYTel 631-435-6000San Jose CATel 408-735-9110Tel 408-436-4270Canada - TorontoTel 905-695-1980Fax 905-695-2078

                      Australia - SydneyTel 61-2-9868-6733China - BeijingTel 86-10-8569-7000China - ChengduTel 86-28-8665-5511China - ChongqingTel 86-23-8980-9588China - DongguanTel 86-769-8702-9880China - GuangzhouTel 86-20-8755-8029China - HangzhouTel 86-571-8792-8115China - Hong Kong SARTel 852-2943-5100China - NanjingTel 86-25-8473-2460China - QingdaoTel 86-532-8502-7355China - ShanghaiTel 86-21-3326-8000China - ShenyangTel 86-24-2334-2829China - ShenzhenTel 86-755-8864-2200China - SuzhouTel 86-186-6233-1526China - WuhanTel 86-27-5980-5300China - XianTel 86-29-8833-7252China - XiamenTel 86-592-2388138China - ZhuhaiTel 86-756-3210040

                      India - BangaloreTel 91-80-3090-4444India - New DelhiTel 91-11-4160-8631India - PuneTel 91-20-4121-0141Japan - OsakaTel 81-6-6152-7160Japan - TokyoTel 81-3-6880- 3770Korea - DaeguTel 82-53-744-4301Korea - SeoulTel 82-2-554-7200Malaysia - Kuala LumpurTel 60-3-7651-7906Malaysia - PenangTel 60-4-227-8870Philippines - ManilaTel 63-2-634-9065SingaporeTel 65-6334-8870Taiwan - Hsin ChuTel 886-3-577-8366Taiwan - KaohsiungTel 886-7-213-7830Taiwan - TaipeiTel 886-2-2508-8600Thailand - BangkokTel 66-2-694-1351Vietnam - Ho Chi MinhTel 84-28-5448-2100

                      Austria - WelsTel 43-7242-2244-39Fax 43-7242-2244-393Denmark - CopenhagenTel 45-4450-2828Fax 45-4485-2829Finland - EspooTel 358-9-4520-820France - ParisTel 33-1-69-53-63-20Fax 33-1-69-30-90-79Germany - GarchingTel 49-8931-9700Germany - HaanTel 49-2129-3766400Germany - HeilbronnTel 49-7131-67-3636Germany - KarlsruheTel 49-721-625370Germany - MunichTel 49-89-627-144-0Fax 49-89-627-144-44Germany - RosenheimTel 49-8031-354-560Israel - RarsquoananaTel 972-9-744-7705Italy - MilanTel 39-0331-742611Fax 39-0331-466781Italy - PadovaTel 39-049-7625286Netherlands - DrunenTel 31-416-690399Fax 31-416-690340Norway - TrondheimTel 47-7289-7561Poland - WarsawTel 48-22-3325737Romania - BucharestTel 40-21-407-87-50Spain - MadridTel 34-91-708-08-90Fax 34-91-708-08-91Sweden - GothenbergTel 46-31-704-60-40Sweden - StockholmTel 46-8-5090-4654UK - WokinghamTel 44-118-921-5800Fax 44-118-921-5820

                      Worldwide Sales and Service

                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 57

                      • Introduction
                      • Table of Contents
                      • 1 Getting Started
                        • 11 Software Prerequisites
                          • 111 Installation Steps of Atmel Studio 7
                            • 12 Software Setup
                              • 121 Installation of Microchip SmartConnect application on a Mobile device
                                • 13 ATBTLC1000 Embedded Firmware
                                • 14 ATBTLC1000 Host Software API
                                • 15 Hardware Prerequisites
                                  • 151 SMARTtrade SAM L21 Xplained Pro
                                  • 152 ATBTLC1000ZR Xplained Pro Extension board
                                    • 16 Hardware Setup
                                      • 2 Creating the Project and Initializing
                                        • 21 Creating Project from ASF
                                        • 22 Configuring ASF for ATBTLC1000-ZR
                                        • 23 Compiling and Testing the Project
                                          • 3 Establishing Connection with Central Device
                                            • 31 Configuring and Starting the Advertisement Process
                                              • 311 Flags (AD Type 0x00)
                                              • 312 Available Service UUID (AD Types 0x02 to 0x07)
                                              • 313 Device Name (AD Types 0x08 to 0x09)
                                                • 3131 Setting the Advertisement Payload (ble_advertisement_data_set)
                                                • 3132 Starting the Advertisement Process (at_ble_adv_start)
                                                  • 314 Advertisement Process
                                                    • 3141 Starting the Advertisement Process
                                                        • 32 Managing GAP events
                                                          • 321 Handling of Connected and Disconnected GAP Events
                                                              • 4 SettingHandling of Pre-Defined Service
                                                                • 41 Adding Device Info Service Component from ASF Wizard to Project
                                                                • 42 Configuring and Loading Device Information Service
                                                                  • 421 Procedure to Configure and Load Device Info Service
                                                                      • 5 Setting up and Handling Custom Service
                                                                        • 51 Configuring and Loading the Custom Environment Service
                                                                          • 511 Procedure to Configure and Load Custom Environment Service
                                                                            • 52 Updating the Temperature Characteristic
                                                                              • 521 Setting a Characteristic Value ( at_ble_characteristic_value_set)
                                                                              • 522 Sending a Notification (at_ble_notification_send)
                                                                              • 523 Sending Temperature Information Once in Every 10 Seconds to Central
                                                                                  • 6 Appendix A Software Solution - Pre-Defined Svc
                                                                                  • 7 Appendix B Software Solution - Custom Service
                                                                                  • 8 Document Revision History
                                                                                  • The Microchip Web Site
                                                                                  • Customer Change Notification Service
                                                                                  • Customer Support
                                                                                  • Microchip Devices Code Protection Feature
                                                                                  • Legal Notice
                                                                                  • Trademarks
                                                                                  • Quality Management System Certified by DNV
                                                                                  • Worldwide Sales and Service

                        2 Creating the Project and InitializingThis chapter provides the process of creating an application startup project using Atmel Studio Prior tocreating a project the user must know hardware architecture and software requirements to configuredrivers

                        The hardware connection between the SAM L21 XPRO and the ATBTLC1000ZR XPRO board isillustrated in following figure This SAM L21 board is used as host MCUFigure 2-1 ATBTLC1000ZR Xpro Board Connection with SAM L21

                        Note  For more details refer to module datasheet and XPRO board design documentation

                        21 Creating Project from ASFAdvanced Software Framework has a pre-configured Bluetooth Low Energy Startup template project thatincludes Bluetooth Low Energy software API for Host and ATBTLC1000 and their peripheral driverdependencies This is used as starting project for any Bluetooth Low Energy project development

                        To create the project follow the steps below

                        1 Search for the ldquoBLE-Startup Templaterdquo from the File gt New gt Example Project menu in AtmelStudio

                        ATBTLC1000Creating the Project and Initializing

                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 12

                        Figure 2-2 Advanced Software Framework_New Example Project

                        Note  ATBTLC1000SAMB11 related projects are prefixed with ldquoBLErdquo making it easier to filter theproject in the dialogue box

                        2 Select the appropriate ldquoBLE-Startup Templaterdquo project corresponding to the intended Host MCUXplained Pro board and then press OK button to import the BLE startup template project SelectldquoBLE-Startup Template ndash SAM L21 Xplained Pro SAML21J18Brdquo for this hands-onNote  Rev B XPRO boards can be identified by SAML21J18B silk screen marking below SAML21MCU

                        3 The BLE startup project is now created and loaded in Atmel StudioFigure 2-3 Startup_Template Project

                        ATBTLC1000Creating the Project and Initializing

                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 13

                        Note  The main project routine of ldquoStartup Template projectrdquo already includes host MCU low levelinitialization BLE and ATBTLC1000 initialization The added ASF components in project can beviewed from ldquoASFgtASF Wizardrdquo Select the created project from Project drop down box

                        Figure 2-4 ASF Wizard Window

                        ndash BLE_STACK Platform Interface ndash Core manager of Bluetooth Low Energy Host API Itmanages ATBTLC1000 device initialization GAP and GATT events

                        ndash Timer Driver ndash Task timer functionality by using a Timer Counter (TC) or Timer Counter forControl (TCC) peripheral

                        ndash Console UART ndash Universal Asynchronous ReceiverTransmitter (UART) communication insynchronousblocking mode

                        ndash Generic Board Support ndash Host MCU Board specific initializationndash System Drivers ndash Select MCUrsquos System peripheral drivers These drivers are included by

                        default in ASF projects and manage the clocks and oscillator of the system4 The main routine contains the MCU low level initialization and ATBTLC1000 initialization The

                        following figure illustrates the flowchart of the main routine

                        ATBTLC1000Creating the Project and Initializing

                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 14

                        Figure 2-5 Main Routine Flowchart

                        22 Configuring ASF for ATBTLC1000-ZR1 The default ldquoStartup Template Projectrdquo is configured for ATBTLC1000-MR module with 6-Wire

                        mode2 Navigate to Project properties Project gt Project properties gt Toolchain gt ARMGNU C Compiler gt

                        Symbols3 The ATBTLC1000ZR-XSTK kit uses the ATBTLC1000-ZR110CA module Change symbol

                        BLE_MODULE to BTLC1000_ZR and enable UART_FLOWCONTROL_4WIRE_MODE forATBTLC1000-ZR module as shown in the figure belowFigure 2-6 Startup Template Project Window

                        Note  This configuration change is not required for ATBTLC1000-MR module

                        ATBTLC1000Creating the Project and Initializing

                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 15

                        23 Compiling and Testing the Project

                        1 Click the ldquo rdquo button ltF7gt to compile the project2 Verify that no build error appears in Atmel Studio output window

                        Figure 2-7 Atmel Studio Output Window

                        3 Connect the SAM L21 XPRO to PC (if not already done)4 To access the project properties go to Project gt

                        STARTUP_TEMPLATE_SAML21_XPLAINED_PRO_B1 PropertiesFigure 2-8 Compiling the Project

                        5 In project properties click the Tool tab and select the EDBG of SAM L21 Xplained Pro board asdebuggerprogrammerFigure 2-9 Selection of DebuggerProgrammer

                        6 Open any Terminal application (for example TeraTerm) Select the COM port enumerated on thePC and set the following parameters

                        ndash EDBG associated COM Port (Check Windows Device Manager)

                        ATBTLC1000Creating the Project and Initializing

                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 16

                        ndash Baudrate 115200ndash Parity Nonendash One Stop bitndash Enable Hardware Flow Control

                        7 Click to save the project ltCtrl+Sgt

                        8 Click rdquo to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt9 The initialization of the ATBTLC1000ZR module must return the Bluetooth Device Address and

                        Address typeFigure 2-10 Console Log Window

                        Note 1 If initialization fails make sure to verify the hardware configuration is aligned with the

                        description refer to 16 Hardware Setup2 The initialization of ATBTLC1000 takes few seconds due to patch download process

                        ATBTLC1000Creating the Project and Initializing

                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 17

                        3 Establishing Connection with Central DeviceThe Bluetooth Low Energy connectivity is added to the application that is used to connect with theBluetooth Low Energy central The first step is about the management of Bluetooth connection with acentral device When using ATBTLC1000 device this process is managed by dedicated API function callsassociated with ATBTLC1000 events handling

                        The interaction between Host MCU ATBTLC1000 and Bluetooth Low Energy central during connectionestablishment is as follows

                        Figure 3-1 Establishing Connection with Central Device

                        On host MCU side the management of the Bluetooth connection is performed through three main steps1 GAP callback registration2 Advertisement configuration3 ATBTLC1000 event handling

                        In the existing project main routine the integration of these steps are highlighted in red in the followingflowchart

                        ATBTLC1000Establishing Connection with Central Device

                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 18

                        Figure 3-2 Main Routine Flow Chart

                        31 Configuring and Starting the Advertisement ProcessThe Bluetooth Low Energy devices transmit advertisement packets to show their presence to nearbydevices The advertisement packet is sent periodically at a time interval defined by variableldquoadvintervalrdquo defined in Bluetooth SIG specification To avoid any collision with other wireless networksuch as Wi-Fireg a channel change is performed for each advertisement packet sent (data frequencyhopping) as illustrated in the following figureFigure 3-3 Advertisement Process

                        During advertisement the payload structure to be sent differs from application to application and is set byusing encapsulated packet data unit type information (PDU_TYPE)

                        ATBTLC1000Establishing Connection with Central Device

                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 19

                        Figure 3-4 PDU Advertising

                        The following table lists the different PDU types used according to device role

                        Advertising event types (PDU_TYPE) Broadcaster Observer Peripheral Central

                        Connectible undirected event (ADV_IND) Excluded Excluded Mandatory Excluded

                        Connectible directed event(ADV_DIRECT_IND) Excluded Excluded Optional Excluded

                        Non-connectible undirected event(ADV_NONCONN_IND) Mandatory Excluded Optional Excluded

                        Scannable undirected event (ADV_SCAN_IND) Optional Excluded Optional Excluded

                        As our device acts as a Bluetooth Low Energy peripheral the connectable undirected event (ADV_IND)advertising type is used See the following description about the ADV_IND advertisement packetFigure 3-5 ADV_IND Advertisement Packet

                        The ADV_IND payload contains different Advertisement Data types (AD0 - ADn) which provide specificinformation to the central device such as device short name Tx power level and list of availableservices UUIDs The number of advertisement data types that can be added to the advertisementpayload are limited by the advertisement payload size of 31 octets

                        Following is a list of advertisement data types that are commonly found in ADV_IND payload

                        ATBTLC1000Establishing Connection with Central Device

                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 20

                        311 Flags (AD Type 0x00)The flags describe the basic device capability such as BLE support BLE discoverable mode BREDRsupport and simultaneous BRED

                        312 Available Service UUID (AD Types 0x02 to 0x07)The Bluetooth Low Energy advertisement payloads are limited to 31 bytes Therefore only two 128-bitUUID values can be added to the payload For this purpose the specific AD types describe the length ofthe advertised UUID and provide information as to whether the payload contains a incompletecompletelist of UUID supported by the GATT server

                        bull 0x02 - Incomplete list of 16-bit UUIDs (adopted GATT services)bull 0x03 - Complete list of 16-bit UUIDs (adopted GATT services)bull 0x06 - Incomplete list of 128-bit UUIDs (custom GATT services)bull 0x07 - Complete list of 128-bit UUIDs (custom GATT services)

                        Note  When a 16-bit UUID is transmitted only the unique 2-byte value is sent The client knows that it isrequired to be injected into the base UUID For example the Health Thermometer Service is assigned as0x1809 so its equivalent UUID is 00001809-0000-1000-8000-00805F9B34FB

                        313 Device Name (AD Types 0x08 to 0x09)This AD type field is used to advertise the Local name of device in the network The Local name datatype value indicates if the name is complete or shortened If the name is shortened the complete namecan be read after the connection is established

                        bull 0x08 - Shortened Local Namebull 0x09 - Complete Local Name

                        Note 1 A shortened name contains only continuous characters from the beginning of the full name For

                        example if the device name is BT_Device_Name then the shortened name can beBT_Device or BT_Dev

                        2 Complete data type list are available at httpswwwbluetoothcomspecificationsassigned-numbersgeneric-access-profile

                        For management of advertisement process and cover the different configurations specified by SIG theATBTLC1000 Host driver provides the two functions elaborated in the following sections

                        In the application use these two functions to setup the following ADV_IN type payloadFigure 3-6 ADV_IN Type Payload Process

                        ATBTLC1000Establishing Connection with Central Device

                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 21

                        3131 Setting the Advertisement Payload (ble_advertisement_data_set)Prototype ndashat_ble_status_t at_ble_adv_data_set (uint8_t const const adv_datauint8_t adv_data_lenuint8_t const const scan_resp_datauint8_t scan_response_data_len)

                        Description ndash Set clear or update the advertisement and scan response data

                        Parameters ndash

                        bull adv_data ndash Raw data to be placed in advertisement packetbull adv_data_len ndash Data length for adv_data Max size 28 bytes (3 bytes are reserved to set

                        advertising AD type flags based on the selected Advertising mode and the user is not required toconfigure AD type flags in the advertisement payload)

                        bull scan_resp_data ndash Raw data to be placed in the scan response packet If NULL no changes aremade to the current scan response packet data

                        bull scan_response_data_len ndash Data length for scan_resp_data Max size 31 bytes

                        Return ndash Execution Status

                        This function requires a parameter raw adv_data to be sent to central Following is an example of itsdefinition

                        static uint8_t adv_data[] = 0x11 AD1 length = 170x03 AD1 Type = Complete list of 128-bit UUIDs0x1b0xc50xd50xa50x020x000xa60x87 AD1 = UUID MSBs0xe50x110x360x390xc00xba0x5a0xf00x0A AD2 Length = 100x09 AD2 Type = Complete local NamelsquoMrsquorsquoyrsquorsquo_rsquorsquoDrsquorsquoErsquorsquoVrsquo AD2 = ldquoMy_DEVrdquo

                        3132 Starting the Advertisement Process (at_ble_adv_start)Prototype ndashat_ble_status_t at_ble_adv_start (at_ble_adv_type_t typeat_ble_adv_mode_t modeat_ble_addr_t peer_addrat_ble_filter_type_t filtereduint16_t intervaluint16_t timeoutbool disable_randomness)

                        Description ndash Start advertisement process

                        Parameters ndash

                        bull type ndash Advertising type to be used can bendash AT_BLE_ADV_TYPE_UNDIRECTEDndash AT_BLE_ADV_TYPE_DIRECTEDndash AT_BLE_ADV_TYPE_SCANNABLE_UNDIRECTEDndash AT_BLE_ADV_TYPE_NONCONN_UNDIRECTEDndash AT_BLE_ADV_TYPE_DIRECTED_LDCndash AT_BLE_ADV_TYPE_SCAN_RESPONSE

                        bull mode ndash Advertising mode to be used can be

                        ATBTLC1000Establishing Connection with Central Device

                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 22

                        ndash AT_BLE_ADV_NON_DISCOVERABLEndash AT_BLE_ADV_GEN_DISCOVERABLEndash AT_BLE_ADV_LIM_DISCOVERABLEndash AT_BLE_ADV_BROADCASTER_MODE

                        bull peer_addr ndash Specify peer address when advertising type is AT_BLE_ADV_TYPE_DIRECTEDbull filtered ndash

                        ndash AT_BLE_ADV_FP_ANY ndash Allow scan and connection requests from anyonendash AT_BLE_ADV_FP_FILTER_SCANREQ ndash Allow scan request from White List devices onlyndash AT_BLE_ADV_FP_FILTER_CONNREQ ndash Allow connection request from White List devices

                        onlyndash AT_BLE_ADV_FP_FILTER_BOTH ndash Allow scan and connection requests from White List

                        devices onlybull interval ndash Advertisement interval (in 0625 ms units)bull timeout ndash Advertising timeout between 0x0001 and 0x028F in scale of seconds This parameter

                        must be set to 0 if type equals AT_BLE_ADV_TYPE_DIRECTEDbull disable_randomness ndash When disabled advertisements are performed at the exact interval

                        without adding random 10 ms tempo

                        Return ndash Execution Status

                        314 Advertisement ProcessIn this assignment the advertisement process is performed in the following configuration

                        bull Undirected (Type AT_BLE_ADV_TYPE_UNDIRECTED)bull Discoverable (Mode AT_BLE_ADV_GEN_DISCOVERABLE)bull No peer Address (peer_addr = NULL)bull No filtering (filtered = AT_BLE_ADV_FP_ANY)bull Advertisement interval 1s (interval = 1600)bull Maximum timeout (timeout 655)bull Randomness enabled (disable_randomness = FALSE)

                        3141 Starting the Advertisement Process1 Open startup_templatec file2 Declare the following ble_status global variable in startup_templatec as volatile

                        include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehvolatile at_ble_status_t ble_status

                        3 Declare the following adv_data global variable in startup_templatec as staticstatic uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD)0x09 AD2 Type = Complete local Name

                        ATBTLC1000Establishing Connection with Central Device

                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 23

                        My_SENS AD2 = ldquoMy_SENSrdquo

                        Note 1 The name of the device is to be changed (AD2 field)2 According to the new name AD2 length must be adapted to new AD2 content

                        4 Add the following start_advertisement function in startup_templatec prototype for thefunction void start_advertisement (void) also this can be added to avoid warningsvoid start_advertisement (void)printf(n Assignment 21 Start Advertisement)Set advertisement datable_status = at_ble_adv_data_set(adv_datasizeof(adv_data)NULL0)Start Advertisementble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550)if(ble_status = AT_BLE_SUCCESS)printf(n Failed to start advertisement)

                        5 Start the advertisement process by adding the following highlighted code to the application mainroutineint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Start Advertising process start_advertisement() Register PrimaryIncluded service in case of GATT Server while(true) Write application task

                        6 Click to save the project ltCtrl+Sgt

                        7 Click button to compile the project ltF7gt8 Verify that no build error appears in Atmel Studio output window

                        Figure 3-7 Atmel Studio Output Window

                        ATBTLC1000Establishing Connection with Central Device

                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 24

                        9 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt10 Open Microchip SmartConnect Application on Android or iOS device and tap START SCAN button

                        Note  The device must appear in Microchip SmartConnect Application

                        Figure 3-8 Microchip SmartConnect Application

                        11 Terminal must display the following Log outputFigure 3-9 Log Output Window

                        32 Managing GAP eventsThe management of the Bluetooth connection at the host MCU level is done through reception andhandling of events reported by the ATBTLC1000 These events are generated by ATBTLC1000 GAPGATT and L2CAP layers to notify the host about the ongoing Bluetooth interaction with other devices inits vicinity

                        ATBTLC1000Establishing Connection with Central Device

                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 25

                        To manage events coming from the ATBTLC1000 module the host driver must provide able_mgr_events_callback_handler function that allows registration of application callback functionto be executed on each event reported by the ATBTLC1000 module

                        Prototype ndashbool ble_mgr_events_callback_handler(ble_mgr_event_cb_t event_cb_typeble_mgr_event_t event_typeconst voidble_event_handler)

                        Description ndash Used by ProfileServiceApplication to register the Bluetooth Low Energy eventsrsquocallbacks

                        Parameters ndash

                        event_cb_type ndash types of actions to perform on callbacks can be either

                        REGISTER_CALL_BACK or

                        UNREGISTER_CALL_BACKevent_type ndash Any one of the event types can be used

                        BLE_GAP_EVENT_TYPEBLE_GATT_CLIENT_EVENT_TYPEBLE_GATT_SERVER_EVENT_TYPEBLE_L2CAP_EVENT_TYPEBLE_GATT_HTPT_EVENT_TYPEBLE_DTM_EVENT_TYPEBLE_CUSTOM_EVENT_TYPEble_event_handler ndash pointer to handler list

                        Structure ble_gap_event_cb_t defines the GAP callbacks Similarly structuresble_gatt_client_event_cb_t and ble_gatt_server_event_cb_t define the callbacks of GATTevents

                        typedef struct ble_gap_event_cb BLE Undefined events received from ATBTLC1000 which is not handled in Libraryble_event_callback_t undefined BLE scan information contains the peer device scan information Refer ref at_ble_scan_info_tble_event_callback_t scan_info Once the BLE scan timeout or scan stop triggers the scan report event Refer ref at_ble_scan_report_tble_event_callback_t scan_report Advertisement complete event Refer ref at_ble_adv_cmp_evt_tble_event_callback_t advt_cmp Advertisement report in case of advertisement stopped due to advertisement timeout Refer ref at_ble_adv_report_tble_event_callback_t adv_report BLE device own random address changed event Refer ref at_ble_rand_addr_changed_tble_event_callback_t rand_addr_changed BLE connected event device connected to peer device Refer ref at_ble_connected_tble_event_callback_t connected BLE disconnected event device disconnected from peer device Refer ref at_ble_disconnected_tble_event_callback_t disconnected Connection parameter update done on peer device and own device Refer ref at_ble_conn_param_update_done_t

                        ATBTLC1000Establishing Connection with Central Device

                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 26

                        ble_event_callback_t conn_parameter_update_done Connection parameter update request from peer device Refer ref at_ble_conn_param_update_request_tble_event_callback_t conn_param_update_request Pair complete event as part of end of pairing process Refer ref at_ble_pair_done_tble_event_callback_t pair_done Pair request event from Central device Refer ref at_ble_pair_request_tble_event_callback_t pair_request Slave security request received from peer Peripheral device Refer ref at_ble_slave_sec_request_tble_event_callback_t slave_sec_request Pair Key request event from Peer central device Refer ref at_ble_pair_key_request_tble_event_callback_t pair_key_request encryption request comes from the peer device Needs to supply the bonding information which is stored earlier ref at_ble_encryption_request_tble_event_callback_t encryption_request encryption status changed event received from SMP once the encryption is started ref at_ble_encryption_status_changed_tble_event_callback_t encryption_status_changed Event triggered once the Resolve random address is resolved using supplied IRKs ref at_ble_resolv_rand_addr_status_tble_event_callback_t resolv_rand_addr_status Event is triggered once the connection signature information indication received ref at_ble_sign_counter_tble_event_callback_t sign_counters_ind Peer attribute information indication received Event ref at_ble_peer_att_info_ind_tble_event_callback_t peer_att_info_ind Peer device channel map received indication ref at_ble_channel_map_tble_event_callback_t con_channel_map_indble_gap_event_cb_t

                        Note  Callback definition is application-specific If the application layer requires a specific event callbackthen the specific member of the structure is to be assigned with the address of the callback function

                        In this assignment two callback functions on Connected and Disconnected GAP events are usedThis allows the application to restart the advertising process on Disconnect manage connectioninformation and startstop of sensor data update

                        321 Handling of Connected and Disconnected GAP Events1 Open the startup_templatec file2 Define the following software flags as global variables in startup_templatec file volatile

                        bool timer_flag = false and volatile bool connected_flag = false3 Declare and implement the following ble_connected_cb function in the

                        startup_templatec file Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param)printf(n Assignment 22 Application connected )connected_flag = trueALL_UNUSED(param)return AT_BLE_SUCCESS

                        4 Declare and implement the following ble_disconnected_cb function instartup_templatec file Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param)printf(n Assignment 22 Application disconnected )connected_flag = falsestart_advertisement()ALL_UNUSED(param)return AT_BLE_SUCCESS

                        ATBTLC1000Establishing Connection with Central Device

                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 27

                        5 Declare the following static GAP callback structure in ldquostartup_templatecrdquo filestatic const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTEDdisconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                        6 Add the following register_btlc1000_callbacks function in startup_templatec Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void) Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks)ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACKBLE_GAP_EVENT_TYPEampapp_gap_handle)if (ble_status = true)printf(nError when Registering ATBTLC1000 callbacks)

                        7 Add the register_btlc1000_callbacks function call prior to start advertisement in theapplication main routineint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Gap Callbacks register_btlc1000_callbacks ( ) Start Advertising process start_advertisement() Register PrimaryIncluded service in case of GATT Server while(true) Write application task

                        8 Add the ble_event_task function call in the project main loop to handle the different incomingevents from ATBTLC1000while(true)ble_event_task()

                        9 Press button ltF7gt to compile the project and verify that no build error appear in the AtmelStudio output window

                        ATBTLC1000Establishing Connection with Central Device

                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 28

                        Figure 3-10 Atmel Studio Output Window

                        10 Click ldquo rdquo to save the project ltCtrl+Sgt

                        11 Click ldquo rdquo to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt and checkcorrect initialization of the ATBTLC1000

                        12 Open the Microchip SmartConnect application on Androidtrade or iOS device13 Press the ltStart Scangt button and pair peripherals by selecting them in the device list (pass key

                        123456)Note 

                        1 Pairing event handling is carried out by ble_managerc Refer toble_pair_key_request_handler() for code implementation The default pass key of123456 is also fixed inside this function This can be changed here

                        Figure 3-11 Console Log Window

                        Note  After peripheral pairing no services information are displayed in Microchip SmartConnectapplication as no service is currently defined and started on peripheral side

                        ATBTLC1000Establishing Connection with Central Device

                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 29

                        4 SettingHandling of Pre-Defined ServiceThe management of services are done in the GATT layer of the ATBTLC1000 ROM coded Bluetooth LowEnergy Stack The GATT transactions are based on high-level nested objects called Profiles Servicesand Characteristics stored in SRAM memory of ATBTLC1000 device This assignment adds the pre-defined service of information service from ASF library

                        Figure 4-1 ATBTLC1000 GATT Layers

                        bull ProfilesProfiles are not available in the Bluetooth Low Energy peripheral they are simply a pre-definedcollection of services that have been compiled by either the Bluetooth SIG (adopted GATT basedprofile) or by the application developer (custom profiles) For example the Heart Rate Profilecombines the Heart Rate Service and the Device Information Service

                        Note  The complete list of officially adopted GATT-based profiles is available on the BluetoothDeveloper Portal

                        bull ServicesA service is a collection of data and associated behaviors which accomplish a particular function orfeature of a device or portions of a device A service may reference other primary or secondaryservices andor a set of characteristics that make up the service Each service distinguishes itselffrom other services by means of a unique numeric ID called as UUID which can be either 16-bit(for officially adopted Bluetooth Low Energy Services) or 128-bit (for custom services)

                        Note  A full list of officially adopted services and their UUID are seen on the Bluetooth DeveloperPortal

                        bull CharacteristicsA characteristic is the lowest level concept in GATT transactions It contains a single data point withdifferent attributes such as notify read or write capabilities Similar to Services each characteristiccan be distinguished by a SIG-defined adopted UUID (16-bit) or custom (128-bit) UUID This UUIDensures interoperability across Bluetooth Low Energy devices The characteristics are important tointeract with in a Bluetooth Low Energy network In addition to standard UUID the custom UUID isused in case of specific application When characteristics with custom UUID are used in a devicethen it will be interoperable only with those devices that support these characteristics with customUUID

                        ATBTLC1000SettingHandling of Pre-Defined Service

                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 30

                        In this assignment the following steps are added to the Host MCU application to set up and handle adevice information service within the ATBTLC1000 module The following steps are added to the startupproject

                        bull Adding device info service component from ASFbull Configuring and loading the service

                        Figure 4-2 Device Information Service

                        41 Adding Device Info Service Component from ASF Wizard to ProjectTo use the ldquoofficially adopted GATT-based profilesrdquo from SIG ASF provides Bluetooth Low Energy servicecomponents including init functions that pre-define services in Host memory

                        Note  Before starting this assignment be sure to follow the steps mentioned in 2 Creating the Projectand Initializing and 3 Establishing Connection with Central Device

                        1 Click ASF gt ASF Wizard2 Search for ldquoBLE-Device Information Servicesrdquo and then click Add

                        ATBTLC1000SettingHandling of Pre-Defined Service

                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 31

                        Figure 4-3 Available Modules

                        3 Now ldquoBLE-Device Information Servicesrdquo (component) appears in ldquoSelected ModulesrdquoFigure 4-4 Selected Modules

                        4 Click Apply to add the component to the projectFigure 4-5 Adding the Modules to Project

                        5 The ldquoDevice Information Servicerdquo component is added to the project and is confirmed bydevice_information folder added in Solution Explorer

                        ATBTLC1000SettingHandling of Pre-Defined Service

                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 32

                        Figure 4-6 Device Information Service Added to Project

                        42 Configuring and Loading Device Information ServiceThe ATBTLC1000 Host driver provides a set of GATT functions that allows storing and updating theservices in ATBTLC1000 memories

                        Prototype at_ble_status_t at_ble_primary_service_define(at_ble_uuid_t uuidat_ble_handle_t service_handleat_ble_included_service_t included_service_listuint16_t included_service_countat_ble_characteristic_t charactristic_listuint16_t charactristic_count)

                        Description Defines a new primary service along with its included services and characteristics inATBTLC1000

                        Parameters

                        bull Uuid [In] ndash primary service UUIDbull service_handle [Out] ndash Service handle is returned herebull included_service_list [In] ndash an array of included service referencesbull included_service_count [In] ndash number of elements in included_service_listbull charactristic_list [InOut] ndash an array of characteristics included in the service this array

                        is updated with respective characteristics handlesbull charactristic_count[In] ndash number of elements in charactristic_list

                        Return Execution Status

                        This function requires an argument as GATT description structure of the service that is implemented Thepreviously added Device Info service component provides Bluetooth Low Energy service middlewareincluding the init functions that predefine the services See below ldquodis_init_servicerdquo from device infoBLE service (device_infohc)

                        Prototype ndash void dis_init_service(dis_gatt_service_handler_t device_info_serv)Description ndash Initialize the device information service handler in the host MCU memory

                        Parameters ndash

                        ATBTLC1000SettingHandling of Pre-Defined Service

                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 33

                        bull device_info_serv [Inout] pointer to device info GATT description handler to beupdated

                        Return None

                        Here is a picture of GATT device info service descriptor definition in Host memory

                        device_info_serv-gtserv_handle = 0device_info_serv-gtserv_uuidtype = AT_BLE_UUID_16device_info_serv-gtserv_uuiduuid[0] = (uint8_t) DIS_SERVICE_UUIDdevice_info_serv-gtserv_uuiduuid[1] = (uint8_t) (DIS_SERVICE_UUID gtgt 8)Characteristic Info for Manufacturer Name Stringdevice_info_serv-gtserv_chars[0]char_val_handle = 0 handle stored here device_info_serv-gtserv_chars[0]uuidtype = AT_BLE_UUID_16device_info_serv-gtserv_chars[0]uuiduuid[0] = (uint8_t) IS_CHAR_MANUFACTURER_NAME_UUID UUID Manufacturer Name String device_info_serv-gtserv_chars[0]uuiduuid[1] = (uint8_t) (DIS_CHAR_MANUFACTURER_NAME_UUID gtgt 8) UUID Manufacturer Name String device_info_serv-gtserv_chars[0]properties = AT_BLE_CHAR_READ Properties memcpy(char_valuemanufacturer_nameDEFAULT_MANUFACTURER_NAMEDIS_CHAR_MANUFACTURER_NAME_INIT_LEN)device_info_serv-gtserv_chars[0]init_value = char_valuemanufacturer_namedevice_info_serv-gtserv_chars[0]value_init_len = DIS_CHAR_MANUFACTURER_NAME_INIT_LENdevice_info_serv-gtserv_chars[0]value_max_len = DIS_CHAR_MANUFACTURER_NAME_MAX_LENif BLE_PAIR_ENABLEdevice_info_serv-gtserv_chars[0]value_permissions = AT_BLE_ATTR_READABLE_REQ_AUTHN_NO_AUTHR permissions elsedevice_info_serv-gtserv_chars[0]value_permissions = AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR permissions endifdevice_info_serv-gtserv_chars[0]user_desc = NULL user defined name device_info_serv-gtserv_chars[0]user_desc_len = 0device_info_serv-gtserv_chars[0]user_desc_max_len = 0device_info_serv-gtserv_chars[0]user_desc_permissions = AT_BLE_ATTR_NO_PERMISSIONS user description permissionsdevice_info_serv-gtserv_chars[0]client_config_permissions = AT_BLE_ATTR_NO_PERMISSIONS client config permissionsdevice_info_serm hdsv-gtserv_chars[0]server_config_permissions = AT_BLE_ATTR_NO_PERMISSIONS server config permissionsdevice_info_serv-gtserv_chars[0]user_desc_handle = 0 user desc handlesdevice_info_serv-gtserv_chars[0]client_config_handle = 0 client config handlesdevice_info_serv-gtserv_chars[0]server_config_handle = 0 server config handlesdevice_info_serv-gtserv_chars[0]presentation_format = NULL presentation format

                        Note  In case of custom service the above definition initialization must be taken care of by thedeveloper

                        421 Procedure to Configure and Load Device Info Service1 Include device info service header file (device_infoh) at the beginning of

                        startup_templatec fileinclude ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehinclude device_infoh

                        2 Define a device info service handler as global in startup_templatec file Serviceshandlers dis_gatt_service_handler_t dis_service_handler

                        ATBTLC1000SettingHandling of Pre-Defined Service

                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 34

                        3 Add dis_init_service and at_ble_primary_service_define functions as called abovethe advertisement start in main routine Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service)dis_init_service (ampdis_service_handler) Define the primary service in the GATT server database if ((dis_primary_service_define (ampdis_service_handler)) = AT_BLE_SUCCESS)printf(Device Information Service definition failed) Start Advertising process start_advertisement()

                        4 Click to save the project ltCtrl+Sgt and compile the project by pressing button ltF7gt5 Verify that no build error appears in Atmel Studio output window

                        Figure 4-7 Atmel Studio Output Window

                        6 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt7 Open ldquoMicrochip SmartConnectrdquo application on Android or iOS device8 Press ltStart Scangt button and connect to peripheral

                        Note  The device name is a characteristic and contains the name of the device This device namecan be read by the central device to know the name of the device in order to differentiate thedevices This is being set using at_ble_device_name_set()API The device name is set bydefault when ble_device_init is called and the value is pre-defined using BLE_DEVICE_NAMEThe device name can also be sent as part of advertisement payload to be same as the oneconfigured in at_ble_adv_data_set() API It is the responsibility of users to keep the devicename set in advertisement payload the same as that configured inat_ble_device_name_set()

                        9 The Service must now be visible after pairing with peripheral under Microchip SmartConnectapplication

                        ATBTLC1000SettingHandling of Pre-Defined Service

                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 35

                        Figure 4-8 Service List in Microchip SmartConnect Application

                        Note  If the pairing of ATBTLC1000 with Microchip Smart connect is not successful then removethe pairing information from mobile by selecting ldquoForget Devicerdquo from the mobile settings Thereason for this is that the mobile app stores the previous pairing information but the ATBTLC1000device lost the previous pairing information due to RESET since it was stored on temporary storage(RAM)

                        10 The serial terminal must display the following log output windowFigure 4-9 Console Log Window

                        ATBTLC1000SettingHandling of Pre-Defined Service

                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 36

                        5 Setting up and Handling Custom ServiceThe previous assignment describes the handling of Bluetooth Low Energy SIG defined device infoservice which is the predefined service available in ASF component This assignment describes thecustom service So the service initialization needs to be implemented In the context of customizedenvironment service the following service description is pushed in ATBTLC1000 memory

                        Figure 5-1 Custom Service

                        Custom Environment Service Description

                        bull UUID type ndash Custom UUID (128-bit)bull UUID ndash 1bc5d5a5-0200-a687-e511-3639c1ba5af0

                        Characteristic 0 (Temperature)

                        bull User Description ndash Temperaturebull UUID type ndash Custom UUID (128-bit)bull UUID ndash 1bc5d5a5-0200-a687-e511-3639d8ba5af0bull Properties ndash Read Notifybull Value permission ndash No authorization requiredbull Client config permission ndash No permissionbull Server config permission ndash No permission

                        Note  In this definition UUIDs are generated randomly Custom servicescharacteristics are free to useany 128-bit UUID less than the base UUID There is no reserved space for vendors to use 16-bit or 32-bitUUIDs

                        With this definition any temperature change is notified to the central The notify mechanism allows thecentral to know when the data changes When notify property of the Client Characteristic ConfigurationDescriptor is enabled by the central and the device writes the new value then this updated value isautomatically sent to the central through a notification The central is not required to send readcharacteristic commands explicitly to the peripheral (GATT server)

                        To setup and handle the custom environment service in ATBTLC1000 module the following steps areadded to the Host MCU application

                        bull Configure and load the custom servicebull Update Temperature characteristic and notify to the central devicebull Receive and handle notification from the Host device

                        ATBTLC1000Setting up and Handling Custom Service

                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 37

                        Figure 5-2 Custom Service Flowchart

                        51 Configuring and Loading the Custom Environment ServiceThe ATBTLC1000 Host driver provides the following set of GATT functions that allows it to push andupdate the service descriptions in the ATBTLC1000 SRAM memory

                        Note  Before starting this assignment be sure to follow the steps mentioned in 2 Creating the Projectand Initializing and 3 Establishing Connection with Central Device

                        Prototype ndashat_ble_status_t at_ble_primary_service_define(at_ble_uuid_t uuidat_ble_handle_t service_handleat_ble_included_service_t included_service_listuint16_t included_service_countat_ble_characteristic_t charactristic_listuint16_t charactristic_count)

                        Description ndash Defines a new primary service along with its included services and characteristics inATBTLC1000 module

                        Parameters

                        bull Uuid [In] ndash primary service UUIDbull service_handle [Out] ndash service handle is returned herebull included_service_list [In] ndash array of included service referencesbull included_service_count [In] ndash number of elements in included_service_listbull charactristic_list [InOut] ndash an array of characteristics included in the service this array

                        is update with respective characteristics handlesbull charactristic_count[In] ndash number of elements in charactristic_list

                        ATBTLC1000Setting up and Handling Custom Service

                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 38

                        Return ndash Execution Status

                        bull Characteristics ndashndash Characteristics definition is done through specific array of following

                        ldquoat_ble_characteristic_trdquo structure instancestypedef structat_ble_handle_t char_val_handle Handler (returned during service initialisation)at_ble_uuid_t uuid Characteristic UUID (type and value)at_ble_char_properties_t propertiesCharac Properties (read write notify)uint8_t init_value initial valueuint16_t value_init_len initial value lengthuint16_t value_max_len value max lengthat_ble_attr_permissions_t value_permissions access authorization and authenticationuint8_t user_desc User descriptionuint16_t user_desc_len User description lengthuint16_t user_desc_max_len User description max lengthat_ble_char_presentation_t presentation_format Presentation formatat_ble_attr_permissions_t user_desc_permissions User description permissionat_ble_attr_permissions_t client_config_permissions client permissionat_ble_attr_permissions_t server_config_permissions server permissionat_ble_handle_t user_desc_handle description handlerat_ble_handle_t client_config_handle Client config handlerat_ble_handle_t server_config_handle Server config handler at_ble_characteristic_t

                        511 Procedure to Configure and Load Custom Environment Service1 Define the following service UUID and characteristic UUID in startup_templatec file

                        define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

                        2 Define the following environment service handler and characteristics variable as global instartup_templatec file Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

                        3 Add the following service initialization function custom_environment_service_init instartup_templatecvoid custom_environment_service_init(void) at_ble_uuid_t environment_service_uuiduint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUIDuint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperatureenvironment_service_characs[0]user_desc_len = 10environment_service_characs[0]user_desc_max_len = 10environment_service_characs[0]uuidtype = AT_BLE_UUID_128memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16)environment_service_characs[0]properties = AT_BLE_CHAR_READ |AT_BLE_CHAR_NOTIFYenvironment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature valueenvironment_service_characs[0]value_permissions =(AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuidampenvironment_service_handlerNULL0environment_service_characs1)=AT_BLE_SUCCESS)printf(n Assignment 41 Failed to Initialize custom environment service)

                        ATBTLC1000Setting up and Handling Custom Service

                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 39

                        elseprintf(n Assignment 41 Initialize custom environment service)

                        4 Declare and implement the following GATT event callback functioncustom_char_changed_app_event in startup_templatec file If a client (central) enablesnotifications for a server the server (peripheral) receives an AT_BLE_CHARACTERISTIC_CHANGEDevent and this event callback is called Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

                        5 Declare and implement the following custom_notification_confirmation_handlerfunction in startup_templatec file Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param)at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )paramif (event_param-gtstatus == AT_BLE_SUCCESS)printf(n Assignment 41Notification Successfully sent over the air) else printf(n Assignment 41Sending Notification over the air failed)return AT_BLE_SUCCESS

                        6 Declare the following GATT server callback structure in startup_templatec file Thisassignment uses two GATT callbacksstatic const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handlercharacteristic_changed = custom_char_changed_app_event

                        7 Add the following register_gatt_server_callbacks function in startup_templatec toregister GATT server callback for notification confirmation event Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks)ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACKBLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle)if (ble_status = true)printf(nError when Registering ATBTLC1000 callbacks)

                        8 Add custom_environment_service_init and register_gatt_server_callbacksfunction calls prior to start advertisement in the application main routine to initialize custom serviceand to register the GATT server callbacksint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()

                        ATBTLC1000Setting up and Handling Custom Service

                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 40

                        endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks() Custom service init custom_environment_service_init ( ) Register Gatt server callbacks register_gatt_server_callbacks ( ) Start Advertising process start_advertisement()while(true)ble_event_task()

                        9 Click to save the project ltCtrl+Sgt

                        10 Compile the project by pressing button ltF7gt11 Verify that no build error appears in the Atmel Studio output window

                        Figure 5-3 Atmel Studio Output Window

                        12 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt13 Open the ldquoMicrochip SmartConnectrdquo application on Android or iOS device14 Connect and pair to the peripheral (pass key 123456)15 Custom service must now be visible after pairing with peripheral under Microchip SmartConnect

                        application

                        ATBTLC1000Setting up and Handling Custom Service

                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 41

                        Figure 5-4 Service List in Microchip SmartConnect Application

                        Note  Custom service is displayed as unknown service in the above figure as this service is not aSIG-defined service

                        Figure 5-5 General Information

                        16 Serial terminal client must display the following Log output

                        ATBTLC1000Setting up and Handling Custom Service

                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 42

                        Figure 5-6 Log Output Window

                        52 Updating the Temperature CharacteristicIn the previous assignment the custom Temperature characteristic is defined with a notify attribute Thistype of attribute requires notification to be sent to central when a new characteristic value is availableThe update of any ldquonotifyrdquo characteristic value is based on following interaction between the Host MCUand the ATBTLC1000Figure 5-7 Characteristic Notification

                        521 Setting a Characteristic Value ( at_ble_characteristic_value_set)Prototype ndashat_ble_status_t at_ble_characteristic_value_setat_ble_handle_t handleuint8_t valueuint16_t len)

                        Description ndash Sets a characteristic value in ATBTLC1000 memory

                        Parameters ndash

                        ATBTLC1000Setting up and Handling Custom Service

                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 43

                        bull handle [inout] ndash Pointer to Characteristic handle to be changedbull value [in] ndash New valuebull len [in] ndash Value length in bytes

                        Return ndash Execution Status

                        522 Sending a Notification (at_ble_notification_send)Prototype ndashat_ble_status_t at_ble_notification_send(at_ble_handle_t conn_handleat_ble_handle_t attr_handle)

                        Description ndash Sends a Notification

                        Parameters ndash

                        bull conn_handle[in] ndash handle of the connection to be notifiedbull attr_handle [in] ndash handle of the attribute originating the notification

                        Return ndash Execution Status

                        523 Sending Temperature Information Once in Every 10 Seconds to Central1 Modify the following ldquotimer_callback_fnrdquo callback function from the startup_templatec

                        filestatic void timer_callback_fn(void)timer_flag = true

                        2 hw_timer_init()in main routine of startup_templatec initializes the hardware timer3 If a client (Central) enables the notifications for a server the server (Peripheral) receives an

                        AT_BLE_CHARACTERISTIC_CHANGED event callback then start the periodic 10 second timer forsending the notification Add the following code in previously definedcustom_char_changed_app_event function Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))timer_flag = falsehw_timer_start(10)printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

                        4 Declare the following Temperature_value global variable in startup_templatec staticuint8_t Temperature_value = 25 as static

                        5 Add the following send_temperature_notification function in startup_templatec tosend temperature every 10 seconds Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++

                        ATBTLC1000Setting up and Handling Custom Service

                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 44

                        if(Temperature_value gt 75)Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set(environment_service_characs[0]char_val_handle(uint8_t )ampTemperature_valuesizeof(Temperature_value))ble_status = at_ble_notification_send(0environment_service_characs[0]char_val_handle)if(ble_status = AT_BLE_SUCCESS)printf(fail to send temperature update notification )

                        6 Add the following code in main routine to send temperature data every 10 secondswhile (1) ble_event_task()if(connected_flag == true ampamp timer_flag == truetimer_flag = falsesend_temperature_notification()

                        7 Click to save the project ltCtrl+Sgt

                        8 Compile the project by pressing the button ltF7gt9 Verify that no build error appears in Atmel Studio output window

                        Figure 5-8 Atmel Studio Output Window

                        10 Click to program the project binary on the L21 Xplained XSTK11 Open ldquoMicrochip SmartConnectrdquo Application on Android or iOS device12 Connect and pair to the peripheral (pass key 123456)13 Click NOTIFY to start the notification14 Temperature information in HEX values must be displayed in Microchip SmartConnect application

                        ATBTLC1000Setting up and Handling Custom Service

                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 45

                        Figure 5-9 Notification Window

                        15 Serial terminal must display the following log outputFigure 5-10 Log Output Window

                        ATBTLC1000Setting up and Handling Custom Service

                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 46

                        6 Appendix A Software Solution - Pre-Defined SvcThe following is the code implementation for handling of pre-defined service done in 4 SettingHandlingof Pre-Defined Service

                        - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehinclude device_infoh

                        volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false Services handlers dis_gatt_service_handler_t dis_service_handler

                        static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

                        void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                        Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                        Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                        static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                        Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void) Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks)

                        ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 47

                        ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                        timer callback function static void timer_callback_fn(void) Add timer callback functionality here

                        void button_cb(void) Add button callback functionality here

                        int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                        Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                        DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks()

                        Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service) dis_init_service(ampdis_service_handler) Define the primary service in the GATT server database if((dis_primary_service_define(ampdis_service_handler)) = AT_BLE_SUCCESS) printf(Device Information Service definition failed)

                        Start Advertising process start_advertisement() while(true) ble_event_task()

                        ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 48

                        7 Appendix B Software Solution - Custom ServiceThe following is the code implementation for handling of pre-defined service done in 5 Setting up andHandling Custom Service

                        - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templateh

                        volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false

                        static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

                        define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0

                        define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

                        Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

                        void custom_environment_service_init(void) at_ble_uuid_t environment_service_uuid uint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUID uint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128 memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperature environment_service_characs[0]user_desc_len = 10 environment_service_characs[0]user_desc_max_len = 10 environment_service_characs[0]uuidtype = AT_BLE_UUID_128 memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16) environment_service_characs[0]properties = AT_BLE_CHAR_READ | AT_BLE_CHAR_NOTIFY environment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature value environment_service_characs[0]value_permissions = (AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuid ampenvironment_service_handlerNULL0 environment_service_characs1)=AT_BLE_SUCCESS) printf(n Assignment 41 Failed to Initialize custom environment service) else printf(n Assignment 41 Initialize custom environment service)

                        Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param) at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )param if (event_param-gtstatus == AT_BLE_SUCCESS) printf(n Assignment 41Notification Successfully sent over the air)

                        ATBTLC1000Appendix B Software Solution - Custom Service

                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 49

                        else printf(n Assignment 41Sending Notification over the air failed) return AT_BLE_SUCCESS

                        static at_ble_status_t custom_char_changed_app_event(void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle -gt char_new_value[0])) timer_flag = false hw_timer_start(10) printf(n Assignment 41Characteristic changed event) return AT_BLE_SUCCESS

                        static const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handler characteristic_changed = custom_char_changed_app_event

                        Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                        void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                        Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                        Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                        static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                        Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void)

                        ATBTLC1000Appendix B Software Solution - Custom Service

                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 50

                        Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                        timer callback function static void timer_callback_fn(void) Add timer callback functionality here timer_flag = true

                        void button_cb(void) Add button callback functionality here

                        static uint8_t Temperature_value = 25

                        Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++ if(Temperature_value gt 75) Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set( environment_service_characs[0]char_val_handle (uint8_t )ampTemperature_value sizeof(Temperature_value)) ble_status = at_ble_notification_send(0 environment_service_characs[0]char_val_handle) if(ble_status = AT_BLE_SUCCESS) printf(fail to send temperature update notification )

                        int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                        Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                        DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register Gap ATBTLC1000 Callbacks register_btlc1000_callbacks()

                        Custom service init custom_environment_service_init()

                        ATBTLC1000Appendix B Software Solution - Custom Service

                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 51

                        Register Gatt server callback register_gatt_server_callbacks()

                        Start Advertising process start_advertisement() while(true) ble_event_task() if(connected_flag == true ampamp timer_flag == true) timer_flag = false send_temperature_notification()

                        ATBTLC1000Appendix B Software Solution - Custom Service

                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 52

                        8 Document Revision HistoryRev B - 42018

                        Section Changes

                        Document Revised contents to match various Bluetooth Low Energy standard versions

                        Rev A - 122017

                        Section Changes

                        Document Initial release

                        ATBTLC1000Document Revision History

                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 53

                        The Microchip Web Site

                        Microchip provides online support via our web site at httpwwwmicrochipcom This web site is used asa means to make files and information easily available to customers Accessible by using your favoriteInternet browser the web site contains the following information

                        bull Product Support ndash Data sheets and errata application notes and sample programs designresources userrsquos guides and hardware support documents latest software releases and archivedsoftware

                        bull General Technical Support ndash Frequently Asked Questions (FAQ) technical support requestsonline discussion groups Microchip consultant program member listing

                        bull Business of Microchip ndash Product selector and ordering guides latest Microchip press releaseslisting of seminars and events listings of Microchip sales offices distributors and factoryrepresentatives

                        Customer Change Notification Service

                        Microchiprsquos customer notification service helps keep customers current on Microchip productsSubscribers will receive e-mail notification whenever there are changes updates revisions or erratarelated to a specified product family or development tool of interest

                        To register access the Microchip web site at httpwwwmicrochipcom Under ldquoSupportrdquo click onldquoCustomer Change Notificationrdquo and follow the registration instructions

                        Customer Support

                        Users of Microchip products can receive assistance through several channels

                        bull Distributor or Representativebull Local Sales Officebull Field Application Engineer (FAE)bull Technical Support

                        Customers should contact their distributor representative or Field Application Engineer (FAE) for supportLocal sales offices are also available to help customers A listing of sales offices and locations is includedin the back of this document

                        Technical support is available through the web site at httpwwwmicrochipcomsupport

                        Microchip Devices Code Protection Feature

                        Note the following details of the code protection feature on Microchip devices

                        bull Microchip products meet the specification contained in their particular Microchip Data Sheetbull Microchip believes that its family of products is one of the most secure families of its kind on the

                        market today when used in the intended manner and under normal conditionsbull There are dishonest and possibly illegal methods used to breach the code protection feature All of

                        these methods to our knowledge require using the Microchip products in a manner outside theoperating specifications contained in Microchiprsquos Data Sheets Most likely the person doing so isengaged in theft of intellectual property

                        bull Microchip is willing to work with the customer who is concerned about the integrity of their code

                        ATBTLC1000

                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 54

                        bull Neither Microchip nor any other semiconductor manufacturer can guarantee the security of theircode Code protection does not mean that we are guaranteeing the product as ldquounbreakablerdquo

                        Code protection is constantly evolving We at Microchip are committed to continuously improving thecode protection features of our products Attempts to break Microchiprsquos code protection feature may be aviolation of the Digital Millennium Copyright Act If such acts allow unauthorized access to your softwareor other copyrighted work you may have a right to sue for relief under that Act

                        Legal Notice

                        Information contained in this publication regarding device applications and the like is provided only foryour convenience and may be superseded by updates It is your responsibility to ensure that yourapplication meets with your specifications MICROCHIP MAKES NO REPRESENTATIONS ORWARRANTIES OF ANY KIND WHETHER EXPRESS OR IMPLIED WRITTEN OR ORAL STATUTORYOR OTHERWISE RELATED TO THE INFORMATION INCLUDING BUT NOT LIMITED TO ITSCONDITION QUALITY PERFORMANCE MERCHANTABILITY OR FITNESS FOR PURPOSEMicrochip disclaims all liability arising from this information and its use Use of Microchip devices in lifesupport andor safety applications is entirely at the buyerrsquos risk and the buyer agrees to defendindemnify and hold harmless Microchip from any and all damages claims suits or expenses resultingfrom such use No licenses are conveyed implicitly or otherwise under any Microchip intellectualproperty rights unless otherwise stated

                        Trademarks

                        The Microchip name and logo the Microchip logo AnyRate AVR AVR logo AVR Freaks BeaconThingsBitCloud CryptoMemory CryptoRF dsPIC FlashFlex flexPWR Heldo JukeBlox KeeLoq KeeLoq logoKleer LANCheck LINK MD maXStylus maXTouch MediaLB megaAVR MOST MOST logo MPLABOptoLyzer PIC picoPower PICSTART PIC32 logo Prochip Designer QTouch RightTouch SAM-BASpyNIC SST SST Logo SuperFlash tinyAVR UNIO and XMEGA are registered trademarks ofMicrochip Technology Incorporated in the USA and other countries

                        ClockWorks The Embedded Control Solutions Company EtherSynch Hyper Speed Control HyperLightLoad IntelliMOS mTouch Precision Edge and Quiet-Wire are registered trademarks of MicrochipTechnology Incorporated in the USA

                        Adjacent Key Suppression AKS Analog-for-the-Digital Age Any Capacitor AnyIn AnyOut BodyComchipKIT chipKIT logo CodeGuard CryptoAuthentication CryptoCompanion CryptoControllerdsPICDEM dsPICDEMnet Dynamic Average Matching DAM ECAN EtherGREEN In-Circuit SerialProgramming ICSP Inter-Chip Connectivity JitterBlocker KleerNet KleerNet logo Mindi MiWimotorBench MPASM MPF MPLAB Certified logo MPLIB MPLINK MultiTRAK NetDetach OmniscientCode Generation PICDEM PICDEMnet PICkit PICtail PureSilicon QMatrix RightTouch logo REALICE Ripple Blocker SAM-ICE Serial Quad IO SMART-IS SQI SuperSwitcher SuperSwitcher II TotalEndurance TSHARC USBCheck VariSense ViewSpan WiperLock Wireless DNA and ZENA aretrademarks of Microchip Technology Incorporated in the USA and other countries

                        SQTP is a service mark of Microchip Technology Incorporated in the USA

                        Silicon Storage Technology is a registered trademark of Microchip Technology Inc in other countries

                        GestIC is a registered trademark of Microchip Technology Germany II GmbH amp Co KG a subsidiary ofMicrochip Technology Inc in other countries

                        All other trademarks mentioned herein are property of their respective companies

                        ATBTLC1000

                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 55

                        copy 2018 Microchip Technology Incorporated Printed in the USA All Rights Reserved

                        ISBN 978-1-5224-2921-0

                        Quality Management System Certified by DNV

                        ISOTS 16949Microchip received ISOTS-169492009 certification for its worldwide headquarters design and waferfabrication facilities in Chandler and Tempe Arizona Gresham Oregon and design centers in Californiaand India The Companyrsquos quality system processes and procedures are for its PICreg MCUs and dsPICreg

                        DSCs KEELOQreg code hopping devices Serial EEPROMs microperipherals nonvolatile memory andanalog products In addition Microchiprsquos quality system for the design and manufacture of developmentsystems is ISO 90012000 certified

                        ATBTLC1000

                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 56

                        AMERICAS ASIAPACIFIC ASIAPACIFIC EUROPECorporate Office2355 West Chandler BlvdChandler AZ 85224-6199Tel 480-792-7200Fax 480-792-7277Technical SupporthttpwwwmicrochipcomsupportWeb AddresswwwmicrochipcomAtlantaDuluth GATel 678-957-9614Fax 678-957-1455Austin TXTel 512-257-3370BostonWestborough MATel 774-760-0087Fax 774-760-0088ChicagoItasca ILTel 630-285-0071Fax 630-285-0075DallasAddison TXTel 972-818-7423Fax 972-818-2924DetroitNovi MITel 248-848-4000Houston TXTel 281-894-5983IndianapolisNoblesville INTel 317-773-8323Fax 317-773-5453Tel 317-536-2380Los AngelesMission Viejo CATel 949-462-9523Fax 949-462-9608Tel 951-273-7800Raleigh NCTel 919-844-7510New York NYTel 631-435-6000San Jose CATel 408-735-9110Tel 408-436-4270Canada - TorontoTel 905-695-1980Fax 905-695-2078

                        Australia - SydneyTel 61-2-9868-6733China - BeijingTel 86-10-8569-7000China - ChengduTel 86-28-8665-5511China - ChongqingTel 86-23-8980-9588China - DongguanTel 86-769-8702-9880China - GuangzhouTel 86-20-8755-8029China - HangzhouTel 86-571-8792-8115China - Hong Kong SARTel 852-2943-5100China - NanjingTel 86-25-8473-2460China - QingdaoTel 86-532-8502-7355China - ShanghaiTel 86-21-3326-8000China - ShenyangTel 86-24-2334-2829China - ShenzhenTel 86-755-8864-2200China - SuzhouTel 86-186-6233-1526China - WuhanTel 86-27-5980-5300China - XianTel 86-29-8833-7252China - XiamenTel 86-592-2388138China - ZhuhaiTel 86-756-3210040

                        India - BangaloreTel 91-80-3090-4444India - New DelhiTel 91-11-4160-8631India - PuneTel 91-20-4121-0141Japan - OsakaTel 81-6-6152-7160Japan - TokyoTel 81-3-6880- 3770Korea - DaeguTel 82-53-744-4301Korea - SeoulTel 82-2-554-7200Malaysia - Kuala LumpurTel 60-3-7651-7906Malaysia - PenangTel 60-4-227-8870Philippines - ManilaTel 63-2-634-9065SingaporeTel 65-6334-8870Taiwan - Hsin ChuTel 886-3-577-8366Taiwan - KaohsiungTel 886-7-213-7830Taiwan - TaipeiTel 886-2-2508-8600Thailand - BangkokTel 66-2-694-1351Vietnam - Ho Chi MinhTel 84-28-5448-2100

                        Austria - WelsTel 43-7242-2244-39Fax 43-7242-2244-393Denmark - CopenhagenTel 45-4450-2828Fax 45-4485-2829Finland - EspooTel 358-9-4520-820France - ParisTel 33-1-69-53-63-20Fax 33-1-69-30-90-79Germany - GarchingTel 49-8931-9700Germany - HaanTel 49-2129-3766400Germany - HeilbronnTel 49-7131-67-3636Germany - KarlsruheTel 49-721-625370Germany - MunichTel 49-89-627-144-0Fax 49-89-627-144-44Germany - RosenheimTel 49-8031-354-560Israel - RarsquoananaTel 972-9-744-7705Italy - MilanTel 39-0331-742611Fax 39-0331-466781Italy - PadovaTel 39-049-7625286Netherlands - DrunenTel 31-416-690399Fax 31-416-690340Norway - TrondheimTel 47-7289-7561Poland - WarsawTel 48-22-3325737Romania - BucharestTel 40-21-407-87-50Spain - MadridTel 34-91-708-08-90Fax 34-91-708-08-91Sweden - GothenbergTel 46-31-704-60-40Sweden - StockholmTel 46-8-5090-4654UK - WokinghamTel 44-118-921-5800Fax 44-118-921-5820

                        Worldwide Sales and Service

                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 57

                        • Introduction
                        • Table of Contents
                        • 1 Getting Started
                          • 11 Software Prerequisites
                            • 111 Installation Steps of Atmel Studio 7
                              • 12 Software Setup
                                • 121 Installation of Microchip SmartConnect application on a Mobile device
                                  • 13 ATBTLC1000 Embedded Firmware
                                  • 14 ATBTLC1000 Host Software API
                                  • 15 Hardware Prerequisites
                                    • 151 SMARTtrade SAM L21 Xplained Pro
                                    • 152 ATBTLC1000ZR Xplained Pro Extension board
                                      • 16 Hardware Setup
                                        • 2 Creating the Project and Initializing
                                          • 21 Creating Project from ASF
                                          • 22 Configuring ASF for ATBTLC1000-ZR
                                          • 23 Compiling and Testing the Project
                                            • 3 Establishing Connection with Central Device
                                              • 31 Configuring and Starting the Advertisement Process
                                                • 311 Flags (AD Type 0x00)
                                                • 312 Available Service UUID (AD Types 0x02 to 0x07)
                                                • 313 Device Name (AD Types 0x08 to 0x09)
                                                  • 3131 Setting the Advertisement Payload (ble_advertisement_data_set)
                                                  • 3132 Starting the Advertisement Process (at_ble_adv_start)
                                                    • 314 Advertisement Process
                                                      • 3141 Starting the Advertisement Process
                                                          • 32 Managing GAP events
                                                            • 321 Handling of Connected and Disconnected GAP Events
                                                                • 4 SettingHandling of Pre-Defined Service
                                                                  • 41 Adding Device Info Service Component from ASF Wizard to Project
                                                                  • 42 Configuring and Loading Device Information Service
                                                                    • 421 Procedure to Configure and Load Device Info Service
                                                                        • 5 Setting up and Handling Custom Service
                                                                          • 51 Configuring and Loading the Custom Environment Service
                                                                            • 511 Procedure to Configure and Load Custom Environment Service
                                                                              • 52 Updating the Temperature Characteristic
                                                                                • 521 Setting a Characteristic Value ( at_ble_characteristic_value_set)
                                                                                • 522 Sending a Notification (at_ble_notification_send)
                                                                                • 523 Sending Temperature Information Once in Every 10 Seconds to Central
                                                                                    • 6 Appendix A Software Solution - Pre-Defined Svc
                                                                                    • 7 Appendix B Software Solution - Custom Service
                                                                                    • 8 Document Revision History
                                                                                    • The Microchip Web Site
                                                                                    • Customer Change Notification Service
                                                                                    • Customer Support
                                                                                    • Microchip Devices Code Protection Feature
                                                                                    • Legal Notice
                                                                                    • Trademarks
                                                                                    • Quality Management System Certified by DNV
                                                                                    • Worldwide Sales and Service

                          Figure 2-2 Advanced Software Framework_New Example Project

                          Note  ATBTLC1000SAMB11 related projects are prefixed with ldquoBLErdquo making it easier to filter theproject in the dialogue box

                          2 Select the appropriate ldquoBLE-Startup Templaterdquo project corresponding to the intended Host MCUXplained Pro board and then press OK button to import the BLE startup template project SelectldquoBLE-Startup Template ndash SAM L21 Xplained Pro SAML21J18Brdquo for this hands-onNote  Rev B XPRO boards can be identified by SAML21J18B silk screen marking below SAML21MCU

                          3 The BLE startup project is now created and loaded in Atmel StudioFigure 2-3 Startup_Template Project

                          ATBTLC1000Creating the Project and Initializing

                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 13

                          Note  The main project routine of ldquoStartup Template projectrdquo already includes host MCU low levelinitialization BLE and ATBTLC1000 initialization The added ASF components in project can beviewed from ldquoASFgtASF Wizardrdquo Select the created project from Project drop down box

                          Figure 2-4 ASF Wizard Window

                          ndash BLE_STACK Platform Interface ndash Core manager of Bluetooth Low Energy Host API Itmanages ATBTLC1000 device initialization GAP and GATT events

                          ndash Timer Driver ndash Task timer functionality by using a Timer Counter (TC) or Timer Counter forControl (TCC) peripheral

                          ndash Console UART ndash Universal Asynchronous ReceiverTransmitter (UART) communication insynchronousblocking mode

                          ndash Generic Board Support ndash Host MCU Board specific initializationndash System Drivers ndash Select MCUrsquos System peripheral drivers These drivers are included by

                          default in ASF projects and manage the clocks and oscillator of the system4 The main routine contains the MCU low level initialization and ATBTLC1000 initialization The

                          following figure illustrates the flowchart of the main routine

                          ATBTLC1000Creating the Project and Initializing

                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 14

                          Figure 2-5 Main Routine Flowchart

                          22 Configuring ASF for ATBTLC1000-ZR1 The default ldquoStartup Template Projectrdquo is configured for ATBTLC1000-MR module with 6-Wire

                          mode2 Navigate to Project properties Project gt Project properties gt Toolchain gt ARMGNU C Compiler gt

                          Symbols3 The ATBTLC1000ZR-XSTK kit uses the ATBTLC1000-ZR110CA module Change symbol

                          BLE_MODULE to BTLC1000_ZR and enable UART_FLOWCONTROL_4WIRE_MODE forATBTLC1000-ZR module as shown in the figure belowFigure 2-6 Startup Template Project Window

                          Note  This configuration change is not required for ATBTLC1000-MR module

                          ATBTLC1000Creating the Project and Initializing

                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 15

                          23 Compiling and Testing the Project

                          1 Click the ldquo rdquo button ltF7gt to compile the project2 Verify that no build error appears in Atmel Studio output window

                          Figure 2-7 Atmel Studio Output Window

                          3 Connect the SAM L21 XPRO to PC (if not already done)4 To access the project properties go to Project gt

                          STARTUP_TEMPLATE_SAML21_XPLAINED_PRO_B1 PropertiesFigure 2-8 Compiling the Project

                          5 In project properties click the Tool tab and select the EDBG of SAM L21 Xplained Pro board asdebuggerprogrammerFigure 2-9 Selection of DebuggerProgrammer

                          6 Open any Terminal application (for example TeraTerm) Select the COM port enumerated on thePC and set the following parameters

                          ndash EDBG associated COM Port (Check Windows Device Manager)

                          ATBTLC1000Creating the Project and Initializing

                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 16

                          ndash Baudrate 115200ndash Parity Nonendash One Stop bitndash Enable Hardware Flow Control

                          7 Click to save the project ltCtrl+Sgt

                          8 Click rdquo to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt9 The initialization of the ATBTLC1000ZR module must return the Bluetooth Device Address and

                          Address typeFigure 2-10 Console Log Window

                          Note 1 If initialization fails make sure to verify the hardware configuration is aligned with the

                          description refer to 16 Hardware Setup2 The initialization of ATBTLC1000 takes few seconds due to patch download process

                          ATBTLC1000Creating the Project and Initializing

                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 17

                          3 Establishing Connection with Central DeviceThe Bluetooth Low Energy connectivity is added to the application that is used to connect with theBluetooth Low Energy central The first step is about the management of Bluetooth connection with acentral device When using ATBTLC1000 device this process is managed by dedicated API function callsassociated with ATBTLC1000 events handling

                          The interaction between Host MCU ATBTLC1000 and Bluetooth Low Energy central during connectionestablishment is as follows

                          Figure 3-1 Establishing Connection with Central Device

                          On host MCU side the management of the Bluetooth connection is performed through three main steps1 GAP callback registration2 Advertisement configuration3 ATBTLC1000 event handling

                          In the existing project main routine the integration of these steps are highlighted in red in the followingflowchart

                          ATBTLC1000Establishing Connection with Central Device

                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 18

                          Figure 3-2 Main Routine Flow Chart

                          31 Configuring and Starting the Advertisement ProcessThe Bluetooth Low Energy devices transmit advertisement packets to show their presence to nearbydevices The advertisement packet is sent periodically at a time interval defined by variableldquoadvintervalrdquo defined in Bluetooth SIG specification To avoid any collision with other wireless networksuch as Wi-Fireg a channel change is performed for each advertisement packet sent (data frequencyhopping) as illustrated in the following figureFigure 3-3 Advertisement Process

                          During advertisement the payload structure to be sent differs from application to application and is set byusing encapsulated packet data unit type information (PDU_TYPE)

                          ATBTLC1000Establishing Connection with Central Device

                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 19

                          Figure 3-4 PDU Advertising

                          The following table lists the different PDU types used according to device role

                          Advertising event types (PDU_TYPE) Broadcaster Observer Peripheral Central

                          Connectible undirected event (ADV_IND) Excluded Excluded Mandatory Excluded

                          Connectible directed event(ADV_DIRECT_IND) Excluded Excluded Optional Excluded

                          Non-connectible undirected event(ADV_NONCONN_IND) Mandatory Excluded Optional Excluded

                          Scannable undirected event (ADV_SCAN_IND) Optional Excluded Optional Excluded

                          As our device acts as a Bluetooth Low Energy peripheral the connectable undirected event (ADV_IND)advertising type is used See the following description about the ADV_IND advertisement packetFigure 3-5 ADV_IND Advertisement Packet

                          The ADV_IND payload contains different Advertisement Data types (AD0 - ADn) which provide specificinformation to the central device such as device short name Tx power level and list of availableservices UUIDs The number of advertisement data types that can be added to the advertisementpayload are limited by the advertisement payload size of 31 octets

                          Following is a list of advertisement data types that are commonly found in ADV_IND payload

                          ATBTLC1000Establishing Connection with Central Device

                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 20

                          311 Flags (AD Type 0x00)The flags describe the basic device capability such as BLE support BLE discoverable mode BREDRsupport and simultaneous BRED

                          312 Available Service UUID (AD Types 0x02 to 0x07)The Bluetooth Low Energy advertisement payloads are limited to 31 bytes Therefore only two 128-bitUUID values can be added to the payload For this purpose the specific AD types describe the length ofthe advertised UUID and provide information as to whether the payload contains a incompletecompletelist of UUID supported by the GATT server

                          bull 0x02 - Incomplete list of 16-bit UUIDs (adopted GATT services)bull 0x03 - Complete list of 16-bit UUIDs (adopted GATT services)bull 0x06 - Incomplete list of 128-bit UUIDs (custom GATT services)bull 0x07 - Complete list of 128-bit UUIDs (custom GATT services)

                          Note  When a 16-bit UUID is transmitted only the unique 2-byte value is sent The client knows that it isrequired to be injected into the base UUID For example the Health Thermometer Service is assigned as0x1809 so its equivalent UUID is 00001809-0000-1000-8000-00805F9B34FB

                          313 Device Name (AD Types 0x08 to 0x09)This AD type field is used to advertise the Local name of device in the network The Local name datatype value indicates if the name is complete or shortened If the name is shortened the complete namecan be read after the connection is established

                          bull 0x08 - Shortened Local Namebull 0x09 - Complete Local Name

                          Note 1 A shortened name contains only continuous characters from the beginning of the full name For

                          example if the device name is BT_Device_Name then the shortened name can beBT_Device or BT_Dev

                          2 Complete data type list are available at httpswwwbluetoothcomspecificationsassigned-numbersgeneric-access-profile

                          For management of advertisement process and cover the different configurations specified by SIG theATBTLC1000 Host driver provides the two functions elaborated in the following sections

                          In the application use these two functions to setup the following ADV_IN type payloadFigure 3-6 ADV_IN Type Payload Process

                          ATBTLC1000Establishing Connection with Central Device

                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 21

                          3131 Setting the Advertisement Payload (ble_advertisement_data_set)Prototype ndashat_ble_status_t at_ble_adv_data_set (uint8_t const const adv_datauint8_t adv_data_lenuint8_t const const scan_resp_datauint8_t scan_response_data_len)

                          Description ndash Set clear or update the advertisement and scan response data

                          Parameters ndash

                          bull adv_data ndash Raw data to be placed in advertisement packetbull adv_data_len ndash Data length for adv_data Max size 28 bytes (3 bytes are reserved to set

                          advertising AD type flags based on the selected Advertising mode and the user is not required toconfigure AD type flags in the advertisement payload)

                          bull scan_resp_data ndash Raw data to be placed in the scan response packet If NULL no changes aremade to the current scan response packet data

                          bull scan_response_data_len ndash Data length for scan_resp_data Max size 31 bytes

                          Return ndash Execution Status

                          This function requires a parameter raw adv_data to be sent to central Following is an example of itsdefinition

                          static uint8_t adv_data[] = 0x11 AD1 length = 170x03 AD1 Type = Complete list of 128-bit UUIDs0x1b0xc50xd50xa50x020x000xa60x87 AD1 = UUID MSBs0xe50x110x360x390xc00xba0x5a0xf00x0A AD2 Length = 100x09 AD2 Type = Complete local NamelsquoMrsquorsquoyrsquorsquo_rsquorsquoDrsquorsquoErsquorsquoVrsquo AD2 = ldquoMy_DEVrdquo

                          3132 Starting the Advertisement Process (at_ble_adv_start)Prototype ndashat_ble_status_t at_ble_adv_start (at_ble_adv_type_t typeat_ble_adv_mode_t modeat_ble_addr_t peer_addrat_ble_filter_type_t filtereduint16_t intervaluint16_t timeoutbool disable_randomness)

                          Description ndash Start advertisement process

                          Parameters ndash

                          bull type ndash Advertising type to be used can bendash AT_BLE_ADV_TYPE_UNDIRECTEDndash AT_BLE_ADV_TYPE_DIRECTEDndash AT_BLE_ADV_TYPE_SCANNABLE_UNDIRECTEDndash AT_BLE_ADV_TYPE_NONCONN_UNDIRECTEDndash AT_BLE_ADV_TYPE_DIRECTED_LDCndash AT_BLE_ADV_TYPE_SCAN_RESPONSE

                          bull mode ndash Advertising mode to be used can be

                          ATBTLC1000Establishing Connection with Central Device

                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 22

                          ndash AT_BLE_ADV_NON_DISCOVERABLEndash AT_BLE_ADV_GEN_DISCOVERABLEndash AT_BLE_ADV_LIM_DISCOVERABLEndash AT_BLE_ADV_BROADCASTER_MODE

                          bull peer_addr ndash Specify peer address when advertising type is AT_BLE_ADV_TYPE_DIRECTEDbull filtered ndash

                          ndash AT_BLE_ADV_FP_ANY ndash Allow scan and connection requests from anyonendash AT_BLE_ADV_FP_FILTER_SCANREQ ndash Allow scan request from White List devices onlyndash AT_BLE_ADV_FP_FILTER_CONNREQ ndash Allow connection request from White List devices

                          onlyndash AT_BLE_ADV_FP_FILTER_BOTH ndash Allow scan and connection requests from White List

                          devices onlybull interval ndash Advertisement interval (in 0625 ms units)bull timeout ndash Advertising timeout between 0x0001 and 0x028F in scale of seconds This parameter

                          must be set to 0 if type equals AT_BLE_ADV_TYPE_DIRECTEDbull disable_randomness ndash When disabled advertisements are performed at the exact interval

                          without adding random 10 ms tempo

                          Return ndash Execution Status

                          314 Advertisement ProcessIn this assignment the advertisement process is performed in the following configuration

                          bull Undirected (Type AT_BLE_ADV_TYPE_UNDIRECTED)bull Discoverable (Mode AT_BLE_ADV_GEN_DISCOVERABLE)bull No peer Address (peer_addr = NULL)bull No filtering (filtered = AT_BLE_ADV_FP_ANY)bull Advertisement interval 1s (interval = 1600)bull Maximum timeout (timeout 655)bull Randomness enabled (disable_randomness = FALSE)

                          3141 Starting the Advertisement Process1 Open startup_templatec file2 Declare the following ble_status global variable in startup_templatec as volatile

                          include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehvolatile at_ble_status_t ble_status

                          3 Declare the following adv_data global variable in startup_templatec as staticstatic uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD)0x09 AD2 Type = Complete local Name

                          ATBTLC1000Establishing Connection with Central Device

                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 23

                          My_SENS AD2 = ldquoMy_SENSrdquo

                          Note 1 The name of the device is to be changed (AD2 field)2 According to the new name AD2 length must be adapted to new AD2 content

                          4 Add the following start_advertisement function in startup_templatec prototype for thefunction void start_advertisement (void) also this can be added to avoid warningsvoid start_advertisement (void)printf(n Assignment 21 Start Advertisement)Set advertisement datable_status = at_ble_adv_data_set(adv_datasizeof(adv_data)NULL0)Start Advertisementble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550)if(ble_status = AT_BLE_SUCCESS)printf(n Failed to start advertisement)

                          5 Start the advertisement process by adding the following highlighted code to the application mainroutineint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Start Advertising process start_advertisement() Register PrimaryIncluded service in case of GATT Server while(true) Write application task

                          6 Click to save the project ltCtrl+Sgt

                          7 Click button to compile the project ltF7gt8 Verify that no build error appears in Atmel Studio output window

                          Figure 3-7 Atmel Studio Output Window

                          ATBTLC1000Establishing Connection with Central Device

                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 24

                          9 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt10 Open Microchip SmartConnect Application on Android or iOS device and tap START SCAN button

                          Note  The device must appear in Microchip SmartConnect Application

                          Figure 3-8 Microchip SmartConnect Application

                          11 Terminal must display the following Log outputFigure 3-9 Log Output Window

                          32 Managing GAP eventsThe management of the Bluetooth connection at the host MCU level is done through reception andhandling of events reported by the ATBTLC1000 These events are generated by ATBTLC1000 GAPGATT and L2CAP layers to notify the host about the ongoing Bluetooth interaction with other devices inits vicinity

                          ATBTLC1000Establishing Connection with Central Device

                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 25

                          To manage events coming from the ATBTLC1000 module the host driver must provide able_mgr_events_callback_handler function that allows registration of application callback functionto be executed on each event reported by the ATBTLC1000 module

                          Prototype ndashbool ble_mgr_events_callback_handler(ble_mgr_event_cb_t event_cb_typeble_mgr_event_t event_typeconst voidble_event_handler)

                          Description ndash Used by ProfileServiceApplication to register the Bluetooth Low Energy eventsrsquocallbacks

                          Parameters ndash

                          event_cb_type ndash types of actions to perform on callbacks can be either

                          REGISTER_CALL_BACK or

                          UNREGISTER_CALL_BACKevent_type ndash Any one of the event types can be used

                          BLE_GAP_EVENT_TYPEBLE_GATT_CLIENT_EVENT_TYPEBLE_GATT_SERVER_EVENT_TYPEBLE_L2CAP_EVENT_TYPEBLE_GATT_HTPT_EVENT_TYPEBLE_DTM_EVENT_TYPEBLE_CUSTOM_EVENT_TYPEble_event_handler ndash pointer to handler list

                          Structure ble_gap_event_cb_t defines the GAP callbacks Similarly structuresble_gatt_client_event_cb_t and ble_gatt_server_event_cb_t define the callbacks of GATTevents

                          typedef struct ble_gap_event_cb BLE Undefined events received from ATBTLC1000 which is not handled in Libraryble_event_callback_t undefined BLE scan information contains the peer device scan information Refer ref at_ble_scan_info_tble_event_callback_t scan_info Once the BLE scan timeout or scan stop triggers the scan report event Refer ref at_ble_scan_report_tble_event_callback_t scan_report Advertisement complete event Refer ref at_ble_adv_cmp_evt_tble_event_callback_t advt_cmp Advertisement report in case of advertisement stopped due to advertisement timeout Refer ref at_ble_adv_report_tble_event_callback_t adv_report BLE device own random address changed event Refer ref at_ble_rand_addr_changed_tble_event_callback_t rand_addr_changed BLE connected event device connected to peer device Refer ref at_ble_connected_tble_event_callback_t connected BLE disconnected event device disconnected from peer device Refer ref at_ble_disconnected_tble_event_callback_t disconnected Connection parameter update done on peer device and own device Refer ref at_ble_conn_param_update_done_t

                          ATBTLC1000Establishing Connection with Central Device

                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 26

                          ble_event_callback_t conn_parameter_update_done Connection parameter update request from peer device Refer ref at_ble_conn_param_update_request_tble_event_callback_t conn_param_update_request Pair complete event as part of end of pairing process Refer ref at_ble_pair_done_tble_event_callback_t pair_done Pair request event from Central device Refer ref at_ble_pair_request_tble_event_callback_t pair_request Slave security request received from peer Peripheral device Refer ref at_ble_slave_sec_request_tble_event_callback_t slave_sec_request Pair Key request event from Peer central device Refer ref at_ble_pair_key_request_tble_event_callback_t pair_key_request encryption request comes from the peer device Needs to supply the bonding information which is stored earlier ref at_ble_encryption_request_tble_event_callback_t encryption_request encryption status changed event received from SMP once the encryption is started ref at_ble_encryption_status_changed_tble_event_callback_t encryption_status_changed Event triggered once the Resolve random address is resolved using supplied IRKs ref at_ble_resolv_rand_addr_status_tble_event_callback_t resolv_rand_addr_status Event is triggered once the connection signature information indication received ref at_ble_sign_counter_tble_event_callback_t sign_counters_ind Peer attribute information indication received Event ref at_ble_peer_att_info_ind_tble_event_callback_t peer_att_info_ind Peer device channel map received indication ref at_ble_channel_map_tble_event_callback_t con_channel_map_indble_gap_event_cb_t

                          Note  Callback definition is application-specific If the application layer requires a specific event callbackthen the specific member of the structure is to be assigned with the address of the callback function

                          In this assignment two callback functions on Connected and Disconnected GAP events are usedThis allows the application to restart the advertising process on Disconnect manage connectioninformation and startstop of sensor data update

                          321 Handling of Connected and Disconnected GAP Events1 Open the startup_templatec file2 Define the following software flags as global variables in startup_templatec file volatile

                          bool timer_flag = false and volatile bool connected_flag = false3 Declare and implement the following ble_connected_cb function in the

                          startup_templatec file Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param)printf(n Assignment 22 Application connected )connected_flag = trueALL_UNUSED(param)return AT_BLE_SUCCESS

                          4 Declare and implement the following ble_disconnected_cb function instartup_templatec file Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param)printf(n Assignment 22 Application disconnected )connected_flag = falsestart_advertisement()ALL_UNUSED(param)return AT_BLE_SUCCESS

                          ATBTLC1000Establishing Connection with Central Device

                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 27

                          5 Declare the following static GAP callback structure in ldquostartup_templatecrdquo filestatic const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTEDdisconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                          6 Add the following register_btlc1000_callbacks function in startup_templatec Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void) Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks)ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACKBLE_GAP_EVENT_TYPEampapp_gap_handle)if (ble_status = true)printf(nError when Registering ATBTLC1000 callbacks)

                          7 Add the register_btlc1000_callbacks function call prior to start advertisement in theapplication main routineint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Gap Callbacks register_btlc1000_callbacks ( ) Start Advertising process start_advertisement() Register PrimaryIncluded service in case of GATT Server while(true) Write application task

                          8 Add the ble_event_task function call in the project main loop to handle the different incomingevents from ATBTLC1000while(true)ble_event_task()

                          9 Press button ltF7gt to compile the project and verify that no build error appear in the AtmelStudio output window

                          ATBTLC1000Establishing Connection with Central Device

                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 28

                          Figure 3-10 Atmel Studio Output Window

                          10 Click ldquo rdquo to save the project ltCtrl+Sgt

                          11 Click ldquo rdquo to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt and checkcorrect initialization of the ATBTLC1000

                          12 Open the Microchip SmartConnect application on Androidtrade or iOS device13 Press the ltStart Scangt button and pair peripherals by selecting them in the device list (pass key

                          123456)Note 

                          1 Pairing event handling is carried out by ble_managerc Refer toble_pair_key_request_handler() for code implementation The default pass key of123456 is also fixed inside this function This can be changed here

                          Figure 3-11 Console Log Window

                          Note  After peripheral pairing no services information are displayed in Microchip SmartConnectapplication as no service is currently defined and started on peripheral side

                          ATBTLC1000Establishing Connection with Central Device

                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 29

                          4 SettingHandling of Pre-Defined ServiceThe management of services are done in the GATT layer of the ATBTLC1000 ROM coded Bluetooth LowEnergy Stack The GATT transactions are based on high-level nested objects called Profiles Servicesand Characteristics stored in SRAM memory of ATBTLC1000 device This assignment adds the pre-defined service of information service from ASF library

                          Figure 4-1 ATBTLC1000 GATT Layers

                          bull ProfilesProfiles are not available in the Bluetooth Low Energy peripheral they are simply a pre-definedcollection of services that have been compiled by either the Bluetooth SIG (adopted GATT basedprofile) or by the application developer (custom profiles) For example the Heart Rate Profilecombines the Heart Rate Service and the Device Information Service

                          Note  The complete list of officially adopted GATT-based profiles is available on the BluetoothDeveloper Portal

                          bull ServicesA service is a collection of data and associated behaviors which accomplish a particular function orfeature of a device or portions of a device A service may reference other primary or secondaryservices andor a set of characteristics that make up the service Each service distinguishes itselffrom other services by means of a unique numeric ID called as UUID which can be either 16-bit(for officially adopted Bluetooth Low Energy Services) or 128-bit (for custom services)

                          Note  A full list of officially adopted services and their UUID are seen on the Bluetooth DeveloperPortal

                          bull CharacteristicsA characteristic is the lowest level concept in GATT transactions It contains a single data point withdifferent attributes such as notify read or write capabilities Similar to Services each characteristiccan be distinguished by a SIG-defined adopted UUID (16-bit) or custom (128-bit) UUID This UUIDensures interoperability across Bluetooth Low Energy devices The characteristics are important tointeract with in a Bluetooth Low Energy network In addition to standard UUID the custom UUID isused in case of specific application When characteristics with custom UUID are used in a devicethen it will be interoperable only with those devices that support these characteristics with customUUID

                          ATBTLC1000SettingHandling of Pre-Defined Service

                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 30

                          In this assignment the following steps are added to the Host MCU application to set up and handle adevice information service within the ATBTLC1000 module The following steps are added to the startupproject

                          bull Adding device info service component from ASFbull Configuring and loading the service

                          Figure 4-2 Device Information Service

                          41 Adding Device Info Service Component from ASF Wizard to ProjectTo use the ldquoofficially adopted GATT-based profilesrdquo from SIG ASF provides Bluetooth Low Energy servicecomponents including init functions that pre-define services in Host memory

                          Note  Before starting this assignment be sure to follow the steps mentioned in 2 Creating the Projectand Initializing and 3 Establishing Connection with Central Device

                          1 Click ASF gt ASF Wizard2 Search for ldquoBLE-Device Information Servicesrdquo and then click Add

                          ATBTLC1000SettingHandling of Pre-Defined Service

                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 31

                          Figure 4-3 Available Modules

                          3 Now ldquoBLE-Device Information Servicesrdquo (component) appears in ldquoSelected ModulesrdquoFigure 4-4 Selected Modules

                          4 Click Apply to add the component to the projectFigure 4-5 Adding the Modules to Project

                          5 The ldquoDevice Information Servicerdquo component is added to the project and is confirmed bydevice_information folder added in Solution Explorer

                          ATBTLC1000SettingHandling of Pre-Defined Service

                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 32

                          Figure 4-6 Device Information Service Added to Project

                          42 Configuring and Loading Device Information ServiceThe ATBTLC1000 Host driver provides a set of GATT functions that allows storing and updating theservices in ATBTLC1000 memories

                          Prototype at_ble_status_t at_ble_primary_service_define(at_ble_uuid_t uuidat_ble_handle_t service_handleat_ble_included_service_t included_service_listuint16_t included_service_countat_ble_characteristic_t charactristic_listuint16_t charactristic_count)

                          Description Defines a new primary service along with its included services and characteristics inATBTLC1000

                          Parameters

                          bull Uuid [In] ndash primary service UUIDbull service_handle [Out] ndash Service handle is returned herebull included_service_list [In] ndash an array of included service referencesbull included_service_count [In] ndash number of elements in included_service_listbull charactristic_list [InOut] ndash an array of characteristics included in the service this array

                          is updated with respective characteristics handlesbull charactristic_count[In] ndash number of elements in charactristic_list

                          Return Execution Status

                          This function requires an argument as GATT description structure of the service that is implemented Thepreviously added Device Info service component provides Bluetooth Low Energy service middlewareincluding the init functions that predefine the services See below ldquodis_init_servicerdquo from device infoBLE service (device_infohc)

                          Prototype ndash void dis_init_service(dis_gatt_service_handler_t device_info_serv)Description ndash Initialize the device information service handler in the host MCU memory

                          Parameters ndash

                          ATBTLC1000SettingHandling of Pre-Defined Service

                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 33

                          bull device_info_serv [Inout] pointer to device info GATT description handler to beupdated

                          Return None

                          Here is a picture of GATT device info service descriptor definition in Host memory

                          device_info_serv-gtserv_handle = 0device_info_serv-gtserv_uuidtype = AT_BLE_UUID_16device_info_serv-gtserv_uuiduuid[0] = (uint8_t) DIS_SERVICE_UUIDdevice_info_serv-gtserv_uuiduuid[1] = (uint8_t) (DIS_SERVICE_UUID gtgt 8)Characteristic Info for Manufacturer Name Stringdevice_info_serv-gtserv_chars[0]char_val_handle = 0 handle stored here device_info_serv-gtserv_chars[0]uuidtype = AT_BLE_UUID_16device_info_serv-gtserv_chars[0]uuiduuid[0] = (uint8_t) IS_CHAR_MANUFACTURER_NAME_UUID UUID Manufacturer Name String device_info_serv-gtserv_chars[0]uuiduuid[1] = (uint8_t) (DIS_CHAR_MANUFACTURER_NAME_UUID gtgt 8) UUID Manufacturer Name String device_info_serv-gtserv_chars[0]properties = AT_BLE_CHAR_READ Properties memcpy(char_valuemanufacturer_nameDEFAULT_MANUFACTURER_NAMEDIS_CHAR_MANUFACTURER_NAME_INIT_LEN)device_info_serv-gtserv_chars[0]init_value = char_valuemanufacturer_namedevice_info_serv-gtserv_chars[0]value_init_len = DIS_CHAR_MANUFACTURER_NAME_INIT_LENdevice_info_serv-gtserv_chars[0]value_max_len = DIS_CHAR_MANUFACTURER_NAME_MAX_LENif BLE_PAIR_ENABLEdevice_info_serv-gtserv_chars[0]value_permissions = AT_BLE_ATTR_READABLE_REQ_AUTHN_NO_AUTHR permissions elsedevice_info_serv-gtserv_chars[0]value_permissions = AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR permissions endifdevice_info_serv-gtserv_chars[0]user_desc = NULL user defined name device_info_serv-gtserv_chars[0]user_desc_len = 0device_info_serv-gtserv_chars[0]user_desc_max_len = 0device_info_serv-gtserv_chars[0]user_desc_permissions = AT_BLE_ATTR_NO_PERMISSIONS user description permissionsdevice_info_serv-gtserv_chars[0]client_config_permissions = AT_BLE_ATTR_NO_PERMISSIONS client config permissionsdevice_info_serm hdsv-gtserv_chars[0]server_config_permissions = AT_BLE_ATTR_NO_PERMISSIONS server config permissionsdevice_info_serv-gtserv_chars[0]user_desc_handle = 0 user desc handlesdevice_info_serv-gtserv_chars[0]client_config_handle = 0 client config handlesdevice_info_serv-gtserv_chars[0]server_config_handle = 0 server config handlesdevice_info_serv-gtserv_chars[0]presentation_format = NULL presentation format

                          Note  In case of custom service the above definition initialization must be taken care of by thedeveloper

                          421 Procedure to Configure and Load Device Info Service1 Include device info service header file (device_infoh) at the beginning of

                          startup_templatec fileinclude ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehinclude device_infoh

                          2 Define a device info service handler as global in startup_templatec file Serviceshandlers dis_gatt_service_handler_t dis_service_handler

                          ATBTLC1000SettingHandling of Pre-Defined Service

                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 34

                          3 Add dis_init_service and at_ble_primary_service_define functions as called abovethe advertisement start in main routine Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service)dis_init_service (ampdis_service_handler) Define the primary service in the GATT server database if ((dis_primary_service_define (ampdis_service_handler)) = AT_BLE_SUCCESS)printf(Device Information Service definition failed) Start Advertising process start_advertisement()

                          4 Click to save the project ltCtrl+Sgt and compile the project by pressing button ltF7gt5 Verify that no build error appears in Atmel Studio output window

                          Figure 4-7 Atmel Studio Output Window

                          6 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt7 Open ldquoMicrochip SmartConnectrdquo application on Android or iOS device8 Press ltStart Scangt button and connect to peripheral

                          Note  The device name is a characteristic and contains the name of the device This device namecan be read by the central device to know the name of the device in order to differentiate thedevices This is being set using at_ble_device_name_set()API The device name is set bydefault when ble_device_init is called and the value is pre-defined using BLE_DEVICE_NAMEThe device name can also be sent as part of advertisement payload to be same as the oneconfigured in at_ble_adv_data_set() API It is the responsibility of users to keep the devicename set in advertisement payload the same as that configured inat_ble_device_name_set()

                          9 The Service must now be visible after pairing with peripheral under Microchip SmartConnectapplication

                          ATBTLC1000SettingHandling of Pre-Defined Service

                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 35

                          Figure 4-8 Service List in Microchip SmartConnect Application

                          Note  If the pairing of ATBTLC1000 with Microchip Smart connect is not successful then removethe pairing information from mobile by selecting ldquoForget Devicerdquo from the mobile settings Thereason for this is that the mobile app stores the previous pairing information but the ATBTLC1000device lost the previous pairing information due to RESET since it was stored on temporary storage(RAM)

                          10 The serial terminal must display the following log output windowFigure 4-9 Console Log Window

                          ATBTLC1000SettingHandling of Pre-Defined Service

                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 36

                          5 Setting up and Handling Custom ServiceThe previous assignment describes the handling of Bluetooth Low Energy SIG defined device infoservice which is the predefined service available in ASF component This assignment describes thecustom service So the service initialization needs to be implemented In the context of customizedenvironment service the following service description is pushed in ATBTLC1000 memory

                          Figure 5-1 Custom Service

                          Custom Environment Service Description

                          bull UUID type ndash Custom UUID (128-bit)bull UUID ndash 1bc5d5a5-0200-a687-e511-3639c1ba5af0

                          Characteristic 0 (Temperature)

                          bull User Description ndash Temperaturebull UUID type ndash Custom UUID (128-bit)bull UUID ndash 1bc5d5a5-0200-a687-e511-3639d8ba5af0bull Properties ndash Read Notifybull Value permission ndash No authorization requiredbull Client config permission ndash No permissionbull Server config permission ndash No permission

                          Note  In this definition UUIDs are generated randomly Custom servicescharacteristics are free to useany 128-bit UUID less than the base UUID There is no reserved space for vendors to use 16-bit or 32-bitUUIDs

                          With this definition any temperature change is notified to the central The notify mechanism allows thecentral to know when the data changes When notify property of the Client Characteristic ConfigurationDescriptor is enabled by the central and the device writes the new value then this updated value isautomatically sent to the central through a notification The central is not required to send readcharacteristic commands explicitly to the peripheral (GATT server)

                          To setup and handle the custom environment service in ATBTLC1000 module the following steps areadded to the Host MCU application

                          bull Configure and load the custom servicebull Update Temperature characteristic and notify to the central devicebull Receive and handle notification from the Host device

                          ATBTLC1000Setting up and Handling Custom Service

                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 37

                          Figure 5-2 Custom Service Flowchart

                          51 Configuring and Loading the Custom Environment ServiceThe ATBTLC1000 Host driver provides the following set of GATT functions that allows it to push andupdate the service descriptions in the ATBTLC1000 SRAM memory

                          Note  Before starting this assignment be sure to follow the steps mentioned in 2 Creating the Projectand Initializing and 3 Establishing Connection with Central Device

                          Prototype ndashat_ble_status_t at_ble_primary_service_define(at_ble_uuid_t uuidat_ble_handle_t service_handleat_ble_included_service_t included_service_listuint16_t included_service_countat_ble_characteristic_t charactristic_listuint16_t charactristic_count)

                          Description ndash Defines a new primary service along with its included services and characteristics inATBTLC1000 module

                          Parameters

                          bull Uuid [In] ndash primary service UUIDbull service_handle [Out] ndash service handle is returned herebull included_service_list [In] ndash array of included service referencesbull included_service_count [In] ndash number of elements in included_service_listbull charactristic_list [InOut] ndash an array of characteristics included in the service this array

                          is update with respective characteristics handlesbull charactristic_count[In] ndash number of elements in charactristic_list

                          ATBTLC1000Setting up and Handling Custom Service

                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 38

                          Return ndash Execution Status

                          bull Characteristics ndashndash Characteristics definition is done through specific array of following

                          ldquoat_ble_characteristic_trdquo structure instancestypedef structat_ble_handle_t char_val_handle Handler (returned during service initialisation)at_ble_uuid_t uuid Characteristic UUID (type and value)at_ble_char_properties_t propertiesCharac Properties (read write notify)uint8_t init_value initial valueuint16_t value_init_len initial value lengthuint16_t value_max_len value max lengthat_ble_attr_permissions_t value_permissions access authorization and authenticationuint8_t user_desc User descriptionuint16_t user_desc_len User description lengthuint16_t user_desc_max_len User description max lengthat_ble_char_presentation_t presentation_format Presentation formatat_ble_attr_permissions_t user_desc_permissions User description permissionat_ble_attr_permissions_t client_config_permissions client permissionat_ble_attr_permissions_t server_config_permissions server permissionat_ble_handle_t user_desc_handle description handlerat_ble_handle_t client_config_handle Client config handlerat_ble_handle_t server_config_handle Server config handler at_ble_characteristic_t

                          511 Procedure to Configure and Load Custom Environment Service1 Define the following service UUID and characteristic UUID in startup_templatec file

                          define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

                          2 Define the following environment service handler and characteristics variable as global instartup_templatec file Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

                          3 Add the following service initialization function custom_environment_service_init instartup_templatecvoid custom_environment_service_init(void) at_ble_uuid_t environment_service_uuiduint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUIDuint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperatureenvironment_service_characs[0]user_desc_len = 10environment_service_characs[0]user_desc_max_len = 10environment_service_characs[0]uuidtype = AT_BLE_UUID_128memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16)environment_service_characs[0]properties = AT_BLE_CHAR_READ |AT_BLE_CHAR_NOTIFYenvironment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature valueenvironment_service_characs[0]value_permissions =(AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuidampenvironment_service_handlerNULL0environment_service_characs1)=AT_BLE_SUCCESS)printf(n Assignment 41 Failed to Initialize custom environment service)

                          ATBTLC1000Setting up and Handling Custom Service

                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 39

                          elseprintf(n Assignment 41 Initialize custom environment service)

                          4 Declare and implement the following GATT event callback functioncustom_char_changed_app_event in startup_templatec file If a client (central) enablesnotifications for a server the server (peripheral) receives an AT_BLE_CHARACTERISTIC_CHANGEDevent and this event callback is called Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

                          5 Declare and implement the following custom_notification_confirmation_handlerfunction in startup_templatec file Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param)at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )paramif (event_param-gtstatus == AT_BLE_SUCCESS)printf(n Assignment 41Notification Successfully sent over the air) else printf(n Assignment 41Sending Notification over the air failed)return AT_BLE_SUCCESS

                          6 Declare the following GATT server callback structure in startup_templatec file Thisassignment uses two GATT callbacksstatic const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handlercharacteristic_changed = custom_char_changed_app_event

                          7 Add the following register_gatt_server_callbacks function in startup_templatec toregister GATT server callback for notification confirmation event Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks)ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACKBLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle)if (ble_status = true)printf(nError when Registering ATBTLC1000 callbacks)

                          8 Add custom_environment_service_init and register_gatt_server_callbacksfunction calls prior to start advertisement in the application main routine to initialize custom serviceand to register the GATT server callbacksint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()

                          ATBTLC1000Setting up and Handling Custom Service

                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 40

                          endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks() Custom service init custom_environment_service_init ( ) Register Gatt server callbacks register_gatt_server_callbacks ( ) Start Advertising process start_advertisement()while(true)ble_event_task()

                          9 Click to save the project ltCtrl+Sgt

                          10 Compile the project by pressing button ltF7gt11 Verify that no build error appears in the Atmel Studio output window

                          Figure 5-3 Atmel Studio Output Window

                          12 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt13 Open the ldquoMicrochip SmartConnectrdquo application on Android or iOS device14 Connect and pair to the peripheral (pass key 123456)15 Custom service must now be visible after pairing with peripheral under Microchip SmartConnect

                          application

                          ATBTLC1000Setting up and Handling Custom Service

                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 41

                          Figure 5-4 Service List in Microchip SmartConnect Application

                          Note  Custom service is displayed as unknown service in the above figure as this service is not aSIG-defined service

                          Figure 5-5 General Information

                          16 Serial terminal client must display the following Log output

                          ATBTLC1000Setting up and Handling Custom Service

                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 42

                          Figure 5-6 Log Output Window

                          52 Updating the Temperature CharacteristicIn the previous assignment the custom Temperature characteristic is defined with a notify attribute Thistype of attribute requires notification to be sent to central when a new characteristic value is availableThe update of any ldquonotifyrdquo characteristic value is based on following interaction between the Host MCUand the ATBTLC1000Figure 5-7 Characteristic Notification

                          521 Setting a Characteristic Value ( at_ble_characteristic_value_set)Prototype ndashat_ble_status_t at_ble_characteristic_value_setat_ble_handle_t handleuint8_t valueuint16_t len)

                          Description ndash Sets a characteristic value in ATBTLC1000 memory

                          Parameters ndash

                          ATBTLC1000Setting up and Handling Custom Service

                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 43

                          bull handle [inout] ndash Pointer to Characteristic handle to be changedbull value [in] ndash New valuebull len [in] ndash Value length in bytes

                          Return ndash Execution Status

                          522 Sending a Notification (at_ble_notification_send)Prototype ndashat_ble_status_t at_ble_notification_send(at_ble_handle_t conn_handleat_ble_handle_t attr_handle)

                          Description ndash Sends a Notification

                          Parameters ndash

                          bull conn_handle[in] ndash handle of the connection to be notifiedbull attr_handle [in] ndash handle of the attribute originating the notification

                          Return ndash Execution Status

                          523 Sending Temperature Information Once in Every 10 Seconds to Central1 Modify the following ldquotimer_callback_fnrdquo callback function from the startup_templatec

                          filestatic void timer_callback_fn(void)timer_flag = true

                          2 hw_timer_init()in main routine of startup_templatec initializes the hardware timer3 If a client (Central) enables the notifications for a server the server (Peripheral) receives an

                          AT_BLE_CHARACTERISTIC_CHANGED event callback then start the periodic 10 second timer forsending the notification Add the following code in previously definedcustom_char_changed_app_event function Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))timer_flag = falsehw_timer_start(10)printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

                          4 Declare the following Temperature_value global variable in startup_templatec staticuint8_t Temperature_value = 25 as static

                          5 Add the following send_temperature_notification function in startup_templatec tosend temperature every 10 seconds Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++

                          ATBTLC1000Setting up and Handling Custom Service

                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 44

                          if(Temperature_value gt 75)Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set(environment_service_characs[0]char_val_handle(uint8_t )ampTemperature_valuesizeof(Temperature_value))ble_status = at_ble_notification_send(0environment_service_characs[0]char_val_handle)if(ble_status = AT_BLE_SUCCESS)printf(fail to send temperature update notification )

                          6 Add the following code in main routine to send temperature data every 10 secondswhile (1) ble_event_task()if(connected_flag == true ampamp timer_flag == truetimer_flag = falsesend_temperature_notification()

                          7 Click to save the project ltCtrl+Sgt

                          8 Compile the project by pressing the button ltF7gt9 Verify that no build error appears in Atmel Studio output window

                          Figure 5-8 Atmel Studio Output Window

                          10 Click to program the project binary on the L21 Xplained XSTK11 Open ldquoMicrochip SmartConnectrdquo Application on Android or iOS device12 Connect and pair to the peripheral (pass key 123456)13 Click NOTIFY to start the notification14 Temperature information in HEX values must be displayed in Microchip SmartConnect application

                          ATBTLC1000Setting up and Handling Custom Service

                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 45

                          Figure 5-9 Notification Window

                          15 Serial terminal must display the following log outputFigure 5-10 Log Output Window

                          ATBTLC1000Setting up and Handling Custom Service

                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 46

                          6 Appendix A Software Solution - Pre-Defined SvcThe following is the code implementation for handling of pre-defined service done in 4 SettingHandlingof Pre-Defined Service

                          - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehinclude device_infoh

                          volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false Services handlers dis_gatt_service_handler_t dis_service_handler

                          static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

                          void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                          Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                          Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                          static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                          Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void) Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks)

                          ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 47

                          ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                          timer callback function static void timer_callback_fn(void) Add timer callback functionality here

                          void button_cb(void) Add button callback functionality here

                          int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                          Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                          DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks()

                          Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service) dis_init_service(ampdis_service_handler) Define the primary service in the GATT server database if((dis_primary_service_define(ampdis_service_handler)) = AT_BLE_SUCCESS) printf(Device Information Service definition failed)

                          Start Advertising process start_advertisement() while(true) ble_event_task()

                          ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 48

                          7 Appendix B Software Solution - Custom ServiceThe following is the code implementation for handling of pre-defined service done in 5 Setting up andHandling Custom Service

                          - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templateh

                          volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false

                          static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

                          define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0

                          define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

                          Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

                          void custom_environment_service_init(void) at_ble_uuid_t environment_service_uuid uint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUID uint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128 memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperature environment_service_characs[0]user_desc_len = 10 environment_service_characs[0]user_desc_max_len = 10 environment_service_characs[0]uuidtype = AT_BLE_UUID_128 memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16) environment_service_characs[0]properties = AT_BLE_CHAR_READ | AT_BLE_CHAR_NOTIFY environment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature value environment_service_characs[0]value_permissions = (AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuid ampenvironment_service_handlerNULL0 environment_service_characs1)=AT_BLE_SUCCESS) printf(n Assignment 41 Failed to Initialize custom environment service) else printf(n Assignment 41 Initialize custom environment service)

                          Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param) at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )param if (event_param-gtstatus == AT_BLE_SUCCESS) printf(n Assignment 41Notification Successfully sent over the air)

                          ATBTLC1000Appendix B Software Solution - Custom Service

                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 49

                          else printf(n Assignment 41Sending Notification over the air failed) return AT_BLE_SUCCESS

                          static at_ble_status_t custom_char_changed_app_event(void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle -gt char_new_value[0])) timer_flag = false hw_timer_start(10) printf(n Assignment 41Characteristic changed event) return AT_BLE_SUCCESS

                          static const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handler characteristic_changed = custom_char_changed_app_event

                          Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                          void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                          Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                          Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                          static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                          Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void)

                          ATBTLC1000Appendix B Software Solution - Custom Service

                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 50

                          Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                          timer callback function static void timer_callback_fn(void) Add timer callback functionality here timer_flag = true

                          void button_cb(void) Add button callback functionality here

                          static uint8_t Temperature_value = 25

                          Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++ if(Temperature_value gt 75) Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set( environment_service_characs[0]char_val_handle (uint8_t )ampTemperature_value sizeof(Temperature_value)) ble_status = at_ble_notification_send(0 environment_service_characs[0]char_val_handle) if(ble_status = AT_BLE_SUCCESS) printf(fail to send temperature update notification )

                          int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                          Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                          DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register Gap ATBTLC1000 Callbacks register_btlc1000_callbacks()

                          Custom service init custom_environment_service_init()

                          ATBTLC1000Appendix B Software Solution - Custom Service

                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 51

                          Register Gatt server callback register_gatt_server_callbacks()

                          Start Advertising process start_advertisement() while(true) ble_event_task() if(connected_flag == true ampamp timer_flag == true) timer_flag = false send_temperature_notification()

                          ATBTLC1000Appendix B Software Solution - Custom Service

                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 52

                          8 Document Revision HistoryRev B - 42018

                          Section Changes

                          Document Revised contents to match various Bluetooth Low Energy standard versions

                          Rev A - 122017

                          Section Changes

                          Document Initial release

                          ATBTLC1000Document Revision History

                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 53

                          The Microchip Web Site

                          Microchip provides online support via our web site at httpwwwmicrochipcom This web site is used asa means to make files and information easily available to customers Accessible by using your favoriteInternet browser the web site contains the following information

                          bull Product Support ndash Data sheets and errata application notes and sample programs designresources userrsquos guides and hardware support documents latest software releases and archivedsoftware

                          bull General Technical Support ndash Frequently Asked Questions (FAQ) technical support requestsonline discussion groups Microchip consultant program member listing

                          bull Business of Microchip ndash Product selector and ordering guides latest Microchip press releaseslisting of seminars and events listings of Microchip sales offices distributors and factoryrepresentatives

                          Customer Change Notification Service

                          Microchiprsquos customer notification service helps keep customers current on Microchip productsSubscribers will receive e-mail notification whenever there are changes updates revisions or erratarelated to a specified product family or development tool of interest

                          To register access the Microchip web site at httpwwwmicrochipcom Under ldquoSupportrdquo click onldquoCustomer Change Notificationrdquo and follow the registration instructions

                          Customer Support

                          Users of Microchip products can receive assistance through several channels

                          bull Distributor or Representativebull Local Sales Officebull Field Application Engineer (FAE)bull Technical Support

                          Customers should contact their distributor representative or Field Application Engineer (FAE) for supportLocal sales offices are also available to help customers A listing of sales offices and locations is includedin the back of this document

                          Technical support is available through the web site at httpwwwmicrochipcomsupport

                          Microchip Devices Code Protection Feature

                          Note the following details of the code protection feature on Microchip devices

                          bull Microchip products meet the specification contained in their particular Microchip Data Sheetbull Microchip believes that its family of products is one of the most secure families of its kind on the

                          market today when used in the intended manner and under normal conditionsbull There are dishonest and possibly illegal methods used to breach the code protection feature All of

                          these methods to our knowledge require using the Microchip products in a manner outside theoperating specifications contained in Microchiprsquos Data Sheets Most likely the person doing so isengaged in theft of intellectual property

                          bull Microchip is willing to work with the customer who is concerned about the integrity of their code

                          ATBTLC1000

                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 54

                          bull Neither Microchip nor any other semiconductor manufacturer can guarantee the security of theircode Code protection does not mean that we are guaranteeing the product as ldquounbreakablerdquo

                          Code protection is constantly evolving We at Microchip are committed to continuously improving thecode protection features of our products Attempts to break Microchiprsquos code protection feature may be aviolation of the Digital Millennium Copyright Act If such acts allow unauthorized access to your softwareor other copyrighted work you may have a right to sue for relief under that Act

                          Legal Notice

                          Information contained in this publication regarding device applications and the like is provided only foryour convenience and may be superseded by updates It is your responsibility to ensure that yourapplication meets with your specifications MICROCHIP MAKES NO REPRESENTATIONS ORWARRANTIES OF ANY KIND WHETHER EXPRESS OR IMPLIED WRITTEN OR ORAL STATUTORYOR OTHERWISE RELATED TO THE INFORMATION INCLUDING BUT NOT LIMITED TO ITSCONDITION QUALITY PERFORMANCE MERCHANTABILITY OR FITNESS FOR PURPOSEMicrochip disclaims all liability arising from this information and its use Use of Microchip devices in lifesupport andor safety applications is entirely at the buyerrsquos risk and the buyer agrees to defendindemnify and hold harmless Microchip from any and all damages claims suits or expenses resultingfrom such use No licenses are conveyed implicitly or otherwise under any Microchip intellectualproperty rights unless otherwise stated

                          Trademarks

                          The Microchip name and logo the Microchip logo AnyRate AVR AVR logo AVR Freaks BeaconThingsBitCloud CryptoMemory CryptoRF dsPIC FlashFlex flexPWR Heldo JukeBlox KeeLoq KeeLoq logoKleer LANCheck LINK MD maXStylus maXTouch MediaLB megaAVR MOST MOST logo MPLABOptoLyzer PIC picoPower PICSTART PIC32 logo Prochip Designer QTouch RightTouch SAM-BASpyNIC SST SST Logo SuperFlash tinyAVR UNIO and XMEGA are registered trademarks ofMicrochip Technology Incorporated in the USA and other countries

                          ClockWorks The Embedded Control Solutions Company EtherSynch Hyper Speed Control HyperLightLoad IntelliMOS mTouch Precision Edge and Quiet-Wire are registered trademarks of MicrochipTechnology Incorporated in the USA

                          Adjacent Key Suppression AKS Analog-for-the-Digital Age Any Capacitor AnyIn AnyOut BodyComchipKIT chipKIT logo CodeGuard CryptoAuthentication CryptoCompanion CryptoControllerdsPICDEM dsPICDEMnet Dynamic Average Matching DAM ECAN EtherGREEN In-Circuit SerialProgramming ICSP Inter-Chip Connectivity JitterBlocker KleerNet KleerNet logo Mindi MiWimotorBench MPASM MPF MPLAB Certified logo MPLIB MPLINK MultiTRAK NetDetach OmniscientCode Generation PICDEM PICDEMnet PICkit PICtail PureSilicon QMatrix RightTouch logo REALICE Ripple Blocker SAM-ICE Serial Quad IO SMART-IS SQI SuperSwitcher SuperSwitcher II TotalEndurance TSHARC USBCheck VariSense ViewSpan WiperLock Wireless DNA and ZENA aretrademarks of Microchip Technology Incorporated in the USA and other countries

                          SQTP is a service mark of Microchip Technology Incorporated in the USA

                          Silicon Storage Technology is a registered trademark of Microchip Technology Inc in other countries

                          GestIC is a registered trademark of Microchip Technology Germany II GmbH amp Co KG a subsidiary ofMicrochip Technology Inc in other countries

                          All other trademarks mentioned herein are property of their respective companies

                          ATBTLC1000

                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 55

                          copy 2018 Microchip Technology Incorporated Printed in the USA All Rights Reserved

                          ISBN 978-1-5224-2921-0

                          Quality Management System Certified by DNV

                          ISOTS 16949Microchip received ISOTS-169492009 certification for its worldwide headquarters design and waferfabrication facilities in Chandler and Tempe Arizona Gresham Oregon and design centers in Californiaand India The Companyrsquos quality system processes and procedures are for its PICreg MCUs and dsPICreg

                          DSCs KEELOQreg code hopping devices Serial EEPROMs microperipherals nonvolatile memory andanalog products In addition Microchiprsquos quality system for the design and manufacture of developmentsystems is ISO 90012000 certified

                          ATBTLC1000

                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 56

                          AMERICAS ASIAPACIFIC ASIAPACIFIC EUROPECorporate Office2355 West Chandler BlvdChandler AZ 85224-6199Tel 480-792-7200Fax 480-792-7277Technical SupporthttpwwwmicrochipcomsupportWeb AddresswwwmicrochipcomAtlantaDuluth GATel 678-957-9614Fax 678-957-1455Austin TXTel 512-257-3370BostonWestborough MATel 774-760-0087Fax 774-760-0088ChicagoItasca ILTel 630-285-0071Fax 630-285-0075DallasAddison TXTel 972-818-7423Fax 972-818-2924DetroitNovi MITel 248-848-4000Houston TXTel 281-894-5983IndianapolisNoblesville INTel 317-773-8323Fax 317-773-5453Tel 317-536-2380Los AngelesMission Viejo CATel 949-462-9523Fax 949-462-9608Tel 951-273-7800Raleigh NCTel 919-844-7510New York NYTel 631-435-6000San Jose CATel 408-735-9110Tel 408-436-4270Canada - TorontoTel 905-695-1980Fax 905-695-2078

                          Australia - SydneyTel 61-2-9868-6733China - BeijingTel 86-10-8569-7000China - ChengduTel 86-28-8665-5511China - ChongqingTel 86-23-8980-9588China - DongguanTel 86-769-8702-9880China - GuangzhouTel 86-20-8755-8029China - HangzhouTel 86-571-8792-8115China - Hong Kong SARTel 852-2943-5100China - NanjingTel 86-25-8473-2460China - QingdaoTel 86-532-8502-7355China - ShanghaiTel 86-21-3326-8000China - ShenyangTel 86-24-2334-2829China - ShenzhenTel 86-755-8864-2200China - SuzhouTel 86-186-6233-1526China - WuhanTel 86-27-5980-5300China - XianTel 86-29-8833-7252China - XiamenTel 86-592-2388138China - ZhuhaiTel 86-756-3210040

                          India - BangaloreTel 91-80-3090-4444India - New DelhiTel 91-11-4160-8631India - PuneTel 91-20-4121-0141Japan - OsakaTel 81-6-6152-7160Japan - TokyoTel 81-3-6880- 3770Korea - DaeguTel 82-53-744-4301Korea - SeoulTel 82-2-554-7200Malaysia - Kuala LumpurTel 60-3-7651-7906Malaysia - PenangTel 60-4-227-8870Philippines - ManilaTel 63-2-634-9065SingaporeTel 65-6334-8870Taiwan - Hsin ChuTel 886-3-577-8366Taiwan - KaohsiungTel 886-7-213-7830Taiwan - TaipeiTel 886-2-2508-8600Thailand - BangkokTel 66-2-694-1351Vietnam - Ho Chi MinhTel 84-28-5448-2100

                          Austria - WelsTel 43-7242-2244-39Fax 43-7242-2244-393Denmark - CopenhagenTel 45-4450-2828Fax 45-4485-2829Finland - EspooTel 358-9-4520-820France - ParisTel 33-1-69-53-63-20Fax 33-1-69-30-90-79Germany - GarchingTel 49-8931-9700Germany - HaanTel 49-2129-3766400Germany - HeilbronnTel 49-7131-67-3636Germany - KarlsruheTel 49-721-625370Germany - MunichTel 49-89-627-144-0Fax 49-89-627-144-44Germany - RosenheimTel 49-8031-354-560Israel - RarsquoananaTel 972-9-744-7705Italy - MilanTel 39-0331-742611Fax 39-0331-466781Italy - PadovaTel 39-049-7625286Netherlands - DrunenTel 31-416-690399Fax 31-416-690340Norway - TrondheimTel 47-7289-7561Poland - WarsawTel 48-22-3325737Romania - BucharestTel 40-21-407-87-50Spain - MadridTel 34-91-708-08-90Fax 34-91-708-08-91Sweden - GothenbergTel 46-31-704-60-40Sweden - StockholmTel 46-8-5090-4654UK - WokinghamTel 44-118-921-5800Fax 44-118-921-5820

                          Worldwide Sales and Service

                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 57

                          • Introduction
                          • Table of Contents
                          • 1 Getting Started
                            • 11 Software Prerequisites
                              • 111 Installation Steps of Atmel Studio 7
                                • 12 Software Setup
                                  • 121 Installation of Microchip SmartConnect application on a Mobile device
                                    • 13 ATBTLC1000 Embedded Firmware
                                    • 14 ATBTLC1000 Host Software API
                                    • 15 Hardware Prerequisites
                                      • 151 SMARTtrade SAM L21 Xplained Pro
                                      • 152 ATBTLC1000ZR Xplained Pro Extension board
                                        • 16 Hardware Setup
                                          • 2 Creating the Project and Initializing
                                            • 21 Creating Project from ASF
                                            • 22 Configuring ASF for ATBTLC1000-ZR
                                            • 23 Compiling and Testing the Project
                                              • 3 Establishing Connection with Central Device
                                                • 31 Configuring and Starting the Advertisement Process
                                                  • 311 Flags (AD Type 0x00)
                                                  • 312 Available Service UUID (AD Types 0x02 to 0x07)
                                                  • 313 Device Name (AD Types 0x08 to 0x09)
                                                    • 3131 Setting the Advertisement Payload (ble_advertisement_data_set)
                                                    • 3132 Starting the Advertisement Process (at_ble_adv_start)
                                                      • 314 Advertisement Process
                                                        • 3141 Starting the Advertisement Process
                                                            • 32 Managing GAP events
                                                              • 321 Handling of Connected and Disconnected GAP Events
                                                                  • 4 SettingHandling of Pre-Defined Service
                                                                    • 41 Adding Device Info Service Component from ASF Wizard to Project
                                                                    • 42 Configuring and Loading Device Information Service
                                                                      • 421 Procedure to Configure and Load Device Info Service
                                                                          • 5 Setting up and Handling Custom Service
                                                                            • 51 Configuring and Loading the Custom Environment Service
                                                                              • 511 Procedure to Configure and Load Custom Environment Service
                                                                                • 52 Updating the Temperature Characteristic
                                                                                  • 521 Setting a Characteristic Value ( at_ble_characteristic_value_set)
                                                                                  • 522 Sending a Notification (at_ble_notification_send)
                                                                                  • 523 Sending Temperature Information Once in Every 10 Seconds to Central
                                                                                      • 6 Appendix A Software Solution - Pre-Defined Svc
                                                                                      • 7 Appendix B Software Solution - Custom Service
                                                                                      • 8 Document Revision History
                                                                                      • The Microchip Web Site
                                                                                      • Customer Change Notification Service
                                                                                      • Customer Support
                                                                                      • Microchip Devices Code Protection Feature
                                                                                      • Legal Notice
                                                                                      • Trademarks
                                                                                      • Quality Management System Certified by DNV
                                                                                      • Worldwide Sales and Service

                            Note  The main project routine of ldquoStartup Template projectrdquo already includes host MCU low levelinitialization BLE and ATBTLC1000 initialization The added ASF components in project can beviewed from ldquoASFgtASF Wizardrdquo Select the created project from Project drop down box

                            Figure 2-4 ASF Wizard Window

                            ndash BLE_STACK Platform Interface ndash Core manager of Bluetooth Low Energy Host API Itmanages ATBTLC1000 device initialization GAP and GATT events

                            ndash Timer Driver ndash Task timer functionality by using a Timer Counter (TC) or Timer Counter forControl (TCC) peripheral

                            ndash Console UART ndash Universal Asynchronous ReceiverTransmitter (UART) communication insynchronousblocking mode

                            ndash Generic Board Support ndash Host MCU Board specific initializationndash System Drivers ndash Select MCUrsquos System peripheral drivers These drivers are included by

                            default in ASF projects and manage the clocks and oscillator of the system4 The main routine contains the MCU low level initialization and ATBTLC1000 initialization The

                            following figure illustrates the flowchart of the main routine

                            ATBTLC1000Creating the Project and Initializing

                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 14

                            Figure 2-5 Main Routine Flowchart

                            22 Configuring ASF for ATBTLC1000-ZR1 The default ldquoStartup Template Projectrdquo is configured for ATBTLC1000-MR module with 6-Wire

                            mode2 Navigate to Project properties Project gt Project properties gt Toolchain gt ARMGNU C Compiler gt

                            Symbols3 The ATBTLC1000ZR-XSTK kit uses the ATBTLC1000-ZR110CA module Change symbol

                            BLE_MODULE to BTLC1000_ZR and enable UART_FLOWCONTROL_4WIRE_MODE forATBTLC1000-ZR module as shown in the figure belowFigure 2-6 Startup Template Project Window

                            Note  This configuration change is not required for ATBTLC1000-MR module

                            ATBTLC1000Creating the Project and Initializing

                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 15

                            23 Compiling and Testing the Project

                            1 Click the ldquo rdquo button ltF7gt to compile the project2 Verify that no build error appears in Atmel Studio output window

                            Figure 2-7 Atmel Studio Output Window

                            3 Connect the SAM L21 XPRO to PC (if not already done)4 To access the project properties go to Project gt

                            STARTUP_TEMPLATE_SAML21_XPLAINED_PRO_B1 PropertiesFigure 2-8 Compiling the Project

                            5 In project properties click the Tool tab and select the EDBG of SAM L21 Xplained Pro board asdebuggerprogrammerFigure 2-9 Selection of DebuggerProgrammer

                            6 Open any Terminal application (for example TeraTerm) Select the COM port enumerated on thePC and set the following parameters

                            ndash EDBG associated COM Port (Check Windows Device Manager)

                            ATBTLC1000Creating the Project and Initializing

                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 16

                            ndash Baudrate 115200ndash Parity Nonendash One Stop bitndash Enable Hardware Flow Control

                            7 Click to save the project ltCtrl+Sgt

                            8 Click rdquo to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt9 The initialization of the ATBTLC1000ZR module must return the Bluetooth Device Address and

                            Address typeFigure 2-10 Console Log Window

                            Note 1 If initialization fails make sure to verify the hardware configuration is aligned with the

                            description refer to 16 Hardware Setup2 The initialization of ATBTLC1000 takes few seconds due to patch download process

                            ATBTLC1000Creating the Project and Initializing

                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 17

                            3 Establishing Connection with Central DeviceThe Bluetooth Low Energy connectivity is added to the application that is used to connect with theBluetooth Low Energy central The first step is about the management of Bluetooth connection with acentral device When using ATBTLC1000 device this process is managed by dedicated API function callsassociated with ATBTLC1000 events handling

                            The interaction between Host MCU ATBTLC1000 and Bluetooth Low Energy central during connectionestablishment is as follows

                            Figure 3-1 Establishing Connection with Central Device

                            On host MCU side the management of the Bluetooth connection is performed through three main steps1 GAP callback registration2 Advertisement configuration3 ATBTLC1000 event handling

                            In the existing project main routine the integration of these steps are highlighted in red in the followingflowchart

                            ATBTLC1000Establishing Connection with Central Device

                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 18

                            Figure 3-2 Main Routine Flow Chart

                            31 Configuring and Starting the Advertisement ProcessThe Bluetooth Low Energy devices transmit advertisement packets to show their presence to nearbydevices The advertisement packet is sent periodically at a time interval defined by variableldquoadvintervalrdquo defined in Bluetooth SIG specification To avoid any collision with other wireless networksuch as Wi-Fireg a channel change is performed for each advertisement packet sent (data frequencyhopping) as illustrated in the following figureFigure 3-3 Advertisement Process

                            During advertisement the payload structure to be sent differs from application to application and is set byusing encapsulated packet data unit type information (PDU_TYPE)

                            ATBTLC1000Establishing Connection with Central Device

                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 19

                            Figure 3-4 PDU Advertising

                            The following table lists the different PDU types used according to device role

                            Advertising event types (PDU_TYPE) Broadcaster Observer Peripheral Central

                            Connectible undirected event (ADV_IND) Excluded Excluded Mandatory Excluded

                            Connectible directed event(ADV_DIRECT_IND) Excluded Excluded Optional Excluded

                            Non-connectible undirected event(ADV_NONCONN_IND) Mandatory Excluded Optional Excluded

                            Scannable undirected event (ADV_SCAN_IND) Optional Excluded Optional Excluded

                            As our device acts as a Bluetooth Low Energy peripheral the connectable undirected event (ADV_IND)advertising type is used See the following description about the ADV_IND advertisement packetFigure 3-5 ADV_IND Advertisement Packet

                            The ADV_IND payload contains different Advertisement Data types (AD0 - ADn) which provide specificinformation to the central device such as device short name Tx power level and list of availableservices UUIDs The number of advertisement data types that can be added to the advertisementpayload are limited by the advertisement payload size of 31 octets

                            Following is a list of advertisement data types that are commonly found in ADV_IND payload

                            ATBTLC1000Establishing Connection with Central Device

                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 20

                            311 Flags (AD Type 0x00)The flags describe the basic device capability such as BLE support BLE discoverable mode BREDRsupport and simultaneous BRED

                            312 Available Service UUID (AD Types 0x02 to 0x07)The Bluetooth Low Energy advertisement payloads are limited to 31 bytes Therefore only two 128-bitUUID values can be added to the payload For this purpose the specific AD types describe the length ofthe advertised UUID and provide information as to whether the payload contains a incompletecompletelist of UUID supported by the GATT server

                            bull 0x02 - Incomplete list of 16-bit UUIDs (adopted GATT services)bull 0x03 - Complete list of 16-bit UUIDs (adopted GATT services)bull 0x06 - Incomplete list of 128-bit UUIDs (custom GATT services)bull 0x07 - Complete list of 128-bit UUIDs (custom GATT services)

                            Note  When a 16-bit UUID is transmitted only the unique 2-byte value is sent The client knows that it isrequired to be injected into the base UUID For example the Health Thermometer Service is assigned as0x1809 so its equivalent UUID is 00001809-0000-1000-8000-00805F9B34FB

                            313 Device Name (AD Types 0x08 to 0x09)This AD type field is used to advertise the Local name of device in the network The Local name datatype value indicates if the name is complete or shortened If the name is shortened the complete namecan be read after the connection is established

                            bull 0x08 - Shortened Local Namebull 0x09 - Complete Local Name

                            Note 1 A shortened name contains only continuous characters from the beginning of the full name For

                            example if the device name is BT_Device_Name then the shortened name can beBT_Device or BT_Dev

                            2 Complete data type list are available at httpswwwbluetoothcomspecificationsassigned-numbersgeneric-access-profile

                            For management of advertisement process and cover the different configurations specified by SIG theATBTLC1000 Host driver provides the two functions elaborated in the following sections

                            In the application use these two functions to setup the following ADV_IN type payloadFigure 3-6 ADV_IN Type Payload Process

                            ATBTLC1000Establishing Connection with Central Device

                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 21

                            3131 Setting the Advertisement Payload (ble_advertisement_data_set)Prototype ndashat_ble_status_t at_ble_adv_data_set (uint8_t const const adv_datauint8_t adv_data_lenuint8_t const const scan_resp_datauint8_t scan_response_data_len)

                            Description ndash Set clear or update the advertisement and scan response data

                            Parameters ndash

                            bull adv_data ndash Raw data to be placed in advertisement packetbull adv_data_len ndash Data length for adv_data Max size 28 bytes (3 bytes are reserved to set

                            advertising AD type flags based on the selected Advertising mode and the user is not required toconfigure AD type flags in the advertisement payload)

                            bull scan_resp_data ndash Raw data to be placed in the scan response packet If NULL no changes aremade to the current scan response packet data

                            bull scan_response_data_len ndash Data length for scan_resp_data Max size 31 bytes

                            Return ndash Execution Status

                            This function requires a parameter raw adv_data to be sent to central Following is an example of itsdefinition

                            static uint8_t adv_data[] = 0x11 AD1 length = 170x03 AD1 Type = Complete list of 128-bit UUIDs0x1b0xc50xd50xa50x020x000xa60x87 AD1 = UUID MSBs0xe50x110x360x390xc00xba0x5a0xf00x0A AD2 Length = 100x09 AD2 Type = Complete local NamelsquoMrsquorsquoyrsquorsquo_rsquorsquoDrsquorsquoErsquorsquoVrsquo AD2 = ldquoMy_DEVrdquo

                            3132 Starting the Advertisement Process (at_ble_adv_start)Prototype ndashat_ble_status_t at_ble_adv_start (at_ble_adv_type_t typeat_ble_adv_mode_t modeat_ble_addr_t peer_addrat_ble_filter_type_t filtereduint16_t intervaluint16_t timeoutbool disable_randomness)

                            Description ndash Start advertisement process

                            Parameters ndash

                            bull type ndash Advertising type to be used can bendash AT_BLE_ADV_TYPE_UNDIRECTEDndash AT_BLE_ADV_TYPE_DIRECTEDndash AT_BLE_ADV_TYPE_SCANNABLE_UNDIRECTEDndash AT_BLE_ADV_TYPE_NONCONN_UNDIRECTEDndash AT_BLE_ADV_TYPE_DIRECTED_LDCndash AT_BLE_ADV_TYPE_SCAN_RESPONSE

                            bull mode ndash Advertising mode to be used can be

                            ATBTLC1000Establishing Connection with Central Device

                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 22

                            ndash AT_BLE_ADV_NON_DISCOVERABLEndash AT_BLE_ADV_GEN_DISCOVERABLEndash AT_BLE_ADV_LIM_DISCOVERABLEndash AT_BLE_ADV_BROADCASTER_MODE

                            bull peer_addr ndash Specify peer address when advertising type is AT_BLE_ADV_TYPE_DIRECTEDbull filtered ndash

                            ndash AT_BLE_ADV_FP_ANY ndash Allow scan and connection requests from anyonendash AT_BLE_ADV_FP_FILTER_SCANREQ ndash Allow scan request from White List devices onlyndash AT_BLE_ADV_FP_FILTER_CONNREQ ndash Allow connection request from White List devices

                            onlyndash AT_BLE_ADV_FP_FILTER_BOTH ndash Allow scan and connection requests from White List

                            devices onlybull interval ndash Advertisement interval (in 0625 ms units)bull timeout ndash Advertising timeout between 0x0001 and 0x028F in scale of seconds This parameter

                            must be set to 0 if type equals AT_BLE_ADV_TYPE_DIRECTEDbull disable_randomness ndash When disabled advertisements are performed at the exact interval

                            without adding random 10 ms tempo

                            Return ndash Execution Status

                            314 Advertisement ProcessIn this assignment the advertisement process is performed in the following configuration

                            bull Undirected (Type AT_BLE_ADV_TYPE_UNDIRECTED)bull Discoverable (Mode AT_BLE_ADV_GEN_DISCOVERABLE)bull No peer Address (peer_addr = NULL)bull No filtering (filtered = AT_BLE_ADV_FP_ANY)bull Advertisement interval 1s (interval = 1600)bull Maximum timeout (timeout 655)bull Randomness enabled (disable_randomness = FALSE)

                            3141 Starting the Advertisement Process1 Open startup_templatec file2 Declare the following ble_status global variable in startup_templatec as volatile

                            include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehvolatile at_ble_status_t ble_status

                            3 Declare the following adv_data global variable in startup_templatec as staticstatic uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD)0x09 AD2 Type = Complete local Name

                            ATBTLC1000Establishing Connection with Central Device

                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 23

                            My_SENS AD2 = ldquoMy_SENSrdquo

                            Note 1 The name of the device is to be changed (AD2 field)2 According to the new name AD2 length must be adapted to new AD2 content

                            4 Add the following start_advertisement function in startup_templatec prototype for thefunction void start_advertisement (void) also this can be added to avoid warningsvoid start_advertisement (void)printf(n Assignment 21 Start Advertisement)Set advertisement datable_status = at_ble_adv_data_set(adv_datasizeof(adv_data)NULL0)Start Advertisementble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550)if(ble_status = AT_BLE_SUCCESS)printf(n Failed to start advertisement)

                            5 Start the advertisement process by adding the following highlighted code to the application mainroutineint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Start Advertising process start_advertisement() Register PrimaryIncluded service in case of GATT Server while(true) Write application task

                            6 Click to save the project ltCtrl+Sgt

                            7 Click button to compile the project ltF7gt8 Verify that no build error appears in Atmel Studio output window

                            Figure 3-7 Atmel Studio Output Window

                            ATBTLC1000Establishing Connection with Central Device

                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 24

                            9 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt10 Open Microchip SmartConnect Application on Android or iOS device and tap START SCAN button

                            Note  The device must appear in Microchip SmartConnect Application

                            Figure 3-8 Microchip SmartConnect Application

                            11 Terminal must display the following Log outputFigure 3-9 Log Output Window

                            32 Managing GAP eventsThe management of the Bluetooth connection at the host MCU level is done through reception andhandling of events reported by the ATBTLC1000 These events are generated by ATBTLC1000 GAPGATT and L2CAP layers to notify the host about the ongoing Bluetooth interaction with other devices inits vicinity

                            ATBTLC1000Establishing Connection with Central Device

                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 25

                            To manage events coming from the ATBTLC1000 module the host driver must provide able_mgr_events_callback_handler function that allows registration of application callback functionto be executed on each event reported by the ATBTLC1000 module

                            Prototype ndashbool ble_mgr_events_callback_handler(ble_mgr_event_cb_t event_cb_typeble_mgr_event_t event_typeconst voidble_event_handler)

                            Description ndash Used by ProfileServiceApplication to register the Bluetooth Low Energy eventsrsquocallbacks

                            Parameters ndash

                            event_cb_type ndash types of actions to perform on callbacks can be either

                            REGISTER_CALL_BACK or

                            UNREGISTER_CALL_BACKevent_type ndash Any one of the event types can be used

                            BLE_GAP_EVENT_TYPEBLE_GATT_CLIENT_EVENT_TYPEBLE_GATT_SERVER_EVENT_TYPEBLE_L2CAP_EVENT_TYPEBLE_GATT_HTPT_EVENT_TYPEBLE_DTM_EVENT_TYPEBLE_CUSTOM_EVENT_TYPEble_event_handler ndash pointer to handler list

                            Structure ble_gap_event_cb_t defines the GAP callbacks Similarly structuresble_gatt_client_event_cb_t and ble_gatt_server_event_cb_t define the callbacks of GATTevents

                            typedef struct ble_gap_event_cb BLE Undefined events received from ATBTLC1000 which is not handled in Libraryble_event_callback_t undefined BLE scan information contains the peer device scan information Refer ref at_ble_scan_info_tble_event_callback_t scan_info Once the BLE scan timeout or scan stop triggers the scan report event Refer ref at_ble_scan_report_tble_event_callback_t scan_report Advertisement complete event Refer ref at_ble_adv_cmp_evt_tble_event_callback_t advt_cmp Advertisement report in case of advertisement stopped due to advertisement timeout Refer ref at_ble_adv_report_tble_event_callback_t adv_report BLE device own random address changed event Refer ref at_ble_rand_addr_changed_tble_event_callback_t rand_addr_changed BLE connected event device connected to peer device Refer ref at_ble_connected_tble_event_callback_t connected BLE disconnected event device disconnected from peer device Refer ref at_ble_disconnected_tble_event_callback_t disconnected Connection parameter update done on peer device and own device Refer ref at_ble_conn_param_update_done_t

                            ATBTLC1000Establishing Connection with Central Device

                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 26

                            ble_event_callback_t conn_parameter_update_done Connection parameter update request from peer device Refer ref at_ble_conn_param_update_request_tble_event_callback_t conn_param_update_request Pair complete event as part of end of pairing process Refer ref at_ble_pair_done_tble_event_callback_t pair_done Pair request event from Central device Refer ref at_ble_pair_request_tble_event_callback_t pair_request Slave security request received from peer Peripheral device Refer ref at_ble_slave_sec_request_tble_event_callback_t slave_sec_request Pair Key request event from Peer central device Refer ref at_ble_pair_key_request_tble_event_callback_t pair_key_request encryption request comes from the peer device Needs to supply the bonding information which is stored earlier ref at_ble_encryption_request_tble_event_callback_t encryption_request encryption status changed event received from SMP once the encryption is started ref at_ble_encryption_status_changed_tble_event_callback_t encryption_status_changed Event triggered once the Resolve random address is resolved using supplied IRKs ref at_ble_resolv_rand_addr_status_tble_event_callback_t resolv_rand_addr_status Event is triggered once the connection signature information indication received ref at_ble_sign_counter_tble_event_callback_t sign_counters_ind Peer attribute information indication received Event ref at_ble_peer_att_info_ind_tble_event_callback_t peer_att_info_ind Peer device channel map received indication ref at_ble_channel_map_tble_event_callback_t con_channel_map_indble_gap_event_cb_t

                            Note  Callback definition is application-specific If the application layer requires a specific event callbackthen the specific member of the structure is to be assigned with the address of the callback function

                            In this assignment two callback functions on Connected and Disconnected GAP events are usedThis allows the application to restart the advertising process on Disconnect manage connectioninformation and startstop of sensor data update

                            321 Handling of Connected and Disconnected GAP Events1 Open the startup_templatec file2 Define the following software flags as global variables in startup_templatec file volatile

                            bool timer_flag = false and volatile bool connected_flag = false3 Declare and implement the following ble_connected_cb function in the

                            startup_templatec file Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param)printf(n Assignment 22 Application connected )connected_flag = trueALL_UNUSED(param)return AT_BLE_SUCCESS

                            4 Declare and implement the following ble_disconnected_cb function instartup_templatec file Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param)printf(n Assignment 22 Application disconnected )connected_flag = falsestart_advertisement()ALL_UNUSED(param)return AT_BLE_SUCCESS

                            ATBTLC1000Establishing Connection with Central Device

                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 27

                            5 Declare the following static GAP callback structure in ldquostartup_templatecrdquo filestatic const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTEDdisconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                            6 Add the following register_btlc1000_callbacks function in startup_templatec Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void) Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks)ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACKBLE_GAP_EVENT_TYPEampapp_gap_handle)if (ble_status = true)printf(nError when Registering ATBTLC1000 callbacks)

                            7 Add the register_btlc1000_callbacks function call prior to start advertisement in theapplication main routineint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Gap Callbacks register_btlc1000_callbacks ( ) Start Advertising process start_advertisement() Register PrimaryIncluded service in case of GATT Server while(true) Write application task

                            8 Add the ble_event_task function call in the project main loop to handle the different incomingevents from ATBTLC1000while(true)ble_event_task()

                            9 Press button ltF7gt to compile the project and verify that no build error appear in the AtmelStudio output window

                            ATBTLC1000Establishing Connection with Central Device

                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 28

                            Figure 3-10 Atmel Studio Output Window

                            10 Click ldquo rdquo to save the project ltCtrl+Sgt

                            11 Click ldquo rdquo to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt and checkcorrect initialization of the ATBTLC1000

                            12 Open the Microchip SmartConnect application on Androidtrade or iOS device13 Press the ltStart Scangt button and pair peripherals by selecting them in the device list (pass key

                            123456)Note 

                            1 Pairing event handling is carried out by ble_managerc Refer toble_pair_key_request_handler() for code implementation The default pass key of123456 is also fixed inside this function This can be changed here

                            Figure 3-11 Console Log Window

                            Note  After peripheral pairing no services information are displayed in Microchip SmartConnectapplication as no service is currently defined and started on peripheral side

                            ATBTLC1000Establishing Connection with Central Device

                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 29

                            4 SettingHandling of Pre-Defined ServiceThe management of services are done in the GATT layer of the ATBTLC1000 ROM coded Bluetooth LowEnergy Stack The GATT transactions are based on high-level nested objects called Profiles Servicesand Characteristics stored in SRAM memory of ATBTLC1000 device This assignment adds the pre-defined service of information service from ASF library

                            Figure 4-1 ATBTLC1000 GATT Layers

                            bull ProfilesProfiles are not available in the Bluetooth Low Energy peripheral they are simply a pre-definedcollection of services that have been compiled by either the Bluetooth SIG (adopted GATT basedprofile) or by the application developer (custom profiles) For example the Heart Rate Profilecombines the Heart Rate Service and the Device Information Service

                            Note  The complete list of officially adopted GATT-based profiles is available on the BluetoothDeveloper Portal

                            bull ServicesA service is a collection of data and associated behaviors which accomplish a particular function orfeature of a device or portions of a device A service may reference other primary or secondaryservices andor a set of characteristics that make up the service Each service distinguishes itselffrom other services by means of a unique numeric ID called as UUID which can be either 16-bit(for officially adopted Bluetooth Low Energy Services) or 128-bit (for custom services)

                            Note  A full list of officially adopted services and their UUID are seen on the Bluetooth DeveloperPortal

                            bull CharacteristicsA characteristic is the lowest level concept in GATT transactions It contains a single data point withdifferent attributes such as notify read or write capabilities Similar to Services each characteristiccan be distinguished by a SIG-defined adopted UUID (16-bit) or custom (128-bit) UUID This UUIDensures interoperability across Bluetooth Low Energy devices The characteristics are important tointeract with in a Bluetooth Low Energy network In addition to standard UUID the custom UUID isused in case of specific application When characteristics with custom UUID are used in a devicethen it will be interoperable only with those devices that support these characteristics with customUUID

                            ATBTLC1000SettingHandling of Pre-Defined Service

                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 30

                            In this assignment the following steps are added to the Host MCU application to set up and handle adevice information service within the ATBTLC1000 module The following steps are added to the startupproject

                            bull Adding device info service component from ASFbull Configuring and loading the service

                            Figure 4-2 Device Information Service

                            41 Adding Device Info Service Component from ASF Wizard to ProjectTo use the ldquoofficially adopted GATT-based profilesrdquo from SIG ASF provides Bluetooth Low Energy servicecomponents including init functions that pre-define services in Host memory

                            Note  Before starting this assignment be sure to follow the steps mentioned in 2 Creating the Projectand Initializing and 3 Establishing Connection with Central Device

                            1 Click ASF gt ASF Wizard2 Search for ldquoBLE-Device Information Servicesrdquo and then click Add

                            ATBTLC1000SettingHandling of Pre-Defined Service

                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 31

                            Figure 4-3 Available Modules

                            3 Now ldquoBLE-Device Information Servicesrdquo (component) appears in ldquoSelected ModulesrdquoFigure 4-4 Selected Modules

                            4 Click Apply to add the component to the projectFigure 4-5 Adding the Modules to Project

                            5 The ldquoDevice Information Servicerdquo component is added to the project and is confirmed bydevice_information folder added in Solution Explorer

                            ATBTLC1000SettingHandling of Pre-Defined Service

                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 32

                            Figure 4-6 Device Information Service Added to Project

                            42 Configuring and Loading Device Information ServiceThe ATBTLC1000 Host driver provides a set of GATT functions that allows storing and updating theservices in ATBTLC1000 memories

                            Prototype at_ble_status_t at_ble_primary_service_define(at_ble_uuid_t uuidat_ble_handle_t service_handleat_ble_included_service_t included_service_listuint16_t included_service_countat_ble_characteristic_t charactristic_listuint16_t charactristic_count)

                            Description Defines a new primary service along with its included services and characteristics inATBTLC1000

                            Parameters

                            bull Uuid [In] ndash primary service UUIDbull service_handle [Out] ndash Service handle is returned herebull included_service_list [In] ndash an array of included service referencesbull included_service_count [In] ndash number of elements in included_service_listbull charactristic_list [InOut] ndash an array of characteristics included in the service this array

                            is updated with respective characteristics handlesbull charactristic_count[In] ndash number of elements in charactristic_list

                            Return Execution Status

                            This function requires an argument as GATT description structure of the service that is implemented Thepreviously added Device Info service component provides Bluetooth Low Energy service middlewareincluding the init functions that predefine the services See below ldquodis_init_servicerdquo from device infoBLE service (device_infohc)

                            Prototype ndash void dis_init_service(dis_gatt_service_handler_t device_info_serv)Description ndash Initialize the device information service handler in the host MCU memory

                            Parameters ndash

                            ATBTLC1000SettingHandling of Pre-Defined Service

                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 33

                            bull device_info_serv [Inout] pointer to device info GATT description handler to beupdated

                            Return None

                            Here is a picture of GATT device info service descriptor definition in Host memory

                            device_info_serv-gtserv_handle = 0device_info_serv-gtserv_uuidtype = AT_BLE_UUID_16device_info_serv-gtserv_uuiduuid[0] = (uint8_t) DIS_SERVICE_UUIDdevice_info_serv-gtserv_uuiduuid[1] = (uint8_t) (DIS_SERVICE_UUID gtgt 8)Characteristic Info for Manufacturer Name Stringdevice_info_serv-gtserv_chars[0]char_val_handle = 0 handle stored here device_info_serv-gtserv_chars[0]uuidtype = AT_BLE_UUID_16device_info_serv-gtserv_chars[0]uuiduuid[0] = (uint8_t) IS_CHAR_MANUFACTURER_NAME_UUID UUID Manufacturer Name String device_info_serv-gtserv_chars[0]uuiduuid[1] = (uint8_t) (DIS_CHAR_MANUFACTURER_NAME_UUID gtgt 8) UUID Manufacturer Name String device_info_serv-gtserv_chars[0]properties = AT_BLE_CHAR_READ Properties memcpy(char_valuemanufacturer_nameDEFAULT_MANUFACTURER_NAMEDIS_CHAR_MANUFACTURER_NAME_INIT_LEN)device_info_serv-gtserv_chars[0]init_value = char_valuemanufacturer_namedevice_info_serv-gtserv_chars[0]value_init_len = DIS_CHAR_MANUFACTURER_NAME_INIT_LENdevice_info_serv-gtserv_chars[0]value_max_len = DIS_CHAR_MANUFACTURER_NAME_MAX_LENif BLE_PAIR_ENABLEdevice_info_serv-gtserv_chars[0]value_permissions = AT_BLE_ATTR_READABLE_REQ_AUTHN_NO_AUTHR permissions elsedevice_info_serv-gtserv_chars[0]value_permissions = AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR permissions endifdevice_info_serv-gtserv_chars[0]user_desc = NULL user defined name device_info_serv-gtserv_chars[0]user_desc_len = 0device_info_serv-gtserv_chars[0]user_desc_max_len = 0device_info_serv-gtserv_chars[0]user_desc_permissions = AT_BLE_ATTR_NO_PERMISSIONS user description permissionsdevice_info_serv-gtserv_chars[0]client_config_permissions = AT_BLE_ATTR_NO_PERMISSIONS client config permissionsdevice_info_serm hdsv-gtserv_chars[0]server_config_permissions = AT_BLE_ATTR_NO_PERMISSIONS server config permissionsdevice_info_serv-gtserv_chars[0]user_desc_handle = 0 user desc handlesdevice_info_serv-gtserv_chars[0]client_config_handle = 0 client config handlesdevice_info_serv-gtserv_chars[0]server_config_handle = 0 server config handlesdevice_info_serv-gtserv_chars[0]presentation_format = NULL presentation format

                            Note  In case of custom service the above definition initialization must be taken care of by thedeveloper

                            421 Procedure to Configure and Load Device Info Service1 Include device info service header file (device_infoh) at the beginning of

                            startup_templatec fileinclude ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehinclude device_infoh

                            2 Define a device info service handler as global in startup_templatec file Serviceshandlers dis_gatt_service_handler_t dis_service_handler

                            ATBTLC1000SettingHandling of Pre-Defined Service

                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 34

                            3 Add dis_init_service and at_ble_primary_service_define functions as called abovethe advertisement start in main routine Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service)dis_init_service (ampdis_service_handler) Define the primary service in the GATT server database if ((dis_primary_service_define (ampdis_service_handler)) = AT_BLE_SUCCESS)printf(Device Information Service definition failed) Start Advertising process start_advertisement()

                            4 Click to save the project ltCtrl+Sgt and compile the project by pressing button ltF7gt5 Verify that no build error appears in Atmel Studio output window

                            Figure 4-7 Atmel Studio Output Window

                            6 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt7 Open ldquoMicrochip SmartConnectrdquo application on Android or iOS device8 Press ltStart Scangt button and connect to peripheral

                            Note  The device name is a characteristic and contains the name of the device This device namecan be read by the central device to know the name of the device in order to differentiate thedevices This is being set using at_ble_device_name_set()API The device name is set bydefault when ble_device_init is called and the value is pre-defined using BLE_DEVICE_NAMEThe device name can also be sent as part of advertisement payload to be same as the oneconfigured in at_ble_adv_data_set() API It is the responsibility of users to keep the devicename set in advertisement payload the same as that configured inat_ble_device_name_set()

                            9 The Service must now be visible after pairing with peripheral under Microchip SmartConnectapplication

                            ATBTLC1000SettingHandling of Pre-Defined Service

                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 35

                            Figure 4-8 Service List in Microchip SmartConnect Application

                            Note  If the pairing of ATBTLC1000 with Microchip Smart connect is not successful then removethe pairing information from mobile by selecting ldquoForget Devicerdquo from the mobile settings Thereason for this is that the mobile app stores the previous pairing information but the ATBTLC1000device lost the previous pairing information due to RESET since it was stored on temporary storage(RAM)

                            10 The serial terminal must display the following log output windowFigure 4-9 Console Log Window

                            ATBTLC1000SettingHandling of Pre-Defined Service

                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 36

                            5 Setting up and Handling Custom ServiceThe previous assignment describes the handling of Bluetooth Low Energy SIG defined device infoservice which is the predefined service available in ASF component This assignment describes thecustom service So the service initialization needs to be implemented In the context of customizedenvironment service the following service description is pushed in ATBTLC1000 memory

                            Figure 5-1 Custom Service

                            Custom Environment Service Description

                            bull UUID type ndash Custom UUID (128-bit)bull UUID ndash 1bc5d5a5-0200-a687-e511-3639c1ba5af0

                            Characteristic 0 (Temperature)

                            bull User Description ndash Temperaturebull UUID type ndash Custom UUID (128-bit)bull UUID ndash 1bc5d5a5-0200-a687-e511-3639d8ba5af0bull Properties ndash Read Notifybull Value permission ndash No authorization requiredbull Client config permission ndash No permissionbull Server config permission ndash No permission

                            Note  In this definition UUIDs are generated randomly Custom servicescharacteristics are free to useany 128-bit UUID less than the base UUID There is no reserved space for vendors to use 16-bit or 32-bitUUIDs

                            With this definition any temperature change is notified to the central The notify mechanism allows thecentral to know when the data changes When notify property of the Client Characteristic ConfigurationDescriptor is enabled by the central and the device writes the new value then this updated value isautomatically sent to the central through a notification The central is not required to send readcharacteristic commands explicitly to the peripheral (GATT server)

                            To setup and handle the custom environment service in ATBTLC1000 module the following steps areadded to the Host MCU application

                            bull Configure and load the custom servicebull Update Temperature characteristic and notify to the central devicebull Receive and handle notification from the Host device

                            ATBTLC1000Setting up and Handling Custom Service

                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 37

                            Figure 5-2 Custom Service Flowchart

                            51 Configuring and Loading the Custom Environment ServiceThe ATBTLC1000 Host driver provides the following set of GATT functions that allows it to push andupdate the service descriptions in the ATBTLC1000 SRAM memory

                            Note  Before starting this assignment be sure to follow the steps mentioned in 2 Creating the Projectand Initializing and 3 Establishing Connection with Central Device

                            Prototype ndashat_ble_status_t at_ble_primary_service_define(at_ble_uuid_t uuidat_ble_handle_t service_handleat_ble_included_service_t included_service_listuint16_t included_service_countat_ble_characteristic_t charactristic_listuint16_t charactristic_count)

                            Description ndash Defines a new primary service along with its included services and characteristics inATBTLC1000 module

                            Parameters

                            bull Uuid [In] ndash primary service UUIDbull service_handle [Out] ndash service handle is returned herebull included_service_list [In] ndash array of included service referencesbull included_service_count [In] ndash number of elements in included_service_listbull charactristic_list [InOut] ndash an array of characteristics included in the service this array

                            is update with respective characteristics handlesbull charactristic_count[In] ndash number of elements in charactristic_list

                            ATBTLC1000Setting up and Handling Custom Service

                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 38

                            Return ndash Execution Status

                            bull Characteristics ndashndash Characteristics definition is done through specific array of following

                            ldquoat_ble_characteristic_trdquo structure instancestypedef structat_ble_handle_t char_val_handle Handler (returned during service initialisation)at_ble_uuid_t uuid Characteristic UUID (type and value)at_ble_char_properties_t propertiesCharac Properties (read write notify)uint8_t init_value initial valueuint16_t value_init_len initial value lengthuint16_t value_max_len value max lengthat_ble_attr_permissions_t value_permissions access authorization and authenticationuint8_t user_desc User descriptionuint16_t user_desc_len User description lengthuint16_t user_desc_max_len User description max lengthat_ble_char_presentation_t presentation_format Presentation formatat_ble_attr_permissions_t user_desc_permissions User description permissionat_ble_attr_permissions_t client_config_permissions client permissionat_ble_attr_permissions_t server_config_permissions server permissionat_ble_handle_t user_desc_handle description handlerat_ble_handle_t client_config_handle Client config handlerat_ble_handle_t server_config_handle Server config handler at_ble_characteristic_t

                            511 Procedure to Configure and Load Custom Environment Service1 Define the following service UUID and characteristic UUID in startup_templatec file

                            define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

                            2 Define the following environment service handler and characteristics variable as global instartup_templatec file Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

                            3 Add the following service initialization function custom_environment_service_init instartup_templatecvoid custom_environment_service_init(void) at_ble_uuid_t environment_service_uuiduint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUIDuint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperatureenvironment_service_characs[0]user_desc_len = 10environment_service_characs[0]user_desc_max_len = 10environment_service_characs[0]uuidtype = AT_BLE_UUID_128memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16)environment_service_characs[0]properties = AT_BLE_CHAR_READ |AT_BLE_CHAR_NOTIFYenvironment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature valueenvironment_service_characs[0]value_permissions =(AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuidampenvironment_service_handlerNULL0environment_service_characs1)=AT_BLE_SUCCESS)printf(n Assignment 41 Failed to Initialize custom environment service)

                            ATBTLC1000Setting up and Handling Custom Service

                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 39

                            elseprintf(n Assignment 41 Initialize custom environment service)

                            4 Declare and implement the following GATT event callback functioncustom_char_changed_app_event in startup_templatec file If a client (central) enablesnotifications for a server the server (peripheral) receives an AT_BLE_CHARACTERISTIC_CHANGEDevent and this event callback is called Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

                            5 Declare and implement the following custom_notification_confirmation_handlerfunction in startup_templatec file Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param)at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )paramif (event_param-gtstatus == AT_BLE_SUCCESS)printf(n Assignment 41Notification Successfully sent over the air) else printf(n Assignment 41Sending Notification over the air failed)return AT_BLE_SUCCESS

                            6 Declare the following GATT server callback structure in startup_templatec file Thisassignment uses two GATT callbacksstatic const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handlercharacteristic_changed = custom_char_changed_app_event

                            7 Add the following register_gatt_server_callbacks function in startup_templatec toregister GATT server callback for notification confirmation event Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks)ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACKBLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle)if (ble_status = true)printf(nError when Registering ATBTLC1000 callbacks)

                            8 Add custom_environment_service_init and register_gatt_server_callbacksfunction calls prior to start advertisement in the application main routine to initialize custom serviceand to register the GATT server callbacksint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()

                            ATBTLC1000Setting up and Handling Custom Service

                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 40

                            endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks() Custom service init custom_environment_service_init ( ) Register Gatt server callbacks register_gatt_server_callbacks ( ) Start Advertising process start_advertisement()while(true)ble_event_task()

                            9 Click to save the project ltCtrl+Sgt

                            10 Compile the project by pressing button ltF7gt11 Verify that no build error appears in the Atmel Studio output window

                            Figure 5-3 Atmel Studio Output Window

                            12 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt13 Open the ldquoMicrochip SmartConnectrdquo application on Android or iOS device14 Connect and pair to the peripheral (pass key 123456)15 Custom service must now be visible after pairing with peripheral under Microchip SmartConnect

                            application

                            ATBTLC1000Setting up and Handling Custom Service

                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 41

                            Figure 5-4 Service List in Microchip SmartConnect Application

                            Note  Custom service is displayed as unknown service in the above figure as this service is not aSIG-defined service

                            Figure 5-5 General Information

                            16 Serial terminal client must display the following Log output

                            ATBTLC1000Setting up and Handling Custom Service

                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 42

                            Figure 5-6 Log Output Window

                            52 Updating the Temperature CharacteristicIn the previous assignment the custom Temperature characteristic is defined with a notify attribute Thistype of attribute requires notification to be sent to central when a new characteristic value is availableThe update of any ldquonotifyrdquo characteristic value is based on following interaction between the Host MCUand the ATBTLC1000Figure 5-7 Characteristic Notification

                            521 Setting a Characteristic Value ( at_ble_characteristic_value_set)Prototype ndashat_ble_status_t at_ble_characteristic_value_setat_ble_handle_t handleuint8_t valueuint16_t len)

                            Description ndash Sets a characteristic value in ATBTLC1000 memory

                            Parameters ndash

                            ATBTLC1000Setting up and Handling Custom Service

                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 43

                            bull handle [inout] ndash Pointer to Characteristic handle to be changedbull value [in] ndash New valuebull len [in] ndash Value length in bytes

                            Return ndash Execution Status

                            522 Sending a Notification (at_ble_notification_send)Prototype ndashat_ble_status_t at_ble_notification_send(at_ble_handle_t conn_handleat_ble_handle_t attr_handle)

                            Description ndash Sends a Notification

                            Parameters ndash

                            bull conn_handle[in] ndash handle of the connection to be notifiedbull attr_handle [in] ndash handle of the attribute originating the notification

                            Return ndash Execution Status

                            523 Sending Temperature Information Once in Every 10 Seconds to Central1 Modify the following ldquotimer_callback_fnrdquo callback function from the startup_templatec

                            filestatic void timer_callback_fn(void)timer_flag = true

                            2 hw_timer_init()in main routine of startup_templatec initializes the hardware timer3 If a client (Central) enables the notifications for a server the server (Peripheral) receives an

                            AT_BLE_CHARACTERISTIC_CHANGED event callback then start the periodic 10 second timer forsending the notification Add the following code in previously definedcustom_char_changed_app_event function Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))timer_flag = falsehw_timer_start(10)printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

                            4 Declare the following Temperature_value global variable in startup_templatec staticuint8_t Temperature_value = 25 as static

                            5 Add the following send_temperature_notification function in startup_templatec tosend temperature every 10 seconds Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++

                            ATBTLC1000Setting up and Handling Custom Service

                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 44

                            if(Temperature_value gt 75)Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set(environment_service_characs[0]char_val_handle(uint8_t )ampTemperature_valuesizeof(Temperature_value))ble_status = at_ble_notification_send(0environment_service_characs[0]char_val_handle)if(ble_status = AT_BLE_SUCCESS)printf(fail to send temperature update notification )

                            6 Add the following code in main routine to send temperature data every 10 secondswhile (1) ble_event_task()if(connected_flag == true ampamp timer_flag == truetimer_flag = falsesend_temperature_notification()

                            7 Click to save the project ltCtrl+Sgt

                            8 Compile the project by pressing the button ltF7gt9 Verify that no build error appears in Atmel Studio output window

                            Figure 5-8 Atmel Studio Output Window

                            10 Click to program the project binary on the L21 Xplained XSTK11 Open ldquoMicrochip SmartConnectrdquo Application on Android or iOS device12 Connect and pair to the peripheral (pass key 123456)13 Click NOTIFY to start the notification14 Temperature information in HEX values must be displayed in Microchip SmartConnect application

                            ATBTLC1000Setting up and Handling Custom Service

                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 45

                            Figure 5-9 Notification Window

                            15 Serial terminal must display the following log outputFigure 5-10 Log Output Window

                            ATBTLC1000Setting up and Handling Custom Service

                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 46

                            6 Appendix A Software Solution - Pre-Defined SvcThe following is the code implementation for handling of pre-defined service done in 4 SettingHandlingof Pre-Defined Service

                            - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehinclude device_infoh

                            volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false Services handlers dis_gatt_service_handler_t dis_service_handler

                            static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

                            void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                            Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                            Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                            static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                            Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void) Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks)

                            ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 47

                            ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                            timer callback function static void timer_callback_fn(void) Add timer callback functionality here

                            void button_cb(void) Add button callback functionality here

                            int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                            Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                            DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks()

                            Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service) dis_init_service(ampdis_service_handler) Define the primary service in the GATT server database if((dis_primary_service_define(ampdis_service_handler)) = AT_BLE_SUCCESS) printf(Device Information Service definition failed)

                            Start Advertising process start_advertisement() while(true) ble_event_task()

                            ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 48

                            7 Appendix B Software Solution - Custom ServiceThe following is the code implementation for handling of pre-defined service done in 5 Setting up andHandling Custom Service

                            - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templateh

                            volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false

                            static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

                            define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0

                            define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

                            Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

                            void custom_environment_service_init(void) at_ble_uuid_t environment_service_uuid uint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUID uint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128 memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperature environment_service_characs[0]user_desc_len = 10 environment_service_characs[0]user_desc_max_len = 10 environment_service_characs[0]uuidtype = AT_BLE_UUID_128 memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16) environment_service_characs[0]properties = AT_BLE_CHAR_READ | AT_BLE_CHAR_NOTIFY environment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature value environment_service_characs[0]value_permissions = (AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuid ampenvironment_service_handlerNULL0 environment_service_characs1)=AT_BLE_SUCCESS) printf(n Assignment 41 Failed to Initialize custom environment service) else printf(n Assignment 41 Initialize custom environment service)

                            Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param) at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )param if (event_param-gtstatus == AT_BLE_SUCCESS) printf(n Assignment 41Notification Successfully sent over the air)

                            ATBTLC1000Appendix B Software Solution - Custom Service

                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 49

                            else printf(n Assignment 41Sending Notification over the air failed) return AT_BLE_SUCCESS

                            static at_ble_status_t custom_char_changed_app_event(void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle -gt char_new_value[0])) timer_flag = false hw_timer_start(10) printf(n Assignment 41Characteristic changed event) return AT_BLE_SUCCESS

                            static const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handler characteristic_changed = custom_char_changed_app_event

                            Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                            void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                            Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                            Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                            static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                            Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void)

                            ATBTLC1000Appendix B Software Solution - Custom Service

                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 50

                            Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                            timer callback function static void timer_callback_fn(void) Add timer callback functionality here timer_flag = true

                            void button_cb(void) Add button callback functionality here

                            static uint8_t Temperature_value = 25

                            Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++ if(Temperature_value gt 75) Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set( environment_service_characs[0]char_val_handle (uint8_t )ampTemperature_value sizeof(Temperature_value)) ble_status = at_ble_notification_send(0 environment_service_characs[0]char_val_handle) if(ble_status = AT_BLE_SUCCESS) printf(fail to send temperature update notification )

                            int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                            Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                            DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register Gap ATBTLC1000 Callbacks register_btlc1000_callbacks()

                            Custom service init custom_environment_service_init()

                            ATBTLC1000Appendix B Software Solution - Custom Service

                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 51

                            Register Gatt server callback register_gatt_server_callbacks()

                            Start Advertising process start_advertisement() while(true) ble_event_task() if(connected_flag == true ampamp timer_flag == true) timer_flag = false send_temperature_notification()

                            ATBTLC1000Appendix B Software Solution - Custom Service

                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 52

                            8 Document Revision HistoryRev B - 42018

                            Section Changes

                            Document Revised contents to match various Bluetooth Low Energy standard versions

                            Rev A - 122017

                            Section Changes

                            Document Initial release

                            ATBTLC1000Document Revision History

                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 53

                            The Microchip Web Site

                            Microchip provides online support via our web site at httpwwwmicrochipcom This web site is used asa means to make files and information easily available to customers Accessible by using your favoriteInternet browser the web site contains the following information

                            bull Product Support ndash Data sheets and errata application notes and sample programs designresources userrsquos guides and hardware support documents latest software releases and archivedsoftware

                            bull General Technical Support ndash Frequently Asked Questions (FAQ) technical support requestsonline discussion groups Microchip consultant program member listing

                            bull Business of Microchip ndash Product selector and ordering guides latest Microchip press releaseslisting of seminars and events listings of Microchip sales offices distributors and factoryrepresentatives

                            Customer Change Notification Service

                            Microchiprsquos customer notification service helps keep customers current on Microchip productsSubscribers will receive e-mail notification whenever there are changes updates revisions or erratarelated to a specified product family or development tool of interest

                            To register access the Microchip web site at httpwwwmicrochipcom Under ldquoSupportrdquo click onldquoCustomer Change Notificationrdquo and follow the registration instructions

                            Customer Support

                            Users of Microchip products can receive assistance through several channels

                            bull Distributor or Representativebull Local Sales Officebull Field Application Engineer (FAE)bull Technical Support

                            Customers should contact their distributor representative or Field Application Engineer (FAE) for supportLocal sales offices are also available to help customers A listing of sales offices and locations is includedin the back of this document

                            Technical support is available through the web site at httpwwwmicrochipcomsupport

                            Microchip Devices Code Protection Feature

                            Note the following details of the code protection feature on Microchip devices

                            bull Microchip products meet the specification contained in their particular Microchip Data Sheetbull Microchip believes that its family of products is one of the most secure families of its kind on the

                            market today when used in the intended manner and under normal conditionsbull There are dishonest and possibly illegal methods used to breach the code protection feature All of

                            these methods to our knowledge require using the Microchip products in a manner outside theoperating specifications contained in Microchiprsquos Data Sheets Most likely the person doing so isengaged in theft of intellectual property

                            bull Microchip is willing to work with the customer who is concerned about the integrity of their code

                            ATBTLC1000

                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 54

                            bull Neither Microchip nor any other semiconductor manufacturer can guarantee the security of theircode Code protection does not mean that we are guaranteeing the product as ldquounbreakablerdquo

                            Code protection is constantly evolving We at Microchip are committed to continuously improving thecode protection features of our products Attempts to break Microchiprsquos code protection feature may be aviolation of the Digital Millennium Copyright Act If such acts allow unauthorized access to your softwareor other copyrighted work you may have a right to sue for relief under that Act

                            Legal Notice

                            Information contained in this publication regarding device applications and the like is provided only foryour convenience and may be superseded by updates It is your responsibility to ensure that yourapplication meets with your specifications MICROCHIP MAKES NO REPRESENTATIONS ORWARRANTIES OF ANY KIND WHETHER EXPRESS OR IMPLIED WRITTEN OR ORAL STATUTORYOR OTHERWISE RELATED TO THE INFORMATION INCLUDING BUT NOT LIMITED TO ITSCONDITION QUALITY PERFORMANCE MERCHANTABILITY OR FITNESS FOR PURPOSEMicrochip disclaims all liability arising from this information and its use Use of Microchip devices in lifesupport andor safety applications is entirely at the buyerrsquos risk and the buyer agrees to defendindemnify and hold harmless Microchip from any and all damages claims suits or expenses resultingfrom such use No licenses are conveyed implicitly or otherwise under any Microchip intellectualproperty rights unless otherwise stated

                            Trademarks

                            The Microchip name and logo the Microchip logo AnyRate AVR AVR logo AVR Freaks BeaconThingsBitCloud CryptoMemory CryptoRF dsPIC FlashFlex flexPWR Heldo JukeBlox KeeLoq KeeLoq logoKleer LANCheck LINK MD maXStylus maXTouch MediaLB megaAVR MOST MOST logo MPLABOptoLyzer PIC picoPower PICSTART PIC32 logo Prochip Designer QTouch RightTouch SAM-BASpyNIC SST SST Logo SuperFlash tinyAVR UNIO and XMEGA are registered trademarks ofMicrochip Technology Incorporated in the USA and other countries

                            ClockWorks The Embedded Control Solutions Company EtherSynch Hyper Speed Control HyperLightLoad IntelliMOS mTouch Precision Edge and Quiet-Wire are registered trademarks of MicrochipTechnology Incorporated in the USA

                            Adjacent Key Suppression AKS Analog-for-the-Digital Age Any Capacitor AnyIn AnyOut BodyComchipKIT chipKIT logo CodeGuard CryptoAuthentication CryptoCompanion CryptoControllerdsPICDEM dsPICDEMnet Dynamic Average Matching DAM ECAN EtherGREEN In-Circuit SerialProgramming ICSP Inter-Chip Connectivity JitterBlocker KleerNet KleerNet logo Mindi MiWimotorBench MPASM MPF MPLAB Certified logo MPLIB MPLINK MultiTRAK NetDetach OmniscientCode Generation PICDEM PICDEMnet PICkit PICtail PureSilicon QMatrix RightTouch logo REALICE Ripple Blocker SAM-ICE Serial Quad IO SMART-IS SQI SuperSwitcher SuperSwitcher II TotalEndurance TSHARC USBCheck VariSense ViewSpan WiperLock Wireless DNA and ZENA aretrademarks of Microchip Technology Incorporated in the USA and other countries

                            SQTP is a service mark of Microchip Technology Incorporated in the USA

                            Silicon Storage Technology is a registered trademark of Microchip Technology Inc in other countries

                            GestIC is a registered trademark of Microchip Technology Germany II GmbH amp Co KG a subsidiary ofMicrochip Technology Inc in other countries

                            All other trademarks mentioned herein are property of their respective companies

                            ATBTLC1000

                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 55

                            copy 2018 Microchip Technology Incorporated Printed in the USA All Rights Reserved

                            ISBN 978-1-5224-2921-0

                            Quality Management System Certified by DNV

                            ISOTS 16949Microchip received ISOTS-169492009 certification for its worldwide headquarters design and waferfabrication facilities in Chandler and Tempe Arizona Gresham Oregon and design centers in Californiaand India The Companyrsquos quality system processes and procedures are for its PICreg MCUs and dsPICreg

                            DSCs KEELOQreg code hopping devices Serial EEPROMs microperipherals nonvolatile memory andanalog products In addition Microchiprsquos quality system for the design and manufacture of developmentsystems is ISO 90012000 certified

                            ATBTLC1000

                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 56

                            AMERICAS ASIAPACIFIC ASIAPACIFIC EUROPECorporate Office2355 West Chandler BlvdChandler AZ 85224-6199Tel 480-792-7200Fax 480-792-7277Technical SupporthttpwwwmicrochipcomsupportWeb AddresswwwmicrochipcomAtlantaDuluth GATel 678-957-9614Fax 678-957-1455Austin TXTel 512-257-3370BostonWestborough MATel 774-760-0087Fax 774-760-0088ChicagoItasca ILTel 630-285-0071Fax 630-285-0075DallasAddison TXTel 972-818-7423Fax 972-818-2924DetroitNovi MITel 248-848-4000Houston TXTel 281-894-5983IndianapolisNoblesville INTel 317-773-8323Fax 317-773-5453Tel 317-536-2380Los AngelesMission Viejo CATel 949-462-9523Fax 949-462-9608Tel 951-273-7800Raleigh NCTel 919-844-7510New York NYTel 631-435-6000San Jose CATel 408-735-9110Tel 408-436-4270Canada - TorontoTel 905-695-1980Fax 905-695-2078

                            Australia - SydneyTel 61-2-9868-6733China - BeijingTel 86-10-8569-7000China - ChengduTel 86-28-8665-5511China - ChongqingTel 86-23-8980-9588China - DongguanTel 86-769-8702-9880China - GuangzhouTel 86-20-8755-8029China - HangzhouTel 86-571-8792-8115China - Hong Kong SARTel 852-2943-5100China - NanjingTel 86-25-8473-2460China - QingdaoTel 86-532-8502-7355China - ShanghaiTel 86-21-3326-8000China - ShenyangTel 86-24-2334-2829China - ShenzhenTel 86-755-8864-2200China - SuzhouTel 86-186-6233-1526China - WuhanTel 86-27-5980-5300China - XianTel 86-29-8833-7252China - XiamenTel 86-592-2388138China - ZhuhaiTel 86-756-3210040

                            India - BangaloreTel 91-80-3090-4444India - New DelhiTel 91-11-4160-8631India - PuneTel 91-20-4121-0141Japan - OsakaTel 81-6-6152-7160Japan - TokyoTel 81-3-6880- 3770Korea - DaeguTel 82-53-744-4301Korea - SeoulTel 82-2-554-7200Malaysia - Kuala LumpurTel 60-3-7651-7906Malaysia - PenangTel 60-4-227-8870Philippines - ManilaTel 63-2-634-9065SingaporeTel 65-6334-8870Taiwan - Hsin ChuTel 886-3-577-8366Taiwan - KaohsiungTel 886-7-213-7830Taiwan - TaipeiTel 886-2-2508-8600Thailand - BangkokTel 66-2-694-1351Vietnam - Ho Chi MinhTel 84-28-5448-2100

                            Austria - WelsTel 43-7242-2244-39Fax 43-7242-2244-393Denmark - CopenhagenTel 45-4450-2828Fax 45-4485-2829Finland - EspooTel 358-9-4520-820France - ParisTel 33-1-69-53-63-20Fax 33-1-69-30-90-79Germany - GarchingTel 49-8931-9700Germany - HaanTel 49-2129-3766400Germany - HeilbronnTel 49-7131-67-3636Germany - KarlsruheTel 49-721-625370Germany - MunichTel 49-89-627-144-0Fax 49-89-627-144-44Germany - RosenheimTel 49-8031-354-560Israel - RarsquoananaTel 972-9-744-7705Italy - MilanTel 39-0331-742611Fax 39-0331-466781Italy - PadovaTel 39-049-7625286Netherlands - DrunenTel 31-416-690399Fax 31-416-690340Norway - TrondheimTel 47-7289-7561Poland - WarsawTel 48-22-3325737Romania - BucharestTel 40-21-407-87-50Spain - MadridTel 34-91-708-08-90Fax 34-91-708-08-91Sweden - GothenbergTel 46-31-704-60-40Sweden - StockholmTel 46-8-5090-4654UK - WokinghamTel 44-118-921-5800Fax 44-118-921-5820

                            Worldwide Sales and Service

                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 57

                            • Introduction
                            • Table of Contents
                            • 1 Getting Started
                              • 11 Software Prerequisites
                                • 111 Installation Steps of Atmel Studio 7
                                  • 12 Software Setup
                                    • 121 Installation of Microchip SmartConnect application on a Mobile device
                                      • 13 ATBTLC1000 Embedded Firmware
                                      • 14 ATBTLC1000 Host Software API
                                      • 15 Hardware Prerequisites
                                        • 151 SMARTtrade SAM L21 Xplained Pro
                                        • 152 ATBTLC1000ZR Xplained Pro Extension board
                                          • 16 Hardware Setup
                                            • 2 Creating the Project and Initializing
                                              • 21 Creating Project from ASF
                                              • 22 Configuring ASF for ATBTLC1000-ZR
                                              • 23 Compiling and Testing the Project
                                                • 3 Establishing Connection with Central Device
                                                  • 31 Configuring and Starting the Advertisement Process
                                                    • 311 Flags (AD Type 0x00)
                                                    • 312 Available Service UUID (AD Types 0x02 to 0x07)
                                                    • 313 Device Name (AD Types 0x08 to 0x09)
                                                      • 3131 Setting the Advertisement Payload (ble_advertisement_data_set)
                                                      • 3132 Starting the Advertisement Process (at_ble_adv_start)
                                                        • 314 Advertisement Process
                                                          • 3141 Starting the Advertisement Process
                                                              • 32 Managing GAP events
                                                                • 321 Handling of Connected and Disconnected GAP Events
                                                                    • 4 SettingHandling of Pre-Defined Service
                                                                      • 41 Adding Device Info Service Component from ASF Wizard to Project
                                                                      • 42 Configuring and Loading Device Information Service
                                                                        • 421 Procedure to Configure and Load Device Info Service
                                                                            • 5 Setting up and Handling Custom Service
                                                                              • 51 Configuring and Loading the Custom Environment Service
                                                                                • 511 Procedure to Configure and Load Custom Environment Service
                                                                                  • 52 Updating the Temperature Characteristic
                                                                                    • 521 Setting a Characteristic Value ( at_ble_characteristic_value_set)
                                                                                    • 522 Sending a Notification (at_ble_notification_send)
                                                                                    • 523 Sending Temperature Information Once in Every 10 Seconds to Central
                                                                                        • 6 Appendix A Software Solution - Pre-Defined Svc
                                                                                        • 7 Appendix B Software Solution - Custom Service
                                                                                        • 8 Document Revision History
                                                                                        • The Microchip Web Site
                                                                                        • Customer Change Notification Service
                                                                                        • Customer Support
                                                                                        • Microchip Devices Code Protection Feature
                                                                                        • Legal Notice
                                                                                        • Trademarks
                                                                                        • Quality Management System Certified by DNV
                                                                                        • Worldwide Sales and Service

                              Figure 2-5 Main Routine Flowchart

                              22 Configuring ASF for ATBTLC1000-ZR1 The default ldquoStartup Template Projectrdquo is configured for ATBTLC1000-MR module with 6-Wire

                              mode2 Navigate to Project properties Project gt Project properties gt Toolchain gt ARMGNU C Compiler gt

                              Symbols3 The ATBTLC1000ZR-XSTK kit uses the ATBTLC1000-ZR110CA module Change symbol

                              BLE_MODULE to BTLC1000_ZR and enable UART_FLOWCONTROL_4WIRE_MODE forATBTLC1000-ZR module as shown in the figure belowFigure 2-6 Startup Template Project Window

                              Note  This configuration change is not required for ATBTLC1000-MR module

                              ATBTLC1000Creating the Project and Initializing

                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 15

                              23 Compiling and Testing the Project

                              1 Click the ldquo rdquo button ltF7gt to compile the project2 Verify that no build error appears in Atmel Studio output window

                              Figure 2-7 Atmel Studio Output Window

                              3 Connect the SAM L21 XPRO to PC (if not already done)4 To access the project properties go to Project gt

                              STARTUP_TEMPLATE_SAML21_XPLAINED_PRO_B1 PropertiesFigure 2-8 Compiling the Project

                              5 In project properties click the Tool tab and select the EDBG of SAM L21 Xplained Pro board asdebuggerprogrammerFigure 2-9 Selection of DebuggerProgrammer

                              6 Open any Terminal application (for example TeraTerm) Select the COM port enumerated on thePC and set the following parameters

                              ndash EDBG associated COM Port (Check Windows Device Manager)

                              ATBTLC1000Creating the Project and Initializing

                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 16

                              ndash Baudrate 115200ndash Parity Nonendash One Stop bitndash Enable Hardware Flow Control

                              7 Click to save the project ltCtrl+Sgt

                              8 Click rdquo to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt9 The initialization of the ATBTLC1000ZR module must return the Bluetooth Device Address and

                              Address typeFigure 2-10 Console Log Window

                              Note 1 If initialization fails make sure to verify the hardware configuration is aligned with the

                              description refer to 16 Hardware Setup2 The initialization of ATBTLC1000 takes few seconds due to patch download process

                              ATBTLC1000Creating the Project and Initializing

                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 17

                              3 Establishing Connection with Central DeviceThe Bluetooth Low Energy connectivity is added to the application that is used to connect with theBluetooth Low Energy central The first step is about the management of Bluetooth connection with acentral device When using ATBTLC1000 device this process is managed by dedicated API function callsassociated with ATBTLC1000 events handling

                              The interaction between Host MCU ATBTLC1000 and Bluetooth Low Energy central during connectionestablishment is as follows

                              Figure 3-1 Establishing Connection with Central Device

                              On host MCU side the management of the Bluetooth connection is performed through three main steps1 GAP callback registration2 Advertisement configuration3 ATBTLC1000 event handling

                              In the existing project main routine the integration of these steps are highlighted in red in the followingflowchart

                              ATBTLC1000Establishing Connection with Central Device

                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 18

                              Figure 3-2 Main Routine Flow Chart

                              31 Configuring and Starting the Advertisement ProcessThe Bluetooth Low Energy devices transmit advertisement packets to show their presence to nearbydevices The advertisement packet is sent periodically at a time interval defined by variableldquoadvintervalrdquo defined in Bluetooth SIG specification To avoid any collision with other wireless networksuch as Wi-Fireg a channel change is performed for each advertisement packet sent (data frequencyhopping) as illustrated in the following figureFigure 3-3 Advertisement Process

                              During advertisement the payload structure to be sent differs from application to application and is set byusing encapsulated packet data unit type information (PDU_TYPE)

                              ATBTLC1000Establishing Connection with Central Device

                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 19

                              Figure 3-4 PDU Advertising

                              The following table lists the different PDU types used according to device role

                              Advertising event types (PDU_TYPE) Broadcaster Observer Peripheral Central

                              Connectible undirected event (ADV_IND) Excluded Excluded Mandatory Excluded

                              Connectible directed event(ADV_DIRECT_IND) Excluded Excluded Optional Excluded

                              Non-connectible undirected event(ADV_NONCONN_IND) Mandatory Excluded Optional Excluded

                              Scannable undirected event (ADV_SCAN_IND) Optional Excluded Optional Excluded

                              As our device acts as a Bluetooth Low Energy peripheral the connectable undirected event (ADV_IND)advertising type is used See the following description about the ADV_IND advertisement packetFigure 3-5 ADV_IND Advertisement Packet

                              The ADV_IND payload contains different Advertisement Data types (AD0 - ADn) which provide specificinformation to the central device such as device short name Tx power level and list of availableservices UUIDs The number of advertisement data types that can be added to the advertisementpayload are limited by the advertisement payload size of 31 octets

                              Following is a list of advertisement data types that are commonly found in ADV_IND payload

                              ATBTLC1000Establishing Connection with Central Device

                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 20

                              311 Flags (AD Type 0x00)The flags describe the basic device capability such as BLE support BLE discoverable mode BREDRsupport and simultaneous BRED

                              312 Available Service UUID (AD Types 0x02 to 0x07)The Bluetooth Low Energy advertisement payloads are limited to 31 bytes Therefore only two 128-bitUUID values can be added to the payload For this purpose the specific AD types describe the length ofthe advertised UUID and provide information as to whether the payload contains a incompletecompletelist of UUID supported by the GATT server

                              bull 0x02 - Incomplete list of 16-bit UUIDs (adopted GATT services)bull 0x03 - Complete list of 16-bit UUIDs (adopted GATT services)bull 0x06 - Incomplete list of 128-bit UUIDs (custom GATT services)bull 0x07 - Complete list of 128-bit UUIDs (custom GATT services)

                              Note  When a 16-bit UUID is transmitted only the unique 2-byte value is sent The client knows that it isrequired to be injected into the base UUID For example the Health Thermometer Service is assigned as0x1809 so its equivalent UUID is 00001809-0000-1000-8000-00805F9B34FB

                              313 Device Name (AD Types 0x08 to 0x09)This AD type field is used to advertise the Local name of device in the network The Local name datatype value indicates if the name is complete or shortened If the name is shortened the complete namecan be read after the connection is established

                              bull 0x08 - Shortened Local Namebull 0x09 - Complete Local Name

                              Note 1 A shortened name contains only continuous characters from the beginning of the full name For

                              example if the device name is BT_Device_Name then the shortened name can beBT_Device or BT_Dev

                              2 Complete data type list are available at httpswwwbluetoothcomspecificationsassigned-numbersgeneric-access-profile

                              For management of advertisement process and cover the different configurations specified by SIG theATBTLC1000 Host driver provides the two functions elaborated in the following sections

                              In the application use these two functions to setup the following ADV_IN type payloadFigure 3-6 ADV_IN Type Payload Process

                              ATBTLC1000Establishing Connection with Central Device

                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 21

                              3131 Setting the Advertisement Payload (ble_advertisement_data_set)Prototype ndashat_ble_status_t at_ble_adv_data_set (uint8_t const const adv_datauint8_t adv_data_lenuint8_t const const scan_resp_datauint8_t scan_response_data_len)

                              Description ndash Set clear or update the advertisement and scan response data

                              Parameters ndash

                              bull adv_data ndash Raw data to be placed in advertisement packetbull adv_data_len ndash Data length for adv_data Max size 28 bytes (3 bytes are reserved to set

                              advertising AD type flags based on the selected Advertising mode and the user is not required toconfigure AD type flags in the advertisement payload)

                              bull scan_resp_data ndash Raw data to be placed in the scan response packet If NULL no changes aremade to the current scan response packet data

                              bull scan_response_data_len ndash Data length for scan_resp_data Max size 31 bytes

                              Return ndash Execution Status

                              This function requires a parameter raw adv_data to be sent to central Following is an example of itsdefinition

                              static uint8_t adv_data[] = 0x11 AD1 length = 170x03 AD1 Type = Complete list of 128-bit UUIDs0x1b0xc50xd50xa50x020x000xa60x87 AD1 = UUID MSBs0xe50x110x360x390xc00xba0x5a0xf00x0A AD2 Length = 100x09 AD2 Type = Complete local NamelsquoMrsquorsquoyrsquorsquo_rsquorsquoDrsquorsquoErsquorsquoVrsquo AD2 = ldquoMy_DEVrdquo

                              3132 Starting the Advertisement Process (at_ble_adv_start)Prototype ndashat_ble_status_t at_ble_adv_start (at_ble_adv_type_t typeat_ble_adv_mode_t modeat_ble_addr_t peer_addrat_ble_filter_type_t filtereduint16_t intervaluint16_t timeoutbool disable_randomness)

                              Description ndash Start advertisement process

                              Parameters ndash

                              bull type ndash Advertising type to be used can bendash AT_BLE_ADV_TYPE_UNDIRECTEDndash AT_BLE_ADV_TYPE_DIRECTEDndash AT_BLE_ADV_TYPE_SCANNABLE_UNDIRECTEDndash AT_BLE_ADV_TYPE_NONCONN_UNDIRECTEDndash AT_BLE_ADV_TYPE_DIRECTED_LDCndash AT_BLE_ADV_TYPE_SCAN_RESPONSE

                              bull mode ndash Advertising mode to be used can be

                              ATBTLC1000Establishing Connection with Central Device

                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 22

                              ndash AT_BLE_ADV_NON_DISCOVERABLEndash AT_BLE_ADV_GEN_DISCOVERABLEndash AT_BLE_ADV_LIM_DISCOVERABLEndash AT_BLE_ADV_BROADCASTER_MODE

                              bull peer_addr ndash Specify peer address when advertising type is AT_BLE_ADV_TYPE_DIRECTEDbull filtered ndash

                              ndash AT_BLE_ADV_FP_ANY ndash Allow scan and connection requests from anyonendash AT_BLE_ADV_FP_FILTER_SCANREQ ndash Allow scan request from White List devices onlyndash AT_BLE_ADV_FP_FILTER_CONNREQ ndash Allow connection request from White List devices

                              onlyndash AT_BLE_ADV_FP_FILTER_BOTH ndash Allow scan and connection requests from White List

                              devices onlybull interval ndash Advertisement interval (in 0625 ms units)bull timeout ndash Advertising timeout between 0x0001 and 0x028F in scale of seconds This parameter

                              must be set to 0 if type equals AT_BLE_ADV_TYPE_DIRECTEDbull disable_randomness ndash When disabled advertisements are performed at the exact interval

                              without adding random 10 ms tempo

                              Return ndash Execution Status

                              314 Advertisement ProcessIn this assignment the advertisement process is performed in the following configuration

                              bull Undirected (Type AT_BLE_ADV_TYPE_UNDIRECTED)bull Discoverable (Mode AT_BLE_ADV_GEN_DISCOVERABLE)bull No peer Address (peer_addr = NULL)bull No filtering (filtered = AT_BLE_ADV_FP_ANY)bull Advertisement interval 1s (interval = 1600)bull Maximum timeout (timeout 655)bull Randomness enabled (disable_randomness = FALSE)

                              3141 Starting the Advertisement Process1 Open startup_templatec file2 Declare the following ble_status global variable in startup_templatec as volatile

                              include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehvolatile at_ble_status_t ble_status

                              3 Declare the following adv_data global variable in startup_templatec as staticstatic uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD)0x09 AD2 Type = Complete local Name

                              ATBTLC1000Establishing Connection with Central Device

                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 23

                              My_SENS AD2 = ldquoMy_SENSrdquo

                              Note 1 The name of the device is to be changed (AD2 field)2 According to the new name AD2 length must be adapted to new AD2 content

                              4 Add the following start_advertisement function in startup_templatec prototype for thefunction void start_advertisement (void) also this can be added to avoid warningsvoid start_advertisement (void)printf(n Assignment 21 Start Advertisement)Set advertisement datable_status = at_ble_adv_data_set(adv_datasizeof(adv_data)NULL0)Start Advertisementble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550)if(ble_status = AT_BLE_SUCCESS)printf(n Failed to start advertisement)

                              5 Start the advertisement process by adding the following highlighted code to the application mainroutineint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Start Advertising process start_advertisement() Register PrimaryIncluded service in case of GATT Server while(true) Write application task

                              6 Click to save the project ltCtrl+Sgt

                              7 Click button to compile the project ltF7gt8 Verify that no build error appears in Atmel Studio output window

                              Figure 3-7 Atmel Studio Output Window

                              ATBTLC1000Establishing Connection with Central Device

                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 24

                              9 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt10 Open Microchip SmartConnect Application on Android or iOS device and tap START SCAN button

                              Note  The device must appear in Microchip SmartConnect Application

                              Figure 3-8 Microchip SmartConnect Application

                              11 Terminal must display the following Log outputFigure 3-9 Log Output Window

                              32 Managing GAP eventsThe management of the Bluetooth connection at the host MCU level is done through reception andhandling of events reported by the ATBTLC1000 These events are generated by ATBTLC1000 GAPGATT and L2CAP layers to notify the host about the ongoing Bluetooth interaction with other devices inits vicinity

                              ATBTLC1000Establishing Connection with Central Device

                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 25

                              To manage events coming from the ATBTLC1000 module the host driver must provide able_mgr_events_callback_handler function that allows registration of application callback functionto be executed on each event reported by the ATBTLC1000 module

                              Prototype ndashbool ble_mgr_events_callback_handler(ble_mgr_event_cb_t event_cb_typeble_mgr_event_t event_typeconst voidble_event_handler)

                              Description ndash Used by ProfileServiceApplication to register the Bluetooth Low Energy eventsrsquocallbacks

                              Parameters ndash

                              event_cb_type ndash types of actions to perform on callbacks can be either

                              REGISTER_CALL_BACK or

                              UNREGISTER_CALL_BACKevent_type ndash Any one of the event types can be used

                              BLE_GAP_EVENT_TYPEBLE_GATT_CLIENT_EVENT_TYPEBLE_GATT_SERVER_EVENT_TYPEBLE_L2CAP_EVENT_TYPEBLE_GATT_HTPT_EVENT_TYPEBLE_DTM_EVENT_TYPEBLE_CUSTOM_EVENT_TYPEble_event_handler ndash pointer to handler list

                              Structure ble_gap_event_cb_t defines the GAP callbacks Similarly structuresble_gatt_client_event_cb_t and ble_gatt_server_event_cb_t define the callbacks of GATTevents

                              typedef struct ble_gap_event_cb BLE Undefined events received from ATBTLC1000 which is not handled in Libraryble_event_callback_t undefined BLE scan information contains the peer device scan information Refer ref at_ble_scan_info_tble_event_callback_t scan_info Once the BLE scan timeout or scan stop triggers the scan report event Refer ref at_ble_scan_report_tble_event_callback_t scan_report Advertisement complete event Refer ref at_ble_adv_cmp_evt_tble_event_callback_t advt_cmp Advertisement report in case of advertisement stopped due to advertisement timeout Refer ref at_ble_adv_report_tble_event_callback_t adv_report BLE device own random address changed event Refer ref at_ble_rand_addr_changed_tble_event_callback_t rand_addr_changed BLE connected event device connected to peer device Refer ref at_ble_connected_tble_event_callback_t connected BLE disconnected event device disconnected from peer device Refer ref at_ble_disconnected_tble_event_callback_t disconnected Connection parameter update done on peer device and own device Refer ref at_ble_conn_param_update_done_t

                              ATBTLC1000Establishing Connection with Central Device

                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 26

                              ble_event_callback_t conn_parameter_update_done Connection parameter update request from peer device Refer ref at_ble_conn_param_update_request_tble_event_callback_t conn_param_update_request Pair complete event as part of end of pairing process Refer ref at_ble_pair_done_tble_event_callback_t pair_done Pair request event from Central device Refer ref at_ble_pair_request_tble_event_callback_t pair_request Slave security request received from peer Peripheral device Refer ref at_ble_slave_sec_request_tble_event_callback_t slave_sec_request Pair Key request event from Peer central device Refer ref at_ble_pair_key_request_tble_event_callback_t pair_key_request encryption request comes from the peer device Needs to supply the bonding information which is stored earlier ref at_ble_encryption_request_tble_event_callback_t encryption_request encryption status changed event received from SMP once the encryption is started ref at_ble_encryption_status_changed_tble_event_callback_t encryption_status_changed Event triggered once the Resolve random address is resolved using supplied IRKs ref at_ble_resolv_rand_addr_status_tble_event_callback_t resolv_rand_addr_status Event is triggered once the connection signature information indication received ref at_ble_sign_counter_tble_event_callback_t sign_counters_ind Peer attribute information indication received Event ref at_ble_peer_att_info_ind_tble_event_callback_t peer_att_info_ind Peer device channel map received indication ref at_ble_channel_map_tble_event_callback_t con_channel_map_indble_gap_event_cb_t

                              Note  Callback definition is application-specific If the application layer requires a specific event callbackthen the specific member of the structure is to be assigned with the address of the callback function

                              In this assignment two callback functions on Connected and Disconnected GAP events are usedThis allows the application to restart the advertising process on Disconnect manage connectioninformation and startstop of sensor data update

                              321 Handling of Connected and Disconnected GAP Events1 Open the startup_templatec file2 Define the following software flags as global variables in startup_templatec file volatile

                              bool timer_flag = false and volatile bool connected_flag = false3 Declare and implement the following ble_connected_cb function in the

                              startup_templatec file Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param)printf(n Assignment 22 Application connected )connected_flag = trueALL_UNUSED(param)return AT_BLE_SUCCESS

                              4 Declare and implement the following ble_disconnected_cb function instartup_templatec file Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param)printf(n Assignment 22 Application disconnected )connected_flag = falsestart_advertisement()ALL_UNUSED(param)return AT_BLE_SUCCESS

                              ATBTLC1000Establishing Connection with Central Device

                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 27

                              5 Declare the following static GAP callback structure in ldquostartup_templatecrdquo filestatic const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTEDdisconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                              6 Add the following register_btlc1000_callbacks function in startup_templatec Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void) Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks)ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACKBLE_GAP_EVENT_TYPEampapp_gap_handle)if (ble_status = true)printf(nError when Registering ATBTLC1000 callbacks)

                              7 Add the register_btlc1000_callbacks function call prior to start advertisement in theapplication main routineint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Gap Callbacks register_btlc1000_callbacks ( ) Start Advertising process start_advertisement() Register PrimaryIncluded service in case of GATT Server while(true) Write application task

                              8 Add the ble_event_task function call in the project main loop to handle the different incomingevents from ATBTLC1000while(true)ble_event_task()

                              9 Press button ltF7gt to compile the project and verify that no build error appear in the AtmelStudio output window

                              ATBTLC1000Establishing Connection with Central Device

                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 28

                              Figure 3-10 Atmel Studio Output Window

                              10 Click ldquo rdquo to save the project ltCtrl+Sgt

                              11 Click ldquo rdquo to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt and checkcorrect initialization of the ATBTLC1000

                              12 Open the Microchip SmartConnect application on Androidtrade or iOS device13 Press the ltStart Scangt button and pair peripherals by selecting them in the device list (pass key

                              123456)Note 

                              1 Pairing event handling is carried out by ble_managerc Refer toble_pair_key_request_handler() for code implementation The default pass key of123456 is also fixed inside this function This can be changed here

                              Figure 3-11 Console Log Window

                              Note  After peripheral pairing no services information are displayed in Microchip SmartConnectapplication as no service is currently defined and started on peripheral side

                              ATBTLC1000Establishing Connection with Central Device

                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 29

                              4 SettingHandling of Pre-Defined ServiceThe management of services are done in the GATT layer of the ATBTLC1000 ROM coded Bluetooth LowEnergy Stack The GATT transactions are based on high-level nested objects called Profiles Servicesand Characteristics stored in SRAM memory of ATBTLC1000 device This assignment adds the pre-defined service of information service from ASF library

                              Figure 4-1 ATBTLC1000 GATT Layers

                              bull ProfilesProfiles are not available in the Bluetooth Low Energy peripheral they are simply a pre-definedcollection of services that have been compiled by either the Bluetooth SIG (adopted GATT basedprofile) or by the application developer (custom profiles) For example the Heart Rate Profilecombines the Heart Rate Service and the Device Information Service

                              Note  The complete list of officially adopted GATT-based profiles is available on the BluetoothDeveloper Portal

                              bull ServicesA service is a collection of data and associated behaviors which accomplish a particular function orfeature of a device or portions of a device A service may reference other primary or secondaryservices andor a set of characteristics that make up the service Each service distinguishes itselffrom other services by means of a unique numeric ID called as UUID which can be either 16-bit(for officially adopted Bluetooth Low Energy Services) or 128-bit (for custom services)

                              Note  A full list of officially adopted services and their UUID are seen on the Bluetooth DeveloperPortal

                              bull CharacteristicsA characteristic is the lowest level concept in GATT transactions It contains a single data point withdifferent attributes such as notify read or write capabilities Similar to Services each characteristiccan be distinguished by a SIG-defined adopted UUID (16-bit) or custom (128-bit) UUID This UUIDensures interoperability across Bluetooth Low Energy devices The characteristics are important tointeract with in a Bluetooth Low Energy network In addition to standard UUID the custom UUID isused in case of specific application When characteristics with custom UUID are used in a devicethen it will be interoperable only with those devices that support these characteristics with customUUID

                              ATBTLC1000SettingHandling of Pre-Defined Service

                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 30

                              In this assignment the following steps are added to the Host MCU application to set up and handle adevice information service within the ATBTLC1000 module The following steps are added to the startupproject

                              bull Adding device info service component from ASFbull Configuring and loading the service

                              Figure 4-2 Device Information Service

                              41 Adding Device Info Service Component from ASF Wizard to ProjectTo use the ldquoofficially adopted GATT-based profilesrdquo from SIG ASF provides Bluetooth Low Energy servicecomponents including init functions that pre-define services in Host memory

                              Note  Before starting this assignment be sure to follow the steps mentioned in 2 Creating the Projectand Initializing and 3 Establishing Connection with Central Device

                              1 Click ASF gt ASF Wizard2 Search for ldquoBLE-Device Information Servicesrdquo and then click Add

                              ATBTLC1000SettingHandling of Pre-Defined Service

                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 31

                              Figure 4-3 Available Modules

                              3 Now ldquoBLE-Device Information Servicesrdquo (component) appears in ldquoSelected ModulesrdquoFigure 4-4 Selected Modules

                              4 Click Apply to add the component to the projectFigure 4-5 Adding the Modules to Project

                              5 The ldquoDevice Information Servicerdquo component is added to the project and is confirmed bydevice_information folder added in Solution Explorer

                              ATBTLC1000SettingHandling of Pre-Defined Service

                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 32

                              Figure 4-6 Device Information Service Added to Project

                              42 Configuring and Loading Device Information ServiceThe ATBTLC1000 Host driver provides a set of GATT functions that allows storing and updating theservices in ATBTLC1000 memories

                              Prototype at_ble_status_t at_ble_primary_service_define(at_ble_uuid_t uuidat_ble_handle_t service_handleat_ble_included_service_t included_service_listuint16_t included_service_countat_ble_characteristic_t charactristic_listuint16_t charactristic_count)

                              Description Defines a new primary service along with its included services and characteristics inATBTLC1000

                              Parameters

                              bull Uuid [In] ndash primary service UUIDbull service_handle [Out] ndash Service handle is returned herebull included_service_list [In] ndash an array of included service referencesbull included_service_count [In] ndash number of elements in included_service_listbull charactristic_list [InOut] ndash an array of characteristics included in the service this array

                              is updated with respective characteristics handlesbull charactristic_count[In] ndash number of elements in charactristic_list

                              Return Execution Status

                              This function requires an argument as GATT description structure of the service that is implemented Thepreviously added Device Info service component provides Bluetooth Low Energy service middlewareincluding the init functions that predefine the services See below ldquodis_init_servicerdquo from device infoBLE service (device_infohc)

                              Prototype ndash void dis_init_service(dis_gatt_service_handler_t device_info_serv)Description ndash Initialize the device information service handler in the host MCU memory

                              Parameters ndash

                              ATBTLC1000SettingHandling of Pre-Defined Service

                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 33

                              bull device_info_serv [Inout] pointer to device info GATT description handler to beupdated

                              Return None

                              Here is a picture of GATT device info service descriptor definition in Host memory

                              device_info_serv-gtserv_handle = 0device_info_serv-gtserv_uuidtype = AT_BLE_UUID_16device_info_serv-gtserv_uuiduuid[0] = (uint8_t) DIS_SERVICE_UUIDdevice_info_serv-gtserv_uuiduuid[1] = (uint8_t) (DIS_SERVICE_UUID gtgt 8)Characteristic Info for Manufacturer Name Stringdevice_info_serv-gtserv_chars[0]char_val_handle = 0 handle stored here device_info_serv-gtserv_chars[0]uuidtype = AT_BLE_UUID_16device_info_serv-gtserv_chars[0]uuiduuid[0] = (uint8_t) IS_CHAR_MANUFACTURER_NAME_UUID UUID Manufacturer Name String device_info_serv-gtserv_chars[0]uuiduuid[1] = (uint8_t) (DIS_CHAR_MANUFACTURER_NAME_UUID gtgt 8) UUID Manufacturer Name String device_info_serv-gtserv_chars[0]properties = AT_BLE_CHAR_READ Properties memcpy(char_valuemanufacturer_nameDEFAULT_MANUFACTURER_NAMEDIS_CHAR_MANUFACTURER_NAME_INIT_LEN)device_info_serv-gtserv_chars[0]init_value = char_valuemanufacturer_namedevice_info_serv-gtserv_chars[0]value_init_len = DIS_CHAR_MANUFACTURER_NAME_INIT_LENdevice_info_serv-gtserv_chars[0]value_max_len = DIS_CHAR_MANUFACTURER_NAME_MAX_LENif BLE_PAIR_ENABLEdevice_info_serv-gtserv_chars[0]value_permissions = AT_BLE_ATTR_READABLE_REQ_AUTHN_NO_AUTHR permissions elsedevice_info_serv-gtserv_chars[0]value_permissions = AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR permissions endifdevice_info_serv-gtserv_chars[0]user_desc = NULL user defined name device_info_serv-gtserv_chars[0]user_desc_len = 0device_info_serv-gtserv_chars[0]user_desc_max_len = 0device_info_serv-gtserv_chars[0]user_desc_permissions = AT_BLE_ATTR_NO_PERMISSIONS user description permissionsdevice_info_serv-gtserv_chars[0]client_config_permissions = AT_BLE_ATTR_NO_PERMISSIONS client config permissionsdevice_info_serm hdsv-gtserv_chars[0]server_config_permissions = AT_BLE_ATTR_NO_PERMISSIONS server config permissionsdevice_info_serv-gtserv_chars[0]user_desc_handle = 0 user desc handlesdevice_info_serv-gtserv_chars[0]client_config_handle = 0 client config handlesdevice_info_serv-gtserv_chars[0]server_config_handle = 0 server config handlesdevice_info_serv-gtserv_chars[0]presentation_format = NULL presentation format

                              Note  In case of custom service the above definition initialization must be taken care of by thedeveloper

                              421 Procedure to Configure and Load Device Info Service1 Include device info service header file (device_infoh) at the beginning of

                              startup_templatec fileinclude ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehinclude device_infoh

                              2 Define a device info service handler as global in startup_templatec file Serviceshandlers dis_gatt_service_handler_t dis_service_handler

                              ATBTLC1000SettingHandling of Pre-Defined Service

                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 34

                              3 Add dis_init_service and at_ble_primary_service_define functions as called abovethe advertisement start in main routine Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service)dis_init_service (ampdis_service_handler) Define the primary service in the GATT server database if ((dis_primary_service_define (ampdis_service_handler)) = AT_BLE_SUCCESS)printf(Device Information Service definition failed) Start Advertising process start_advertisement()

                              4 Click to save the project ltCtrl+Sgt and compile the project by pressing button ltF7gt5 Verify that no build error appears in Atmel Studio output window

                              Figure 4-7 Atmel Studio Output Window

                              6 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt7 Open ldquoMicrochip SmartConnectrdquo application on Android or iOS device8 Press ltStart Scangt button and connect to peripheral

                              Note  The device name is a characteristic and contains the name of the device This device namecan be read by the central device to know the name of the device in order to differentiate thedevices This is being set using at_ble_device_name_set()API The device name is set bydefault when ble_device_init is called and the value is pre-defined using BLE_DEVICE_NAMEThe device name can also be sent as part of advertisement payload to be same as the oneconfigured in at_ble_adv_data_set() API It is the responsibility of users to keep the devicename set in advertisement payload the same as that configured inat_ble_device_name_set()

                              9 The Service must now be visible after pairing with peripheral under Microchip SmartConnectapplication

                              ATBTLC1000SettingHandling of Pre-Defined Service

                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 35

                              Figure 4-8 Service List in Microchip SmartConnect Application

                              Note  If the pairing of ATBTLC1000 with Microchip Smart connect is not successful then removethe pairing information from mobile by selecting ldquoForget Devicerdquo from the mobile settings Thereason for this is that the mobile app stores the previous pairing information but the ATBTLC1000device lost the previous pairing information due to RESET since it was stored on temporary storage(RAM)

                              10 The serial terminal must display the following log output windowFigure 4-9 Console Log Window

                              ATBTLC1000SettingHandling of Pre-Defined Service

                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 36

                              5 Setting up and Handling Custom ServiceThe previous assignment describes the handling of Bluetooth Low Energy SIG defined device infoservice which is the predefined service available in ASF component This assignment describes thecustom service So the service initialization needs to be implemented In the context of customizedenvironment service the following service description is pushed in ATBTLC1000 memory

                              Figure 5-1 Custom Service

                              Custom Environment Service Description

                              bull UUID type ndash Custom UUID (128-bit)bull UUID ndash 1bc5d5a5-0200-a687-e511-3639c1ba5af0

                              Characteristic 0 (Temperature)

                              bull User Description ndash Temperaturebull UUID type ndash Custom UUID (128-bit)bull UUID ndash 1bc5d5a5-0200-a687-e511-3639d8ba5af0bull Properties ndash Read Notifybull Value permission ndash No authorization requiredbull Client config permission ndash No permissionbull Server config permission ndash No permission

                              Note  In this definition UUIDs are generated randomly Custom servicescharacteristics are free to useany 128-bit UUID less than the base UUID There is no reserved space for vendors to use 16-bit or 32-bitUUIDs

                              With this definition any temperature change is notified to the central The notify mechanism allows thecentral to know when the data changes When notify property of the Client Characteristic ConfigurationDescriptor is enabled by the central and the device writes the new value then this updated value isautomatically sent to the central through a notification The central is not required to send readcharacteristic commands explicitly to the peripheral (GATT server)

                              To setup and handle the custom environment service in ATBTLC1000 module the following steps areadded to the Host MCU application

                              bull Configure and load the custom servicebull Update Temperature characteristic and notify to the central devicebull Receive and handle notification from the Host device

                              ATBTLC1000Setting up and Handling Custom Service

                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 37

                              Figure 5-2 Custom Service Flowchart

                              51 Configuring and Loading the Custom Environment ServiceThe ATBTLC1000 Host driver provides the following set of GATT functions that allows it to push andupdate the service descriptions in the ATBTLC1000 SRAM memory

                              Note  Before starting this assignment be sure to follow the steps mentioned in 2 Creating the Projectand Initializing and 3 Establishing Connection with Central Device

                              Prototype ndashat_ble_status_t at_ble_primary_service_define(at_ble_uuid_t uuidat_ble_handle_t service_handleat_ble_included_service_t included_service_listuint16_t included_service_countat_ble_characteristic_t charactristic_listuint16_t charactristic_count)

                              Description ndash Defines a new primary service along with its included services and characteristics inATBTLC1000 module

                              Parameters

                              bull Uuid [In] ndash primary service UUIDbull service_handle [Out] ndash service handle is returned herebull included_service_list [In] ndash array of included service referencesbull included_service_count [In] ndash number of elements in included_service_listbull charactristic_list [InOut] ndash an array of characteristics included in the service this array

                              is update with respective characteristics handlesbull charactristic_count[In] ndash number of elements in charactristic_list

                              ATBTLC1000Setting up and Handling Custom Service

                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 38

                              Return ndash Execution Status

                              bull Characteristics ndashndash Characteristics definition is done through specific array of following

                              ldquoat_ble_characteristic_trdquo structure instancestypedef structat_ble_handle_t char_val_handle Handler (returned during service initialisation)at_ble_uuid_t uuid Characteristic UUID (type and value)at_ble_char_properties_t propertiesCharac Properties (read write notify)uint8_t init_value initial valueuint16_t value_init_len initial value lengthuint16_t value_max_len value max lengthat_ble_attr_permissions_t value_permissions access authorization and authenticationuint8_t user_desc User descriptionuint16_t user_desc_len User description lengthuint16_t user_desc_max_len User description max lengthat_ble_char_presentation_t presentation_format Presentation formatat_ble_attr_permissions_t user_desc_permissions User description permissionat_ble_attr_permissions_t client_config_permissions client permissionat_ble_attr_permissions_t server_config_permissions server permissionat_ble_handle_t user_desc_handle description handlerat_ble_handle_t client_config_handle Client config handlerat_ble_handle_t server_config_handle Server config handler at_ble_characteristic_t

                              511 Procedure to Configure and Load Custom Environment Service1 Define the following service UUID and characteristic UUID in startup_templatec file

                              define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

                              2 Define the following environment service handler and characteristics variable as global instartup_templatec file Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

                              3 Add the following service initialization function custom_environment_service_init instartup_templatecvoid custom_environment_service_init(void) at_ble_uuid_t environment_service_uuiduint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUIDuint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperatureenvironment_service_characs[0]user_desc_len = 10environment_service_characs[0]user_desc_max_len = 10environment_service_characs[0]uuidtype = AT_BLE_UUID_128memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16)environment_service_characs[0]properties = AT_BLE_CHAR_READ |AT_BLE_CHAR_NOTIFYenvironment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature valueenvironment_service_characs[0]value_permissions =(AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuidampenvironment_service_handlerNULL0environment_service_characs1)=AT_BLE_SUCCESS)printf(n Assignment 41 Failed to Initialize custom environment service)

                              ATBTLC1000Setting up and Handling Custom Service

                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 39

                              elseprintf(n Assignment 41 Initialize custom environment service)

                              4 Declare and implement the following GATT event callback functioncustom_char_changed_app_event in startup_templatec file If a client (central) enablesnotifications for a server the server (peripheral) receives an AT_BLE_CHARACTERISTIC_CHANGEDevent and this event callback is called Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

                              5 Declare and implement the following custom_notification_confirmation_handlerfunction in startup_templatec file Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param)at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )paramif (event_param-gtstatus == AT_BLE_SUCCESS)printf(n Assignment 41Notification Successfully sent over the air) else printf(n Assignment 41Sending Notification over the air failed)return AT_BLE_SUCCESS

                              6 Declare the following GATT server callback structure in startup_templatec file Thisassignment uses two GATT callbacksstatic const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handlercharacteristic_changed = custom_char_changed_app_event

                              7 Add the following register_gatt_server_callbacks function in startup_templatec toregister GATT server callback for notification confirmation event Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks)ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACKBLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle)if (ble_status = true)printf(nError when Registering ATBTLC1000 callbacks)

                              8 Add custom_environment_service_init and register_gatt_server_callbacksfunction calls prior to start advertisement in the application main routine to initialize custom serviceand to register the GATT server callbacksint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()

                              ATBTLC1000Setting up and Handling Custom Service

                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 40

                              endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks() Custom service init custom_environment_service_init ( ) Register Gatt server callbacks register_gatt_server_callbacks ( ) Start Advertising process start_advertisement()while(true)ble_event_task()

                              9 Click to save the project ltCtrl+Sgt

                              10 Compile the project by pressing button ltF7gt11 Verify that no build error appears in the Atmel Studio output window

                              Figure 5-3 Atmel Studio Output Window

                              12 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt13 Open the ldquoMicrochip SmartConnectrdquo application on Android or iOS device14 Connect and pair to the peripheral (pass key 123456)15 Custom service must now be visible after pairing with peripheral under Microchip SmartConnect

                              application

                              ATBTLC1000Setting up and Handling Custom Service

                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 41

                              Figure 5-4 Service List in Microchip SmartConnect Application

                              Note  Custom service is displayed as unknown service in the above figure as this service is not aSIG-defined service

                              Figure 5-5 General Information

                              16 Serial terminal client must display the following Log output

                              ATBTLC1000Setting up and Handling Custom Service

                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 42

                              Figure 5-6 Log Output Window

                              52 Updating the Temperature CharacteristicIn the previous assignment the custom Temperature characteristic is defined with a notify attribute Thistype of attribute requires notification to be sent to central when a new characteristic value is availableThe update of any ldquonotifyrdquo characteristic value is based on following interaction between the Host MCUand the ATBTLC1000Figure 5-7 Characteristic Notification

                              521 Setting a Characteristic Value ( at_ble_characteristic_value_set)Prototype ndashat_ble_status_t at_ble_characteristic_value_setat_ble_handle_t handleuint8_t valueuint16_t len)

                              Description ndash Sets a characteristic value in ATBTLC1000 memory

                              Parameters ndash

                              ATBTLC1000Setting up and Handling Custom Service

                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 43

                              bull handle [inout] ndash Pointer to Characteristic handle to be changedbull value [in] ndash New valuebull len [in] ndash Value length in bytes

                              Return ndash Execution Status

                              522 Sending a Notification (at_ble_notification_send)Prototype ndashat_ble_status_t at_ble_notification_send(at_ble_handle_t conn_handleat_ble_handle_t attr_handle)

                              Description ndash Sends a Notification

                              Parameters ndash

                              bull conn_handle[in] ndash handle of the connection to be notifiedbull attr_handle [in] ndash handle of the attribute originating the notification

                              Return ndash Execution Status

                              523 Sending Temperature Information Once in Every 10 Seconds to Central1 Modify the following ldquotimer_callback_fnrdquo callback function from the startup_templatec

                              filestatic void timer_callback_fn(void)timer_flag = true

                              2 hw_timer_init()in main routine of startup_templatec initializes the hardware timer3 If a client (Central) enables the notifications for a server the server (Peripheral) receives an

                              AT_BLE_CHARACTERISTIC_CHANGED event callback then start the periodic 10 second timer forsending the notification Add the following code in previously definedcustom_char_changed_app_event function Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))timer_flag = falsehw_timer_start(10)printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

                              4 Declare the following Temperature_value global variable in startup_templatec staticuint8_t Temperature_value = 25 as static

                              5 Add the following send_temperature_notification function in startup_templatec tosend temperature every 10 seconds Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++

                              ATBTLC1000Setting up and Handling Custom Service

                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 44

                              if(Temperature_value gt 75)Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set(environment_service_characs[0]char_val_handle(uint8_t )ampTemperature_valuesizeof(Temperature_value))ble_status = at_ble_notification_send(0environment_service_characs[0]char_val_handle)if(ble_status = AT_BLE_SUCCESS)printf(fail to send temperature update notification )

                              6 Add the following code in main routine to send temperature data every 10 secondswhile (1) ble_event_task()if(connected_flag == true ampamp timer_flag == truetimer_flag = falsesend_temperature_notification()

                              7 Click to save the project ltCtrl+Sgt

                              8 Compile the project by pressing the button ltF7gt9 Verify that no build error appears in Atmel Studio output window

                              Figure 5-8 Atmel Studio Output Window

                              10 Click to program the project binary on the L21 Xplained XSTK11 Open ldquoMicrochip SmartConnectrdquo Application on Android or iOS device12 Connect and pair to the peripheral (pass key 123456)13 Click NOTIFY to start the notification14 Temperature information in HEX values must be displayed in Microchip SmartConnect application

                              ATBTLC1000Setting up and Handling Custom Service

                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 45

                              Figure 5-9 Notification Window

                              15 Serial terminal must display the following log outputFigure 5-10 Log Output Window

                              ATBTLC1000Setting up and Handling Custom Service

                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 46

                              6 Appendix A Software Solution - Pre-Defined SvcThe following is the code implementation for handling of pre-defined service done in 4 SettingHandlingof Pre-Defined Service

                              - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehinclude device_infoh

                              volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false Services handlers dis_gatt_service_handler_t dis_service_handler

                              static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

                              void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                              Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                              Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                              static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                              Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void) Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks)

                              ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 47

                              ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                              timer callback function static void timer_callback_fn(void) Add timer callback functionality here

                              void button_cb(void) Add button callback functionality here

                              int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                              Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                              DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks()

                              Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service) dis_init_service(ampdis_service_handler) Define the primary service in the GATT server database if((dis_primary_service_define(ampdis_service_handler)) = AT_BLE_SUCCESS) printf(Device Information Service definition failed)

                              Start Advertising process start_advertisement() while(true) ble_event_task()

                              ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 48

                              7 Appendix B Software Solution - Custom ServiceThe following is the code implementation for handling of pre-defined service done in 5 Setting up andHandling Custom Service

                              - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templateh

                              volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false

                              static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

                              define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0

                              define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

                              Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

                              void custom_environment_service_init(void) at_ble_uuid_t environment_service_uuid uint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUID uint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128 memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperature environment_service_characs[0]user_desc_len = 10 environment_service_characs[0]user_desc_max_len = 10 environment_service_characs[0]uuidtype = AT_BLE_UUID_128 memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16) environment_service_characs[0]properties = AT_BLE_CHAR_READ | AT_BLE_CHAR_NOTIFY environment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature value environment_service_characs[0]value_permissions = (AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuid ampenvironment_service_handlerNULL0 environment_service_characs1)=AT_BLE_SUCCESS) printf(n Assignment 41 Failed to Initialize custom environment service) else printf(n Assignment 41 Initialize custom environment service)

                              Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param) at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )param if (event_param-gtstatus == AT_BLE_SUCCESS) printf(n Assignment 41Notification Successfully sent over the air)

                              ATBTLC1000Appendix B Software Solution - Custom Service

                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 49

                              else printf(n Assignment 41Sending Notification over the air failed) return AT_BLE_SUCCESS

                              static at_ble_status_t custom_char_changed_app_event(void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle -gt char_new_value[0])) timer_flag = false hw_timer_start(10) printf(n Assignment 41Characteristic changed event) return AT_BLE_SUCCESS

                              static const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handler characteristic_changed = custom_char_changed_app_event

                              Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                              void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                              Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                              Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                              static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                              Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void)

                              ATBTLC1000Appendix B Software Solution - Custom Service

                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 50

                              Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                              timer callback function static void timer_callback_fn(void) Add timer callback functionality here timer_flag = true

                              void button_cb(void) Add button callback functionality here

                              static uint8_t Temperature_value = 25

                              Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++ if(Temperature_value gt 75) Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set( environment_service_characs[0]char_val_handle (uint8_t )ampTemperature_value sizeof(Temperature_value)) ble_status = at_ble_notification_send(0 environment_service_characs[0]char_val_handle) if(ble_status = AT_BLE_SUCCESS) printf(fail to send temperature update notification )

                              int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                              Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                              DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register Gap ATBTLC1000 Callbacks register_btlc1000_callbacks()

                              Custom service init custom_environment_service_init()

                              ATBTLC1000Appendix B Software Solution - Custom Service

                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 51

                              Register Gatt server callback register_gatt_server_callbacks()

                              Start Advertising process start_advertisement() while(true) ble_event_task() if(connected_flag == true ampamp timer_flag == true) timer_flag = false send_temperature_notification()

                              ATBTLC1000Appendix B Software Solution - Custom Service

                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 52

                              8 Document Revision HistoryRev B - 42018

                              Section Changes

                              Document Revised contents to match various Bluetooth Low Energy standard versions

                              Rev A - 122017

                              Section Changes

                              Document Initial release

                              ATBTLC1000Document Revision History

                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 53

                              The Microchip Web Site

                              Microchip provides online support via our web site at httpwwwmicrochipcom This web site is used asa means to make files and information easily available to customers Accessible by using your favoriteInternet browser the web site contains the following information

                              bull Product Support ndash Data sheets and errata application notes and sample programs designresources userrsquos guides and hardware support documents latest software releases and archivedsoftware

                              bull General Technical Support ndash Frequently Asked Questions (FAQ) technical support requestsonline discussion groups Microchip consultant program member listing

                              bull Business of Microchip ndash Product selector and ordering guides latest Microchip press releaseslisting of seminars and events listings of Microchip sales offices distributors and factoryrepresentatives

                              Customer Change Notification Service

                              Microchiprsquos customer notification service helps keep customers current on Microchip productsSubscribers will receive e-mail notification whenever there are changes updates revisions or erratarelated to a specified product family or development tool of interest

                              To register access the Microchip web site at httpwwwmicrochipcom Under ldquoSupportrdquo click onldquoCustomer Change Notificationrdquo and follow the registration instructions

                              Customer Support

                              Users of Microchip products can receive assistance through several channels

                              bull Distributor or Representativebull Local Sales Officebull Field Application Engineer (FAE)bull Technical Support

                              Customers should contact their distributor representative or Field Application Engineer (FAE) for supportLocal sales offices are also available to help customers A listing of sales offices and locations is includedin the back of this document

                              Technical support is available through the web site at httpwwwmicrochipcomsupport

                              Microchip Devices Code Protection Feature

                              Note the following details of the code protection feature on Microchip devices

                              bull Microchip products meet the specification contained in their particular Microchip Data Sheetbull Microchip believes that its family of products is one of the most secure families of its kind on the

                              market today when used in the intended manner and under normal conditionsbull There are dishonest and possibly illegal methods used to breach the code protection feature All of

                              these methods to our knowledge require using the Microchip products in a manner outside theoperating specifications contained in Microchiprsquos Data Sheets Most likely the person doing so isengaged in theft of intellectual property

                              bull Microchip is willing to work with the customer who is concerned about the integrity of their code

                              ATBTLC1000

                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 54

                              bull Neither Microchip nor any other semiconductor manufacturer can guarantee the security of theircode Code protection does not mean that we are guaranteeing the product as ldquounbreakablerdquo

                              Code protection is constantly evolving We at Microchip are committed to continuously improving thecode protection features of our products Attempts to break Microchiprsquos code protection feature may be aviolation of the Digital Millennium Copyright Act If such acts allow unauthorized access to your softwareor other copyrighted work you may have a right to sue for relief under that Act

                              Legal Notice

                              Information contained in this publication regarding device applications and the like is provided only foryour convenience and may be superseded by updates It is your responsibility to ensure that yourapplication meets with your specifications MICROCHIP MAKES NO REPRESENTATIONS ORWARRANTIES OF ANY KIND WHETHER EXPRESS OR IMPLIED WRITTEN OR ORAL STATUTORYOR OTHERWISE RELATED TO THE INFORMATION INCLUDING BUT NOT LIMITED TO ITSCONDITION QUALITY PERFORMANCE MERCHANTABILITY OR FITNESS FOR PURPOSEMicrochip disclaims all liability arising from this information and its use Use of Microchip devices in lifesupport andor safety applications is entirely at the buyerrsquos risk and the buyer agrees to defendindemnify and hold harmless Microchip from any and all damages claims suits or expenses resultingfrom such use No licenses are conveyed implicitly or otherwise under any Microchip intellectualproperty rights unless otherwise stated

                              Trademarks

                              The Microchip name and logo the Microchip logo AnyRate AVR AVR logo AVR Freaks BeaconThingsBitCloud CryptoMemory CryptoRF dsPIC FlashFlex flexPWR Heldo JukeBlox KeeLoq KeeLoq logoKleer LANCheck LINK MD maXStylus maXTouch MediaLB megaAVR MOST MOST logo MPLABOptoLyzer PIC picoPower PICSTART PIC32 logo Prochip Designer QTouch RightTouch SAM-BASpyNIC SST SST Logo SuperFlash tinyAVR UNIO and XMEGA are registered trademarks ofMicrochip Technology Incorporated in the USA and other countries

                              ClockWorks The Embedded Control Solutions Company EtherSynch Hyper Speed Control HyperLightLoad IntelliMOS mTouch Precision Edge and Quiet-Wire are registered trademarks of MicrochipTechnology Incorporated in the USA

                              Adjacent Key Suppression AKS Analog-for-the-Digital Age Any Capacitor AnyIn AnyOut BodyComchipKIT chipKIT logo CodeGuard CryptoAuthentication CryptoCompanion CryptoControllerdsPICDEM dsPICDEMnet Dynamic Average Matching DAM ECAN EtherGREEN In-Circuit SerialProgramming ICSP Inter-Chip Connectivity JitterBlocker KleerNet KleerNet logo Mindi MiWimotorBench MPASM MPF MPLAB Certified logo MPLIB MPLINK MultiTRAK NetDetach OmniscientCode Generation PICDEM PICDEMnet PICkit PICtail PureSilicon QMatrix RightTouch logo REALICE Ripple Blocker SAM-ICE Serial Quad IO SMART-IS SQI SuperSwitcher SuperSwitcher II TotalEndurance TSHARC USBCheck VariSense ViewSpan WiperLock Wireless DNA and ZENA aretrademarks of Microchip Technology Incorporated in the USA and other countries

                              SQTP is a service mark of Microchip Technology Incorporated in the USA

                              Silicon Storage Technology is a registered trademark of Microchip Technology Inc in other countries

                              GestIC is a registered trademark of Microchip Technology Germany II GmbH amp Co KG a subsidiary ofMicrochip Technology Inc in other countries

                              All other trademarks mentioned herein are property of their respective companies

                              ATBTLC1000

                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 55

                              copy 2018 Microchip Technology Incorporated Printed in the USA All Rights Reserved

                              ISBN 978-1-5224-2921-0

                              Quality Management System Certified by DNV

                              ISOTS 16949Microchip received ISOTS-169492009 certification for its worldwide headquarters design and waferfabrication facilities in Chandler and Tempe Arizona Gresham Oregon and design centers in Californiaand India The Companyrsquos quality system processes and procedures are for its PICreg MCUs and dsPICreg

                              DSCs KEELOQreg code hopping devices Serial EEPROMs microperipherals nonvolatile memory andanalog products In addition Microchiprsquos quality system for the design and manufacture of developmentsystems is ISO 90012000 certified

                              ATBTLC1000

                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 56

                              AMERICAS ASIAPACIFIC ASIAPACIFIC EUROPECorporate Office2355 West Chandler BlvdChandler AZ 85224-6199Tel 480-792-7200Fax 480-792-7277Technical SupporthttpwwwmicrochipcomsupportWeb AddresswwwmicrochipcomAtlantaDuluth GATel 678-957-9614Fax 678-957-1455Austin TXTel 512-257-3370BostonWestborough MATel 774-760-0087Fax 774-760-0088ChicagoItasca ILTel 630-285-0071Fax 630-285-0075DallasAddison TXTel 972-818-7423Fax 972-818-2924DetroitNovi MITel 248-848-4000Houston TXTel 281-894-5983IndianapolisNoblesville INTel 317-773-8323Fax 317-773-5453Tel 317-536-2380Los AngelesMission Viejo CATel 949-462-9523Fax 949-462-9608Tel 951-273-7800Raleigh NCTel 919-844-7510New York NYTel 631-435-6000San Jose CATel 408-735-9110Tel 408-436-4270Canada - TorontoTel 905-695-1980Fax 905-695-2078

                              Australia - SydneyTel 61-2-9868-6733China - BeijingTel 86-10-8569-7000China - ChengduTel 86-28-8665-5511China - ChongqingTel 86-23-8980-9588China - DongguanTel 86-769-8702-9880China - GuangzhouTel 86-20-8755-8029China - HangzhouTel 86-571-8792-8115China - Hong Kong SARTel 852-2943-5100China - NanjingTel 86-25-8473-2460China - QingdaoTel 86-532-8502-7355China - ShanghaiTel 86-21-3326-8000China - ShenyangTel 86-24-2334-2829China - ShenzhenTel 86-755-8864-2200China - SuzhouTel 86-186-6233-1526China - WuhanTel 86-27-5980-5300China - XianTel 86-29-8833-7252China - XiamenTel 86-592-2388138China - ZhuhaiTel 86-756-3210040

                              India - BangaloreTel 91-80-3090-4444India - New DelhiTel 91-11-4160-8631India - PuneTel 91-20-4121-0141Japan - OsakaTel 81-6-6152-7160Japan - TokyoTel 81-3-6880- 3770Korea - DaeguTel 82-53-744-4301Korea - SeoulTel 82-2-554-7200Malaysia - Kuala LumpurTel 60-3-7651-7906Malaysia - PenangTel 60-4-227-8870Philippines - ManilaTel 63-2-634-9065SingaporeTel 65-6334-8870Taiwan - Hsin ChuTel 886-3-577-8366Taiwan - KaohsiungTel 886-7-213-7830Taiwan - TaipeiTel 886-2-2508-8600Thailand - BangkokTel 66-2-694-1351Vietnam - Ho Chi MinhTel 84-28-5448-2100

                              Austria - WelsTel 43-7242-2244-39Fax 43-7242-2244-393Denmark - CopenhagenTel 45-4450-2828Fax 45-4485-2829Finland - EspooTel 358-9-4520-820France - ParisTel 33-1-69-53-63-20Fax 33-1-69-30-90-79Germany - GarchingTel 49-8931-9700Germany - HaanTel 49-2129-3766400Germany - HeilbronnTel 49-7131-67-3636Germany - KarlsruheTel 49-721-625370Germany - MunichTel 49-89-627-144-0Fax 49-89-627-144-44Germany - RosenheimTel 49-8031-354-560Israel - RarsquoananaTel 972-9-744-7705Italy - MilanTel 39-0331-742611Fax 39-0331-466781Italy - PadovaTel 39-049-7625286Netherlands - DrunenTel 31-416-690399Fax 31-416-690340Norway - TrondheimTel 47-7289-7561Poland - WarsawTel 48-22-3325737Romania - BucharestTel 40-21-407-87-50Spain - MadridTel 34-91-708-08-90Fax 34-91-708-08-91Sweden - GothenbergTel 46-31-704-60-40Sweden - StockholmTel 46-8-5090-4654UK - WokinghamTel 44-118-921-5800Fax 44-118-921-5820

                              Worldwide Sales and Service

                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 57

                              • Introduction
                              • Table of Contents
                              • 1 Getting Started
                                • 11 Software Prerequisites
                                  • 111 Installation Steps of Atmel Studio 7
                                    • 12 Software Setup
                                      • 121 Installation of Microchip SmartConnect application on a Mobile device
                                        • 13 ATBTLC1000 Embedded Firmware
                                        • 14 ATBTLC1000 Host Software API
                                        • 15 Hardware Prerequisites
                                          • 151 SMARTtrade SAM L21 Xplained Pro
                                          • 152 ATBTLC1000ZR Xplained Pro Extension board
                                            • 16 Hardware Setup
                                              • 2 Creating the Project and Initializing
                                                • 21 Creating Project from ASF
                                                • 22 Configuring ASF for ATBTLC1000-ZR
                                                • 23 Compiling and Testing the Project
                                                  • 3 Establishing Connection with Central Device
                                                    • 31 Configuring and Starting the Advertisement Process
                                                      • 311 Flags (AD Type 0x00)
                                                      • 312 Available Service UUID (AD Types 0x02 to 0x07)
                                                      • 313 Device Name (AD Types 0x08 to 0x09)
                                                        • 3131 Setting the Advertisement Payload (ble_advertisement_data_set)
                                                        • 3132 Starting the Advertisement Process (at_ble_adv_start)
                                                          • 314 Advertisement Process
                                                            • 3141 Starting the Advertisement Process
                                                                • 32 Managing GAP events
                                                                  • 321 Handling of Connected and Disconnected GAP Events
                                                                      • 4 SettingHandling of Pre-Defined Service
                                                                        • 41 Adding Device Info Service Component from ASF Wizard to Project
                                                                        • 42 Configuring and Loading Device Information Service
                                                                          • 421 Procedure to Configure and Load Device Info Service
                                                                              • 5 Setting up and Handling Custom Service
                                                                                • 51 Configuring and Loading the Custom Environment Service
                                                                                  • 511 Procedure to Configure and Load Custom Environment Service
                                                                                    • 52 Updating the Temperature Characteristic
                                                                                      • 521 Setting a Characteristic Value ( at_ble_characteristic_value_set)
                                                                                      • 522 Sending a Notification (at_ble_notification_send)
                                                                                      • 523 Sending Temperature Information Once in Every 10 Seconds to Central
                                                                                          • 6 Appendix A Software Solution - Pre-Defined Svc
                                                                                          • 7 Appendix B Software Solution - Custom Service
                                                                                          • 8 Document Revision History
                                                                                          • The Microchip Web Site
                                                                                          • Customer Change Notification Service
                                                                                          • Customer Support
                                                                                          • Microchip Devices Code Protection Feature
                                                                                          • Legal Notice
                                                                                          • Trademarks
                                                                                          • Quality Management System Certified by DNV
                                                                                          • Worldwide Sales and Service

                                23 Compiling and Testing the Project

                                1 Click the ldquo rdquo button ltF7gt to compile the project2 Verify that no build error appears in Atmel Studio output window

                                Figure 2-7 Atmel Studio Output Window

                                3 Connect the SAM L21 XPRO to PC (if not already done)4 To access the project properties go to Project gt

                                STARTUP_TEMPLATE_SAML21_XPLAINED_PRO_B1 PropertiesFigure 2-8 Compiling the Project

                                5 In project properties click the Tool tab and select the EDBG of SAM L21 Xplained Pro board asdebuggerprogrammerFigure 2-9 Selection of DebuggerProgrammer

                                6 Open any Terminal application (for example TeraTerm) Select the COM port enumerated on thePC and set the following parameters

                                ndash EDBG associated COM Port (Check Windows Device Manager)

                                ATBTLC1000Creating the Project and Initializing

                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 16

                                ndash Baudrate 115200ndash Parity Nonendash One Stop bitndash Enable Hardware Flow Control

                                7 Click to save the project ltCtrl+Sgt

                                8 Click rdquo to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt9 The initialization of the ATBTLC1000ZR module must return the Bluetooth Device Address and

                                Address typeFigure 2-10 Console Log Window

                                Note 1 If initialization fails make sure to verify the hardware configuration is aligned with the

                                description refer to 16 Hardware Setup2 The initialization of ATBTLC1000 takes few seconds due to patch download process

                                ATBTLC1000Creating the Project and Initializing

                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 17

                                3 Establishing Connection with Central DeviceThe Bluetooth Low Energy connectivity is added to the application that is used to connect with theBluetooth Low Energy central The first step is about the management of Bluetooth connection with acentral device When using ATBTLC1000 device this process is managed by dedicated API function callsassociated with ATBTLC1000 events handling

                                The interaction between Host MCU ATBTLC1000 and Bluetooth Low Energy central during connectionestablishment is as follows

                                Figure 3-1 Establishing Connection with Central Device

                                On host MCU side the management of the Bluetooth connection is performed through three main steps1 GAP callback registration2 Advertisement configuration3 ATBTLC1000 event handling

                                In the existing project main routine the integration of these steps are highlighted in red in the followingflowchart

                                ATBTLC1000Establishing Connection with Central Device

                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 18

                                Figure 3-2 Main Routine Flow Chart

                                31 Configuring and Starting the Advertisement ProcessThe Bluetooth Low Energy devices transmit advertisement packets to show their presence to nearbydevices The advertisement packet is sent periodically at a time interval defined by variableldquoadvintervalrdquo defined in Bluetooth SIG specification To avoid any collision with other wireless networksuch as Wi-Fireg a channel change is performed for each advertisement packet sent (data frequencyhopping) as illustrated in the following figureFigure 3-3 Advertisement Process

                                During advertisement the payload structure to be sent differs from application to application and is set byusing encapsulated packet data unit type information (PDU_TYPE)

                                ATBTLC1000Establishing Connection with Central Device

                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 19

                                Figure 3-4 PDU Advertising

                                The following table lists the different PDU types used according to device role

                                Advertising event types (PDU_TYPE) Broadcaster Observer Peripheral Central

                                Connectible undirected event (ADV_IND) Excluded Excluded Mandatory Excluded

                                Connectible directed event(ADV_DIRECT_IND) Excluded Excluded Optional Excluded

                                Non-connectible undirected event(ADV_NONCONN_IND) Mandatory Excluded Optional Excluded

                                Scannable undirected event (ADV_SCAN_IND) Optional Excluded Optional Excluded

                                As our device acts as a Bluetooth Low Energy peripheral the connectable undirected event (ADV_IND)advertising type is used See the following description about the ADV_IND advertisement packetFigure 3-5 ADV_IND Advertisement Packet

                                The ADV_IND payload contains different Advertisement Data types (AD0 - ADn) which provide specificinformation to the central device such as device short name Tx power level and list of availableservices UUIDs The number of advertisement data types that can be added to the advertisementpayload are limited by the advertisement payload size of 31 octets

                                Following is a list of advertisement data types that are commonly found in ADV_IND payload

                                ATBTLC1000Establishing Connection with Central Device

                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 20

                                311 Flags (AD Type 0x00)The flags describe the basic device capability such as BLE support BLE discoverable mode BREDRsupport and simultaneous BRED

                                312 Available Service UUID (AD Types 0x02 to 0x07)The Bluetooth Low Energy advertisement payloads are limited to 31 bytes Therefore only two 128-bitUUID values can be added to the payload For this purpose the specific AD types describe the length ofthe advertised UUID and provide information as to whether the payload contains a incompletecompletelist of UUID supported by the GATT server

                                bull 0x02 - Incomplete list of 16-bit UUIDs (adopted GATT services)bull 0x03 - Complete list of 16-bit UUIDs (adopted GATT services)bull 0x06 - Incomplete list of 128-bit UUIDs (custom GATT services)bull 0x07 - Complete list of 128-bit UUIDs (custom GATT services)

                                Note  When a 16-bit UUID is transmitted only the unique 2-byte value is sent The client knows that it isrequired to be injected into the base UUID For example the Health Thermometer Service is assigned as0x1809 so its equivalent UUID is 00001809-0000-1000-8000-00805F9B34FB

                                313 Device Name (AD Types 0x08 to 0x09)This AD type field is used to advertise the Local name of device in the network The Local name datatype value indicates if the name is complete or shortened If the name is shortened the complete namecan be read after the connection is established

                                bull 0x08 - Shortened Local Namebull 0x09 - Complete Local Name

                                Note 1 A shortened name contains only continuous characters from the beginning of the full name For

                                example if the device name is BT_Device_Name then the shortened name can beBT_Device or BT_Dev

                                2 Complete data type list are available at httpswwwbluetoothcomspecificationsassigned-numbersgeneric-access-profile

                                For management of advertisement process and cover the different configurations specified by SIG theATBTLC1000 Host driver provides the two functions elaborated in the following sections

                                In the application use these two functions to setup the following ADV_IN type payloadFigure 3-6 ADV_IN Type Payload Process

                                ATBTLC1000Establishing Connection with Central Device

                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 21

                                3131 Setting the Advertisement Payload (ble_advertisement_data_set)Prototype ndashat_ble_status_t at_ble_adv_data_set (uint8_t const const adv_datauint8_t adv_data_lenuint8_t const const scan_resp_datauint8_t scan_response_data_len)

                                Description ndash Set clear or update the advertisement and scan response data

                                Parameters ndash

                                bull adv_data ndash Raw data to be placed in advertisement packetbull adv_data_len ndash Data length for adv_data Max size 28 bytes (3 bytes are reserved to set

                                advertising AD type flags based on the selected Advertising mode and the user is not required toconfigure AD type flags in the advertisement payload)

                                bull scan_resp_data ndash Raw data to be placed in the scan response packet If NULL no changes aremade to the current scan response packet data

                                bull scan_response_data_len ndash Data length for scan_resp_data Max size 31 bytes

                                Return ndash Execution Status

                                This function requires a parameter raw adv_data to be sent to central Following is an example of itsdefinition

                                static uint8_t adv_data[] = 0x11 AD1 length = 170x03 AD1 Type = Complete list of 128-bit UUIDs0x1b0xc50xd50xa50x020x000xa60x87 AD1 = UUID MSBs0xe50x110x360x390xc00xba0x5a0xf00x0A AD2 Length = 100x09 AD2 Type = Complete local NamelsquoMrsquorsquoyrsquorsquo_rsquorsquoDrsquorsquoErsquorsquoVrsquo AD2 = ldquoMy_DEVrdquo

                                3132 Starting the Advertisement Process (at_ble_adv_start)Prototype ndashat_ble_status_t at_ble_adv_start (at_ble_adv_type_t typeat_ble_adv_mode_t modeat_ble_addr_t peer_addrat_ble_filter_type_t filtereduint16_t intervaluint16_t timeoutbool disable_randomness)

                                Description ndash Start advertisement process

                                Parameters ndash

                                bull type ndash Advertising type to be used can bendash AT_BLE_ADV_TYPE_UNDIRECTEDndash AT_BLE_ADV_TYPE_DIRECTEDndash AT_BLE_ADV_TYPE_SCANNABLE_UNDIRECTEDndash AT_BLE_ADV_TYPE_NONCONN_UNDIRECTEDndash AT_BLE_ADV_TYPE_DIRECTED_LDCndash AT_BLE_ADV_TYPE_SCAN_RESPONSE

                                bull mode ndash Advertising mode to be used can be

                                ATBTLC1000Establishing Connection with Central Device

                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 22

                                ndash AT_BLE_ADV_NON_DISCOVERABLEndash AT_BLE_ADV_GEN_DISCOVERABLEndash AT_BLE_ADV_LIM_DISCOVERABLEndash AT_BLE_ADV_BROADCASTER_MODE

                                bull peer_addr ndash Specify peer address when advertising type is AT_BLE_ADV_TYPE_DIRECTEDbull filtered ndash

                                ndash AT_BLE_ADV_FP_ANY ndash Allow scan and connection requests from anyonendash AT_BLE_ADV_FP_FILTER_SCANREQ ndash Allow scan request from White List devices onlyndash AT_BLE_ADV_FP_FILTER_CONNREQ ndash Allow connection request from White List devices

                                onlyndash AT_BLE_ADV_FP_FILTER_BOTH ndash Allow scan and connection requests from White List

                                devices onlybull interval ndash Advertisement interval (in 0625 ms units)bull timeout ndash Advertising timeout between 0x0001 and 0x028F in scale of seconds This parameter

                                must be set to 0 if type equals AT_BLE_ADV_TYPE_DIRECTEDbull disable_randomness ndash When disabled advertisements are performed at the exact interval

                                without adding random 10 ms tempo

                                Return ndash Execution Status

                                314 Advertisement ProcessIn this assignment the advertisement process is performed in the following configuration

                                bull Undirected (Type AT_BLE_ADV_TYPE_UNDIRECTED)bull Discoverable (Mode AT_BLE_ADV_GEN_DISCOVERABLE)bull No peer Address (peer_addr = NULL)bull No filtering (filtered = AT_BLE_ADV_FP_ANY)bull Advertisement interval 1s (interval = 1600)bull Maximum timeout (timeout 655)bull Randomness enabled (disable_randomness = FALSE)

                                3141 Starting the Advertisement Process1 Open startup_templatec file2 Declare the following ble_status global variable in startup_templatec as volatile

                                include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehvolatile at_ble_status_t ble_status

                                3 Declare the following adv_data global variable in startup_templatec as staticstatic uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD)0x09 AD2 Type = Complete local Name

                                ATBTLC1000Establishing Connection with Central Device

                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 23

                                My_SENS AD2 = ldquoMy_SENSrdquo

                                Note 1 The name of the device is to be changed (AD2 field)2 According to the new name AD2 length must be adapted to new AD2 content

                                4 Add the following start_advertisement function in startup_templatec prototype for thefunction void start_advertisement (void) also this can be added to avoid warningsvoid start_advertisement (void)printf(n Assignment 21 Start Advertisement)Set advertisement datable_status = at_ble_adv_data_set(adv_datasizeof(adv_data)NULL0)Start Advertisementble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550)if(ble_status = AT_BLE_SUCCESS)printf(n Failed to start advertisement)

                                5 Start the advertisement process by adding the following highlighted code to the application mainroutineint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Start Advertising process start_advertisement() Register PrimaryIncluded service in case of GATT Server while(true) Write application task

                                6 Click to save the project ltCtrl+Sgt

                                7 Click button to compile the project ltF7gt8 Verify that no build error appears in Atmel Studio output window

                                Figure 3-7 Atmel Studio Output Window

                                ATBTLC1000Establishing Connection with Central Device

                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 24

                                9 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt10 Open Microchip SmartConnect Application on Android or iOS device and tap START SCAN button

                                Note  The device must appear in Microchip SmartConnect Application

                                Figure 3-8 Microchip SmartConnect Application

                                11 Terminal must display the following Log outputFigure 3-9 Log Output Window

                                32 Managing GAP eventsThe management of the Bluetooth connection at the host MCU level is done through reception andhandling of events reported by the ATBTLC1000 These events are generated by ATBTLC1000 GAPGATT and L2CAP layers to notify the host about the ongoing Bluetooth interaction with other devices inits vicinity

                                ATBTLC1000Establishing Connection with Central Device

                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 25

                                To manage events coming from the ATBTLC1000 module the host driver must provide able_mgr_events_callback_handler function that allows registration of application callback functionto be executed on each event reported by the ATBTLC1000 module

                                Prototype ndashbool ble_mgr_events_callback_handler(ble_mgr_event_cb_t event_cb_typeble_mgr_event_t event_typeconst voidble_event_handler)

                                Description ndash Used by ProfileServiceApplication to register the Bluetooth Low Energy eventsrsquocallbacks

                                Parameters ndash

                                event_cb_type ndash types of actions to perform on callbacks can be either

                                REGISTER_CALL_BACK or

                                UNREGISTER_CALL_BACKevent_type ndash Any one of the event types can be used

                                BLE_GAP_EVENT_TYPEBLE_GATT_CLIENT_EVENT_TYPEBLE_GATT_SERVER_EVENT_TYPEBLE_L2CAP_EVENT_TYPEBLE_GATT_HTPT_EVENT_TYPEBLE_DTM_EVENT_TYPEBLE_CUSTOM_EVENT_TYPEble_event_handler ndash pointer to handler list

                                Structure ble_gap_event_cb_t defines the GAP callbacks Similarly structuresble_gatt_client_event_cb_t and ble_gatt_server_event_cb_t define the callbacks of GATTevents

                                typedef struct ble_gap_event_cb BLE Undefined events received from ATBTLC1000 which is not handled in Libraryble_event_callback_t undefined BLE scan information contains the peer device scan information Refer ref at_ble_scan_info_tble_event_callback_t scan_info Once the BLE scan timeout or scan stop triggers the scan report event Refer ref at_ble_scan_report_tble_event_callback_t scan_report Advertisement complete event Refer ref at_ble_adv_cmp_evt_tble_event_callback_t advt_cmp Advertisement report in case of advertisement stopped due to advertisement timeout Refer ref at_ble_adv_report_tble_event_callback_t adv_report BLE device own random address changed event Refer ref at_ble_rand_addr_changed_tble_event_callback_t rand_addr_changed BLE connected event device connected to peer device Refer ref at_ble_connected_tble_event_callback_t connected BLE disconnected event device disconnected from peer device Refer ref at_ble_disconnected_tble_event_callback_t disconnected Connection parameter update done on peer device and own device Refer ref at_ble_conn_param_update_done_t

                                ATBTLC1000Establishing Connection with Central Device

                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 26

                                ble_event_callback_t conn_parameter_update_done Connection parameter update request from peer device Refer ref at_ble_conn_param_update_request_tble_event_callback_t conn_param_update_request Pair complete event as part of end of pairing process Refer ref at_ble_pair_done_tble_event_callback_t pair_done Pair request event from Central device Refer ref at_ble_pair_request_tble_event_callback_t pair_request Slave security request received from peer Peripheral device Refer ref at_ble_slave_sec_request_tble_event_callback_t slave_sec_request Pair Key request event from Peer central device Refer ref at_ble_pair_key_request_tble_event_callback_t pair_key_request encryption request comes from the peer device Needs to supply the bonding information which is stored earlier ref at_ble_encryption_request_tble_event_callback_t encryption_request encryption status changed event received from SMP once the encryption is started ref at_ble_encryption_status_changed_tble_event_callback_t encryption_status_changed Event triggered once the Resolve random address is resolved using supplied IRKs ref at_ble_resolv_rand_addr_status_tble_event_callback_t resolv_rand_addr_status Event is triggered once the connection signature information indication received ref at_ble_sign_counter_tble_event_callback_t sign_counters_ind Peer attribute information indication received Event ref at_ble_peer_att_info_ind_tble_event_callback_t peer_att_info_ind Peer device channel map received indication ref at_ble_channel_map_tble_event_callback_t con_channel_map_indble_gap_event_cb_t

                                Note  Callback definition is application-specific If the application layer requires a specific event callbackthen the specific member of the structure is to be assigned with the address of the callback function

                                In this assignment two callback functions on Connected and Disconnected GAP events are usedThis allows the application to restart the advertising process on Disconnect manage connectioninformation and startstop of sensor data update

                                321 Handling of Connected and Disconnected GAP Events1 Open the startup_templatec file2 Define the following software flags as global variables in startup_templatec file volatile

                                bool timer_flag = false and volatile bool connected_flag = false3 Declare and implement the following ble_connected_cb function in the

                                startup_templatec file Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param)printf(n Assignment 22 Application connected )connected_flag = trueALL_UNUSED(param)return AT_BLE_SUCCESS

                                4 Declare and implement the following ble_disconnected_cb function instartup_templatec file Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param)printf(n Assignment 22 Application disconnected )connected_flag = falsestart_advertisement()ALL_UNUSED(param)return AT_BLE_SUCCESS

                                ATBTLC1000Establishing Connection with Central Device

                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 27

                                5 Declare the following static GAP callback structure in ldquostartup_templatecrdquo filestatic const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTEDdisconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                                6 Add the following register_btlc1000_callbacks function in startup_templatec Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void) Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks)ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACKBLE_GAP_EVENT_TYPEampapp_gap_handle)if (ble_status = true)printf(nError when Registering ATBTLC1000 callbacks)

                                7 Add the register_btlc1000_callbacks function call prior to start advertisement in theapplication main routineint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Gap Callbacks register_btlc1000_callbacks ( ) Start Advertising process start_advertisement() Register PrimaryIncluded service in case of GATT Server while(true) Write application task

                                8 Add the ble_event_task function call in the project main loop to handle the different incomingevents from ATBTLC1000while(true)ble_event_task()

                                9 Press button ltF7gt to compile the project and verify that no build error appear in the AtmelStudio output window

                                ATBTLC1000Establishing Connection with Central Device

                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 28

                                Figure 3-10 Atmel Studio Output Window

                                10 Click ldquo rdquo to save the project ltCtrl+Sgt

                                11 Click ldquo rdquo to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt and checkcorrect initialization of the ATBTLC1000

                                12 Open the Microchip SmartConnect application on Androidtrade or iOS device13 Press the ltStart Scangt button and pair peripherals by selecting them in the device list (pass key

                                123456)Note 

                                1 Pairing event handling is carried out by ble_managerc Refer toble_pair_key_request_handler() for code implementation The default pass key of123456 is also fixed inside this function This can be changed here

                                Figure 3-11 Console Log Window

                                Note  After peripheral pairing no services information are displayed in Microchip SmartConnectapplication as no service is currently defined and started on peripheral side

                                ATBTLC1000Establishing Connection with Central Device

                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 29

                                4 SettingHandling of Pre-Defined ServiceThe management of services are done in the GATT layer of the ATBTLC1000 ROM coded Bluetooth LowEnergy Stack The GATT transactions are based on high-level nested objects called Profiles Servicesand Characteristics stored in SRAM memory of ATBTLC1000 device This assignment adds the pre-defined service of information service from ASF library

                                Figure 4-1 ATBTLC1000 GATT Layers

                                bull ProfilesProfiles are not available in the Bluetooth Low Energy peripheral they are simply a pre-definedcollection of services that have been compiled by either the Bluetooth SIG (adopted GATT basedprofile) or by the application developer (custom profiles) For example the Heart Rate Profilecombines the Heart Rate Service and the Device Information Service

                                Note  The complete list of officially adopted GATT-based profiles is available on the BluetoothDeveloper Portal

                                bull ServicesA service is a collection of data and associated behaviors which accomplish a particular function orfeature of a device or portions of a device A service may reference other primary or secondaryservices andor a set of characteristics that make up the service Each service distinguishes itselffrom other services by means of a unique numeric ID called as UUID which can be either 16-bit(for officially adopted Bluetooth Low Energy Services) or 128-bit (for custom services)

                                Note  A full list of officially adopted services and their UUID are seen on the Bluetooth DeveloperPortal

                                bull CharacteristicsA characteristic is the lowest level concept in GATT transactions It contains a single data point withdifferent attributes such as notify read or write capabilities Similar to Services each characteristiccan be distinguished by a SIG-defined adopted UUID (16-bit) or custom (128-bit) UUID This UUIDensures interoperability across Bluetooth Low Energy devices The characteristics are important tointeract with in a Bluetooth Low Energy network In addition to standard UUID the custom UUID isused in case of specific application When characteristics with custom UUID are used in a devicethen it will be interoperable only with those devices that support these characteristics with customUUID

                                ATBTLC1000SettingHandling of Pre-Defined Service

                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 30

                                In this assignment the following steps are added to the Host MCU application to set up and handle adevice information service within the ATBTLC1000 module The following steps are added to the startupproject

                                bull Adding device info service component from ASFbull Configuring and loading the service

                                Figure 4-2 Device Information Service

                                41 Adding Device Info Service Component from ASF Wizard to ProjectTo use the ldquoofficially adopted GATT-based profilesrdquo from SIG ASF provides Bluetooth Low Energy servicecomponents including init functions that pre-define services in Host memory

                                Note  Before starting this assignment be sure to follow the steps mentioned in 2 Creating the Projectand Initializing and 3 Establishing Connection with Central Device

                                1 Click ASF gt ASF Wizard2 Search for ldquoBLE-Device Information Servicesrdquo and then click Add

                                ATBTLC1000SettingHandling of Pre-Defined Service

                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 31

                                Figure 4-3 Available Modules

                                3 Now ldquoBLE-Device Information Servicesrdquo (component) appears in ldquoSelected ModulesrdquoFigure 4-4 Selected Modules

                                4 Click Apply to add the component to the projectFigure 4-5 Adding the Modules to Project

                                5 The ldquoDevice Information Servicerdquo component is added to the project and is confirmed bydevice_information folder added in Solution Explorer

                                ATBTLC1000SettingHandling of Pre-Defined Service

                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 32

                                Figure 4-6 Device Information Service Added to Project

                                42 Configuring and Loading Device Information ServiceThe ATBTLC1000 Host driver provides a set of GATT functions that allows storing and updating theservices in ATBTLC1000 memories

                                Prototype at_ble_status_t at_ble_primary_service_define(at_ble_uuid_t uuidat_ble_handle_t service_handleat_ble_included_service_t included_service_listuint16_t included_service_countat_ble_characteristic_t charactristic_listuint16_t charactristic_count)

                                Description Defines a new primary service along with its included services and characteristics inATBTLC1000

                                Parameters

                                bull Uuid [In] ndash primary service UUIDbull service_handle [Out] ndash Service handle is returned herebull included_service_list [In] ndash an array of included service referencesbull included_service_count [In] ndash number of elements in included_service_listbull charactristic_list [InOut] ndash an array of characteristics included in the service this array

                                is updated with respective characteristics handlesbull charactristic_count[In] ndash number of elements in charactristic_list

                                Return Execution Status

                                This function requires an argument as GATT description structure of the service that is implemented Thepreviously added Device Info service component provides Bluetooth Low Energy service middlewareincluding the init functions that predefine the services See below ldquodis_init_servicerdquo from device infoBLE service (device_infohc)

                                Prototype ndash void dis_init_service(dis_gatt_service_handler_t device_info_serv)Description ndash Initialize the device information service handler in the host MCU memory

                                Parameters ndash

                                ATBTLC1000SettingHandling of Pre-Defined Service

                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 33

                                bull device_info_serv [Inout] pointer to device info GATT description handler to beupdated

                                Return None

                                Here is a picture of GATT device info service descriptor definition in Host memory

                                device_info_serv-gtserv_handle = 0device_info_serv-gtserv_uuidtype = AT_BLE_UUID_16device_info_serv-gtserv_uuiduuid[0] = (uint8_t) DIS_SERVICE_UUIDdevice_info_serv-gtserv_uuiduuid[1] = (uint8_t) (DIS_SERVICE_UUID gtgt 8)Characteristic Info for Manufacturer Name Stringdevice_info_serv-gtserv_chars[0]char_val_handle = 0 handle stored here device_info_serv-gtserv_chars[0]uuidtype = AT_BLE_UUID_16device_info_serv-gtserv_chars[0]uuiduuid[0] = (uint8_t) IS_CHAR_MANUFACTURER_NAME_UUID UUID Manufacturer Name String device_info_serv-gtserv_chars[0]uuiduuid[1] = (uint8_t) (DIS_CHAR_MANUFACTURER_NAME_UUID gtgt 8) UUID Manufacturer Name String device_info_serv-gtserv_chars[0]properties = AT_BLE_CHAR_READ Properties memcpy(char_valuemanufacturer_nameDEFAULT_MANUFACTURER_NAMEDIS_CHAR_MANUFACTURER_NAME_INIT_LEN)device_info_serv-gtserv_chars[0]init_value = char_valuemanufacturer_namedevice_info_serv-gtserv_chars[0]value_init_len = DIS_CHAR_MANUFACTURER_NAME_INIT_LENdevice_info_serv-gtserv_chars[0]value_max_len = DIS_CHAR_MANUFACTURER_NAME_MAX_LENif BLE_PAIR_ENABLEdevice_info_serv-gtserv_chars[0]value_permissions = AT_BLE_ATTR_READABLE_REQ_AUTHN_NO_AUTHR permissions elsedevice_info_serv-gtserv_chars[0]value_permissions = AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR permissions endifdevice_info_serv-gtserv_chars[0]user_desc = NULL user defined name device_info_serv-gtserv_chars[0]user_desc_len = 0device_info_serv-gtserv_chars[0]user_desc_max_len = 0device_info_serv-gtserv_chars[0]user_desc_permissions = AT_BLE_ATTR_NO_PERMISSIONS user description permissionsdevice_info_serv-gtserv_chars[0]client_config_permissions = AT_BLE_ATTR_NO_PERMISSIONS client config permissionsdevice_info_serm hdsv-gtserv_chars[0]server_config_permissions = AT_BLE_ATTR_NO_PERMISSIONS server config permissionsdevice_info_serv-gtserv_chars[0]user_desc_handle = 0 user desc handlesdevice_info_serv-gtserv_chars[0]client_config_handle = 0 client config handlesdevice_info_serv-gtserv_chars[0]server_config_handle = 0 server config handlesdevice_info_serv-gtserv_chars[0]presentation_format = NULL presentation format

                                Note  In case of custom service the above definition initialization must be taken care of by thedeveloper

                                421 Procedure to Configure and Load Device Info Service1 Include device info service header file (device_infoh) at the beginning of

                                startup_templatec fileinclude ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehinclude device_infoh

                                2 Define a device info service handler as global in startup_templatec file Serviceshandlers dis_gatt_service_handler_t dis_service_handler

                                ATBTLC1000SettingHandling of Pre-Defined Service

                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 34

                                3 Add dis_init_service and at_ble_primary_service_define functions as called abovethe advertisement start in main routine Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service)dis_init_service (ampdis_service_handler) Define the primary service in the GATT server database if ((dis_primary_service_define (ampdis_service_handler)) = AT_BLE_SUCCESS)printf(Device Information Service definition failed) Start Advertising process start_advertisement()

                                4 Click to save the project ltCtrl+Sgt and compile the project by pressing button ltF7gt5 Verify that no build error appears in Atmel Studio output window

                                Figure 4-7 Atmel Studio Output Window

                                6 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt7 Open ldquoMicrochip SmartConnectrdquo application on Android or iOS device8 Press ltStart Scangt button and connect to peripheral

                                Note  The device name is a characteristic and contains the name of the device This device namecan be read by the central device to know the name of the device in order to differentiate thedevices This is being set using at_ble_device_name_set()API The device name is set bydefault when ble_device_init is called and the value is pre-defined using BLE_DEVICE_NAMEThe device name can also be sent as part of advertisement payload to be same as the oneconfigured in at_ble_adv_data_set() API It is the responsibility of users to keep the devicename set in advertisement payload the same as that configured inat_ble_device_name_set()

                                9 The Service must now be visible after pairing with peripheral under Microchip SmartConnectapplication

                                ATBTLC1000SettingHandling of Pre-Defined Service

                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 35

                                Figure 4-8 Service List in Microchip SmartConnect Application

                                Note  If the pairing of ATBTLC1000 with Microchip Smart connect is not successful then removethe pairing information from mobile by selecting ldquoForget Devicerdquo from the mobile settings Thereason for this is that the mobile app stores the previous pairing information but the ATBTLC1000device lost the previous pairing information due to RESET since it was stored on temporary storage(RAM)

                                10 The serial terminal must display the following log output windowFigure 4-9 Console Log Window

                                ATBTLC1000SettingHandling of Pre-Defined Service

                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 36

                                5 Setting up and Handling Custom ServiceThe previous assignment describes the handling of Bluetooth Low Energy SIG defined device infoservice which is the predefined service available in ASF component This assignment describes thecustom service So the service initialization needs to be implemented In the context of customizedenvironment service the following service description is pushed in ATBTLC1000 memory

                                Figure 5-1 Custom Service

                                Custom Environment Service Description

                                bull UUID type ndash Custom UUID (128-bit)bull UUID ndash 1bc5d5a5-0200-a687-e511-3639c1ba5af0

                                Characteristic 0 (Temperature)

                                bull User Description ndash Temperaturebull UUID type ndash Custom UUID (128-bit)bull UUID ndash 1bc5d5a5-0200-a687-e511-3639d8ba5af0bull Properties ndash Read Notifybull Value permission ndash No authorization requiredbull Client config permission ndash No permissionbull Server config permission ndash No permission

                                Note  In this definition UUIDs are generated randomly Custom servicescharacteristics are free to useany 128-bit UUID less than the base UUID There is no reserved space for vendors to use 16-bit or 32-bitUUIDs

                                With this definition any temperature change is notified to the central The notify mechanism allows thecentral to know when the data changes When notify property of the Client Characteristic ConfigurationDescriptor is enabled by the central and the device writes the new value then this updated value isautomatically sent to the central through a notification The central is not required to send readcharacteristic commands explicitly to the peripheral (GATT server)

                                To setup and handle the custom environment service in ATBTLC1000 module the following steps areadded to the Host MCU application

                                bull Configure and load the custom servicebull Update Temperature characteristic and notify to the central devicebull Receive and handle notification from the Host device

                                ATBTLC1000Setting up and Handling Custom Service

                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 37

                                Figure 5-2 Custom Service Flowchart

                                51 Configuring and Loading the Custom Environment ServiceThe ATBTLC1000 Host driver provides the following set of GATT functions that allows it to push andupdate the service descriptions in the ATBTLC1000 SRAM memory

                                Note  Before starting this assignment be sure to follow the steps mentioned in 2 Creating the Projectand Initializing and 3 Establishing Connection with Central Device

                                Prototype ndashat_ble_status_t at_ble_primary_service_define(at_ble_uuid_t uuidat_ble_handle_t service_handleat_ble_included_service_t included_service_listuint16_t included_service_countat_ble_characteristic_t charactristic_listuint16_t charactristic_count)

                                Description ndash Defines a new primary service along with its included services and characteristics inATBTLC1000 module

                                Parameters

                                bull Uuid [In] ndash primary service UUIDbull service_handle [Out] ndash service handle is returned herebull included_service_list [In] ndash array of included service referencesbull included_service_count [In] ndash number of elements in included_service_listbull charactristic_list [InOut] ndash an array of characteristics included in the service this array

                                is update with respective characteristics handlesbull charactristic_count[In] ndash number of elements in charactristic_list

                                ATBTLC1000Setting up and Handling Custom Service

                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 38

                                Return ndash Execution Status

                                bull Characteristics ndashndash Characteristics definition is done through specific array of following

                                ldquoat_ble_characteristic_trdquo structure instancestypedef structat_ble_handle_t char_val_handle Handler (returned during service initialisation)at_ble_uuid_t uuid Characteristic UUID (type and value)at_ble_char_properties_t propertiesCharac Properties (read write notify)uint8_t init_value initial valueuint16_t value_init_len initial value lengthuint16_t value_max_len value max lengthat_ble_attr_permissions_t value_permissions access authorization and authenticationuint8_t user_desc User descriptionuint16_t user_desc_len User description lengthuint16_t user_desc_max_len User description max lengthat_ble_char_presentation_t presentation_format Presentation formatat_ble_attr_permissions_t user_desc_permissions User description permissionat_ble_attr_permissions_t client_config_permissions client permissionat_ble_attr_permissions_t server_config_permissions server permissionat_ble_handle_t user_desc_handle description handlerat_ble_handle_t client_config_handle Client config handlerat_ble_handle_t server_config_handle Server config handler at_ble_characteristic_t

                                511 Procedure to Configure and Load Custom Environment Service1 Define the following service UUID and characteristic UUID in startup_templatec file

                                define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

                                2 Define the following environment service handler and characteristics variable as global instartup_templatec file Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

                                3 Add the following service initialization function custom_environment_service_init instartup_templatecvoid custom_environment_service_init(void) at_ble_uuid_t environment_service_uuiduint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUIDuint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperatureenvironment_service_characs[0]user_desc_len = 10environment_service_characs[0]user_desc_max_len = 10environment_service_characs[0]uuidtype = AT_BLE_UUID_128memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16)environment_service_characs[0]properties = AT_BLE_CHAR_READ |AT_BLE_CHAR_NOTIFYenvironment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature valueenvironment_service_characs[0]value_permissions =(AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuidampenvironment_service_handlerNULL0environment_service_characs1)=AT_BLE_SUCCESS)printf(n Assignment 41 Failed to Initialize custom environment service)

                                ATBTLC1000Setting up and Handling Custom Service

                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 39

                                elseprintf(n Assignment 41 Initialize custom environment service)

                                4 Declare and implement the following GATT event callback functioncustom_char_changed_app_event in startup_templatec file If a client (central) enablesnotifications for a server the server (peripheral) receives an AT_BLE_CHARACTERISTIC_CHANGEDevent and this event callback is called Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

                                5 Declare and implement the following custom_notification_confirmation_handlerfunction in startup_templatec file Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param)at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )paramif (event_param-gtstatus == AT_BLE_SUCCESS)printf(n Assignment 41Notification Successfully sent over the air) else printf(n Assignment 41Sending Notification over the air failed)return AT_BLE_SUCCESS

                                6 Declare the following GATT server callback structure in startup_templatec file Thisassignment uses two GATT callbacksstatic const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handlercharacteristic_changed = custom_char_changed_app_event

                                7 Add the following register_gatt_server_callbacks function in startup_templatec toregister GATT server callback for notification confirmation event Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks)ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACKBLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle)if (ble_status = true)printf(nError when Registering ATBTLC1000 callbacks)

                                8 Add custom_environment_service_init and register_gatt_server_callbacksfunction calls prior to start advertisement in the application main routine to initialize custom serviceand to register the GATT server callbacksint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()

                                ATBTLC1000Setting up and Handling Custom Service

                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 40

                                endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks() Custom service init custom_environment_service_init ( ) Register Gatt server callbacks register_gatt_server_callbacks ( ) Start Advertising process start_advertisement()while(true)ble_event_task()

                                9 Click to save the project ltCtrl+Sgt

                                10 Compile the project by pressing button ltF7gt11 Verify that no build error appears in the Atmel Studio output window

                                Figure 5-3 Atmel Studio Output Window

                                12 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt13 Open the ldquoMicrochip SmartConnectrdquo application on Android or iOS device14 Connect and pair to the peripheral (pass key 123456)15 Custom service must now be visible after pairing with peripheral under Microchip SmartConnect

                                application

                                ATBTLC1000Setting up and Handling Custom Service

                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 41

                                Figure 5-4 Service List in Microchip SmartConnect Application

                                Note  Custom service is displayed as unknown service in the above figure as this service is not aSIG-defined service

                                Figure 5-5 General Information

                                16 Serial terminal client must display the following Log output

                                ATBTLC1000Setting up and Handling Custom Service

                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 42

                                Figure 5-6 Log Output Window

                                52 Updating the Temperature CharacteristicIn the previous assignment the custom Temperature characteristic is defined with a notify attribute Thistype of attribute requires notification to be sent to central when a new characteristic value is availableThe update of any ldquonotifyrdquo characteristic value is based on following interaction between the Host MCUand the ATBTLC1000Figure 5-7 Characteristic Notification

                                521 Setting a Characteristic Value ( at_ble_characteristic_value_set)Prototype ndashat_ble_status_t at_ble_characteristic_value_setat_ble_handle_t handleuint8_t valueuint16_t len)

                                Description ndash Sets a characteristic value in ATBTLC1000 memory

                                Parameters ndash

                                ATBTLC1000Setting up and Handling Custom Service

                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 43

                                bull handle [inout] ndash Pointer to Characteristic handle to be changedbull value [in] ndash New valuebull len [in] ndash Value length in bytes

                                Return ndash Execution Status

                                522 Sending a Notification (at_ble_notification_send)Prototype ndashat_ble_status_t at_ble_notification_send(at_ble_handle_t conn_handleat_ble_handle_t attr_handle)

                                Description ndash Sends a Notification

                                Parameters ndash

                                bull conn_handle[in] ndash handle of the connection to be notifiedbull attr_handle [in] ndash handle of the attribute originating the notification

                                Return ndash Execution Status

                                523 Sending Temperature Information Once in Every 10 Seconds to Central1 Modify the following ldquotimer_callback_fnrdquo callback function from the startup_templatec

                                filestatic void timer_callback_fn(void)timer_flag = true

                                2 hw_timer_init()in main routine of startup_templatec initializes the hardware timer3 If a client (Central) enables the notifications for a server the server (Peripheral) receives an

                                AT_BLE_CHARACTERISTIC_CHANGED event callback then start the periodic 10 second timer forsending the notification Add the following code in previously definedcustom_char_changed_app_event function Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))timer_flag = falsehw_timer_start(10)printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

                                4 Declare the following Temperature_value global variable in startup_templatec staticuint8_t Temperature_value = 25 as static

                                5 Add the following send_temperature_notification function in startup_templatec tosend temperature every 10 seconds Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++

                                ATBTLC1000Setting up and Handling Custom Service

                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 44

                                if(Temperature_value gt 75)Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set(environment_service_characs[0]char_val_handle(uint8_t )ampTemperature_valuesizeof(Temperature_value))ble_status = at_ble_notification_send(0environment_service_characs[0]char_val_handle)if(ble_status = AT_BLE_SUCCESS)printf(fail to send temperature update notification )

                                6 Add the following code in main routine to send temperature data every 10 secondswhile (1) ble_event_task()if(connected_flag == true ampamp timer_flag == truetimer_flag = falsesend_temperature_notification()

                                7 Click to save the project ltCtrl+Sgt

                                8 Compile the project by pressing the button ltF7gt9 Verify that no build error appears in Atmel Studio output window

                                Figure 5-8 Atmel Studio Output Window

                                10 Click to program the project binary on the L21 Xplained XSTK11 Open ldquoMicrochip SmartConnectrdquo Application on Android or iOS device12 Connect and pair to the peripheral (pass key 123456)13 Click NOTIFY to start the notification14 Temperature information in HEX values must be displayed in Microchip SmartConnect application

                                ATBTLC1000Setting up and Handling Custom Service

                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 45

                                Figure 5-9 Notification Window

                                15 Serial terminal must display the following log outputFigure 5-10 Log Output Window

                                ATBTLC1000Setting up and Handling Custom Service

                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 46

                                6 Appendix A Software Solution - Pre-Defined SvcThe following is the code implementation for handling of pre-defined service done in 4 SettingHandlingof Pre-Defined Service

                                - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehinclude device_infoh

                                volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false Services handlers dis_gatt_service_handler_t dis_service_handler

                                static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

                                void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                                Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                                Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                                static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                                Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void) Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks)

                                ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 47

                                ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                timer callback function static void timer_callback_fn(void) Add timer callback functionality here

                                void button_cb(void) Add button callback functionality here

                                int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                                Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                                DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks()

                                Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service) dis_init_service(ampdis_service_handler) Define the primary service in the GATT server database if((dis_primary_service_define(ampdis_service_handler)) = AT_BLE_SUCCESS) printf(Device Information Service definition failed)

                                Start Advertising process start_advertisement() while(true) ble_event_task()

                                ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 48

                                7 Appendix B Software Solution - Custom ServiceThe following is the code implementation for handling of pre-defined service done in 5 Setting up andHandling Custom Service

                                - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templateh

                                volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false

                                static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

                                define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0

                                define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

                                Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

                                void custom_environment_service_init(void) at_ble_uuid_t environment_service_uuid uint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUID uint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128 memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperature environment_service_characs[0]user_desc_len = 10 environment_service_characs[0]user_desc_max_len = 10 environment_service_characs[0]uuidtype = AT_BLE_UUID_128 memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16) environment_service_characs[0]properties = AT_BLE_CHAR_READ | AT_BLE_CHAR_NOTIFY environment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature value environment_service_characs[0]value_permissions = (AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuid ampenvironment_service_handlerNULL0 environment_service_characs1)=AT_BLE_SUCCESS) printf(n Assignment 41 Failed to Initialize custom environment service) else printf(n Assignment 41 Initialize custom environment service)

                                Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param) at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )param if (event_param-gtstatus == AT_BLE_SUCCESS) printf(n Assignment 41Notification Successfully sent over the air)

                                ATBTLC1000Appendix B Software Solution - Custom Service

                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 49

                                else printf(n Assignment 41Sending Notification over the air failed) return AT_BLE_SUCCESS

                                static at_ble_status_t custom_char_changed_app_event(void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle -gt char_new_value[0])) timer_flag = false hw_timer_start(10) printf(n Assignment 41Characteristic changed event) return AT_BLE_SUCCESS

                                static const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handler characteristic_changed = custom_char_changed_app_event

                                Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                                Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                                Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                                static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                                Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void)

                                ATBTLC1000Appendix B Software Solution - Custom Service

                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 50

                                Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                timer callback function static void timer_callback_fn(void) Add timer callback functionality here timer_flag = true

                                void button_cb(void) Add button callback functionality here

                                static uint8_t Temperature_value = 25

                                Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++ if(Temperature_value gt 75) Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set( environment_service_characs[0]char_val_handle (uint8_t )ampTemperature_value sizeof(Temperature_value)) ble_status = at_ble_notification_send(0 environment_service_characs[0]char_val_handle) if(ble_status = AT_BLE_SUCCESS) printf(fail to send temperature update notification )

                                int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                                Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                                DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register Gap ATBTLC1000 Callbacks register_btlc1000_callbacks()

                                Custom service init custom_environment_service_init()

                                ATBTLC1000Appendix B Software Solution - Custom Service

                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 51

                                Register Gatt server callback register_gatt_server_callbacks()

                                Start Advertising process start_advertisement() while(true) ble_event_task() if(connected_flag == true ampamp timer_flag == true) timer_flag = false send_temperature_notification()

                                ATBTLC1000Appendix B Software Solution - Custom Service

                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 52

                                8 Document Revision HistoryRev B - 42018

                                Section Changes

                                Document Revised contents to match various Bluetooth Low Energy standard versions

                                Rev A - 122017

                                Section Changes

                                Document Initial release

                                ATBTLC1000Document Revision History

                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 53

                                The Microchip Web Site

                                Microchip provides online support via our web site at httpwwwmicrochipcom This web site is used asa means to make files and information easily available to customers Accessible by using your favoriteInternet browser the web site contains the following information

                                bull Product Support ndash Data sheets and errata application notes and sample programs designresources userrsquos guides and hardware support documents latest software releases and archivedsoftware

                                bull General Technical Support ndash Frequently Asked Questions (FAQ) technical support requestsonline discussion groups Microchip consultant program member listing

                                bull Business of Microchip ndash Product selector and ordering guides latest Microchip press releaseslisting of seminars and events listings of Microchip sales offices distributors and factoryrepresentatives

                                Customer Change Notification Service

                                Microchiprsquos customer notification service helps keep customers current on Microchip productsSubscribers will receive e-mail notification whenever there are changes updates revisions or erratarelated to a specified product family or development tool of interest

                                To register access the Microchip web site at httpwwwmicrochipcom Under ldquoSupportrdquo click onldquoCustomer Change Notificationrdquo and follow the registration instructions

                                Customer Support

                                Users of Microchip products can receive assistance through several channels

                                bull Distributor or Representativebull Local Sales Officebull Field Application Engineer (FAE)bull Technical Support

                                Customers should contact their distributor representative or Field Application Engineer (FAE) for supportLocal sales offices are also available to help customers A listing of sales offices and locations is includedin the back of this document

                                Technical support is available through the web site at httpwwwmicrochipcomsupport

                                Microchip Devices Code Protection Feature

                                Note the following details of the code protection feature on Microchip devices

                                bull Microchip products meet the specification contained in their particular Microchip Data Sheetbull Microchip believes that its family of products is one of the most secure families of its kind on the

                                market today when used in the intended manner and under normal conditionsbull There are dishonest and possibly illegal methods used to breach the code protection feature All of

                                these methods to our knowledge require using the Microchip products in a manner outside theoperating specifications contained in Microchiprsquos Data Sheets Most likely the person doing so isengaged in theft of intellectual property

                                bull Microchip is willing to work with the customer who is concerned about the integrity of their code

                                ATBTLC1000

                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 54

                                bull Neither Microchip nor any other semiconductor manufacturer can guarantee the security of theircode Code protection does not mean that we are guaranteeing the product as ldquounbreakablerdquo

                                Code protection is constantly evolving We at Microchip are committed to continuously improving thecode protection features of our products Attempts to break Microchiprsquos code protection feature may be aviolation of the Digital Millennium Copyright Act If such acts allow unauthorized access to your softwareor other copyrighted work you may have a right to sue for relief under that Act

                                Legal Notice

                                Information contained in this publication regarding device applications and the like is provided only foryour convenience and may be superseded by updates It is your responsibility to ensure that yourapplication meets with your specifications MICROCHIP MAKES NO REPRESENTATIONS ORWARRANTIES OF ANY KIND WHETHER EXPRESS OR IMPLIED WRITTEN OR ORAL STATUTORYOR OTHERWISE RELATED TO THE INFORMATION INCLUDING BUT NOT LIMITED TO ITSCONDITION QUALITY PERFORMANCE MERCHANTABILITY OR FITNESS FOR PURPOSEMicrochip disclaims all liability arising from this information and its use Use of Microchip devices in lifesupport andor safety applications is entirely at the buyerrsquos risk and the buyer agrees to defendindemnify and hold harmless Microchip from any and all damages claims suits or expenses resultingfrom such use No licenses are conveyed implicitly or otherwise under any Microchip intellectualproperty rights unless otherwise stated

                                Trademarks

                                The Microchip name and logo the Microchip logo AnyRate AVR AVR logo AVR Freaks BeaconThingsBitCloud CryptoMemory CryptoRF dsPIC FlashFlex flexPWR Heldo JukeBlox KeeLoq KeeLoq logoKleer LANCheck LINK MD maXStylus maXTouch MediaLB megaAVR MOST MOST logo MPLABOptoLyzer PIC picoPower PICSTART PIC32 logo Prochip Designer QTouch RightTouch SAM-BASpyNIC SST SST Logo SuperFlash tinyAVR UNIO and XMEGA are registered trademarks ofMicrochip Technology Incorporated in the USA and other countries

                                ClockWorks The Embedded Control Solutions Company EtherSynch Hyper Speed Control HyperLightLoad IntelliMOS mTouch Precision Edge and Quiet-Wire are registered trademarks of MicrochipTechnology Incorporated in the USA

                                Adjacent Key Suppression AKS Analog-for-the-Digital Age Any Capacitor AnyIn AnyOut BodyComchipKIT chipKIT logo CodeGuard CryptoAuthentication CryptoCompanion CryptoControllerdsPICDEM dsPICDEMnet Dynamic Average Matching DAM ECAN EtherGREEN In-Circuit SerialProgramming ICSP Inter-Chip Connectivity JitterBlocker KleerNet KleerNet logo Mindi MiWimotorBench MPASM MPF MPLAB Certified logo MPLIB MPLINK MultiTRAK NetDetach OmniscientCode Generation PICDEM PICDEMnet PICkit PICtail PureSilicon QMatrix RightTouch logo REALICE Ripple Blocker SAM-ICE Serial Quad IO SMART-IS SQI SuperSwitcher SuperSwitcher II TotalEndurance TSHARC USBCheck VariSense ViewSpan WiperLock Wireless DNA and ZENA aretrademarks of Microchip Technology Incorporated in the USA and other countries

                                SQTP is a service mark of Microchip Technology Incorporated in the USA

                                Silicon Storage Technology is a registered trademark of Microchip Technology Inc in other countries

                                GestIC is a registered trademark of Microchip Technology Germany II GmbH amp Co KG a subsidiary ofMicrochip Technology Inc in other countries

                                All other trademarks mentioned herein are property of their respective companies

                                ATBTLC1000

                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 55

                                copy 2018 Microchip Technology Incorporated Printed in the USA All Rights Reserved

                                ISBN 978-1-5224-2921-0

                                Quality Management System Certified by DNV

                                ISOTS 16949Microchip received ISOTS-169492009 certification for its worldwide headquarters design and waferfabrication facilities in Chandler and Tempe Arizona Gresham Oregon and design centers in Californiaand India The Companyrsquos quality system processes and procedures are for its PICreg MCUs and dsPICreg

                                DSCs KEELOQreg code hopping devices Serial EEPROMs microperipherals nonvolatile memory andanalog products In addition Microchiprsquos quality system for the design and manufacture of developmentsystems is ISO 90012000 certified

                                ATBTLC1000

                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 56

                                AMERICAS ASIAPACIFIC ASIAPACIFIC EUROPECorporate Office2355 West Chandler BlvdChandler AZ 85224-6199Tel 480-792-7200Fax 480-792-7277Technical SupporthttpwwwmicrochipcomsupportWeb AddresswwwmicrochipcomAtlantaDuluth GATel 678-957-9614Fax 678-957-1455Austin TXTel 512-257-3370BostonWestborough MATel 774-760-0087Fax 774-760-0088ChicagoItasca ILTel 630-285-0071Fax 630-285-0075DallasAddison TXTel 972-818-7423Fax 972-818-2924DetroitNovi MITel 248-848-4000Houston TXTel 281-894-5983IndianapolisNoblesville INTel 317-773-8323Fax 317-773-5453Tel 317-536-2380Los AngelesMission Viejo CATel 949-462-9523Fax 949-462-9608Tel 951-273-7800Raleigh NCTel 919-844-7510New York NYTel 631-435-6000San Jose CATel 408-735-9110Tel 408-436-4270Canada - TorontoTel 905-695-1980Fax 905-695-2078

                                Australia - SydneyTel 61-2-9868-6733China - BeijingTel 86-10-8569-7000China - ChengduTel 86-28-8665-5511China - ChongqingTel 86-23-8980-9588China - DongguanTel 86-769-8702-9880China - GuangzhouTel 86-20-8755-8029China - HangzhouTel 86-571-8792-8115China - Hong Kong SARTel 852-2943-5100China - NanjingTel 86-25-8473-2460China - QingdaoTel 86-532-8502-7355China - ShanghaiTel 86-21-3326-8000China - ShenyangTel 86-24-2334-2829China - ShenzhenTel 86-755-8864-2200China - SuzhouTel 86-186-6233-1526China - WuhanTel 86-27-5980-5300China - XianTel 86-29-8833-7252China - XiamenTel 86-592-2388138China - ZhuhaiTel 86-756-3210040

                                India - BangaloreTel 91-80-3090-4444India - New DelhiTel 91-11-4160-8631India - PuneTel 91-20-4121-0141Japan - OsakaTel 81-6-6152-7160Japan - TokyoTel 81-3-6880- 3770Korea - DaeguTel 82-53-744-4301Korea - SeoulTel 82-2-554-7200Malaysia - Kuala LumpurTel 60-3-7651-7906Malaysia - PenangTel 60-4-227-8870Philippines - ManilaTel 63-2-634-9065SingaporeTel 65-6334-8870Taiwan - Hsin ChuTel 886-3-577-8366Taiwan - KaohsiungTel 886-7-213-7830Taiwan - TaipeiTel 886-2-2508-8600Thailand - BangkokTel 66-2-694-1351Vietnam - Ho Chi MinhTel 84-28-5448-2100

                                Austria - WelsTel 43-7242-2244-39Fax 43-7242-2244-393Denmark - CopenhagenTel 45-4450-2828Fax 45-4485-2829Finland - EspooTel 358-9-4520-820France - ParisTel 33-1-69-53-63-20Fax 33-1-69-30-90-79Germany - GarchingTel 49-8931-9700Germany - HaanTel 49-2129-3766400Germany - HeilbronnTel 49-7131-67-3636Germany - KarlsruheTel 49-721-625370Germany - MunichTel 49-89-627-144-0Fax 49-89-627-144-44Germany - RosenheimTel 49-8031-354-560Israel - RarsquoananaTel 972-9-744-7705Italy - MilanTel 39-0331-742611Fax 39-0331-466781Italy - PadovaTel 39-049-7625286Netherlands - DrunenTel 31-416-690399Fax 31-416-690340Norway - TrondheimTel 47-7289-7561Poland - WarsawTel 48-22-3325737Romania - BucharestTel 40-21-407-87-50Spain - MadridTel 34-91-708-08-90Fax 34-91-708-08-91Sweden - GothenbergTel 46-31-704-60-40Sweden - StockholmTel 46-8-5090-4654UK - WokinghamTel 44-118-921-5800Fax 44-118-921-5820

                                Worldwide Sales and Service

                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 57

                                • Introduction
                                • Table of Contents
                                • 1 Getting Started
                                  • 11 Software Prerequisites
                                    • 111 Installation Steps of Atmel Studio 7
                                      • 12 Software Setup
                                        • 121 Installation of Microchip SmartConnect application on a Mobile device
                                          • 13 ATBTLC1000 Embedded Firmware
                                          • 14 ATBTLC1000 Host Software API
                                          • 15 Hardware Prerequisites
                                            • 151 SMARTtrade SAM L21 Xplained Pro
                                            • 152 ATBTLC1000ZR Xplained Pro Extension board
                                              • 16 Hardware Setup
                                                • 2 Creating the Project and Initializing
                                                  • 21 Creating Project from ASF
                                                  • 22 Configuring ASF for ATBTLC1000-ZR
                                                  • 23 Compiling and Testing the Project
                                                    • 3 Establishing Connection with Central Device
                                                      • 31 Configuring and Starting the Advertisement Process
                                                        • 311 Flags (AD Type 0x00)
                                                        • 312 Available Service UUID (AD Types 0x02 to 0x07)
                                                        • 313 Device Name (AD Types 0x08 to 0x09)
                                                          • 3131 Setting the Advertisement Payload (ble_advertisement_data_set)
                                                          • 3132 Starting the Advertisement Process (at_ble_adv_start)
                                                            • 314 Advertisement Process
                                                              • 3141 Starting the Advertisement Process
                                                                  • 32 Managing GAP events
                                                                    • 321 Handling of Connected and Disconnected GAP Events
                                                                        • 4 SettingHandling of Pre-Defined Service
                                                                          • 41 Adding Device Info Service Component from ASF Wizard to Project
                                                                          • 42 Configuring and Loading Device Information Service
                                                                            • 421 Procedure to Configure and Load Device Info Service
                                                                                • 5 Setting up and Handling Custom Service
                                                                                  • 51 Configuring and Loading the Custom Environment Service
                                                                                    • 511 Procedure to Configure and Load Custom Environment Service
                                                                                      • 52 Updating the Temperature Characteristic
                                                                                        • 521 Setting a Characteristic Value ( at_ble_characteristic_value_set)
                                                                                        • 522 Sending a Notification (at_ble_notification_send)
                                                                                        • 523 Sending Temperature Information Once in Every 10 Seconds to Central
                                                                                            • 6 Appendix A Software Solution - Pre-Defined Svc
                                                                                            • 7 Appendix B Software Solution - Custom Service
                                                                                            • 8 Document Revision History
                                                                                            • The Microchip Web Site
                                                                                            • Customer Change Notification Service
                                                                                            • Customer Support
                                                                                            • Microchip Devices Code Protection Feature
                                                                                            • Legal Notice
                                                                                            • Trademarks
                                                                                            • Quality Management System Certified by DNV
                                                                                            • Worldwide Sales and Service

                                  ndash Baudrate 115200ndash Parity Nonendash One Stop bitndash Enable Hardware Flow Control

                                  7 Click to save the project ltCtrl+Sgt

                                  8 Click rdquo to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt9 The initialization of the ATBTLC1000ZR module must return the Bluetooth Device Address and

                                  Address typeFigure 2-10 Console Log Window

                                  Note 1 If initialization fails make sure to verify the hardware configuration is aligned with the

                                  description refer to 16 Hardware Setup2 The initialization of ATBTLC1000 takes few seconds due to patch download process

                                  ATBTLC1000Creating the Project and Initializing

                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 17

                                  3 Establishing Connection with Central DeviceThe Bluetooth Low Energy connectivity is added to the application that is used to connect with theBluetooth Low Energy central The first step is about the management of Bluetooth connection with acentral device When using ATBTLC1000 device this process is managed by dedicated API function callsassociated with ATBTLC1000 events handling

                                  The interaction between Host MCU ATBTLC1000 and Bluetooth Low Energy central during connectionestablishment is as follows

                                  Figure 3-1 Establishing Connection with Central Device

                                  On host MCU side the management of the Bluetooth connection is performed through three main steps1 GAP callback registration2 Advertisement configuration3 ATBTLC1000 event handling

                                  In the existing project main routine the integration of these steps are highlighted in red in the followingflowchart

                                  ATBTLC1000Establishing Connection with Central Device

                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 18

                                  Figure 3-2 Main Routine Flow Chart

                                  31 Configuring and Starting the Advertisement ProcessThe Bluetooth Low Energy devices transmit advertisement packets to show their presence to nearbydevices The advertisement packet is sent periodically at a time interval defined by variableldquoadvintervalrdquo defined in Bluetooth SIG specification To avoid any collision with other wireless networksuch as Wi-Fireg a channel change is performed for each advertisement packet sent (data frequencyhopping) as illustrated in the following figureFigure 3-3 Advertisement Process

                                  During advertisement the payload structure to be sent differs from application to application and is set byusing encapsulated packet data unit type information (PDU_TYPE)

                                  ATBTLC1000Establishing Connection with Central Device

                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 19

                                  Figure 3-4 PDU Advertising

                                  The following table lists the different PDU types used according to device role

                                  Advertising event types (PDU_TYPE) Broadcaster Observer Peripheral Central

                                  Connectible undirected event (ADV_IND) Excluded Excluded Mandatory Excluded

                                  Connectible directed event(ADV_DIRECT_IND) Excluded Excluded Optional Excluded

                                  Non-connectible undirected event(ADV_NONCONN_IND) Mandatory Excluded Optional Excluded

                                  Scannable undirected event (ADV_SCAN_IND) Optional Excluded Optional Excluded

                                  As our device acts as a Bluetooth Low Energy peripheral the connectable undirected event (ADV_IND)advertising type is used See the following description about the ADV_IND advertisement packetFigure 3-5 ADV_IND Advertisement Packet

                                  The ADV_IND payload contains different Advertisement Data types (AD0 - ADn) which provide specificinformation to the central device such as device short name Tx power level and list of availableservices UUIDs The number of advertisement data types that can be added to the advertisementpayload are limited by the advertisement payload size of 31 octets

                                  Following is a list of advertisement data types that are commonly found in ADV_IND payload

                                  ATBTLC1000Establishing Connection with Central Device

                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 20

                                  311 Flags (AD Type 0x00)The flags describe the basic device capability such as BLE support BLE discoverable mode BREDRsupport and simultaneous BRED

                                  312 Available Service UUID (AD Types 0x02 to 0x07)The Bluetooth Low Energy advertisement payloads are limited to 31 bytes Therefore only two 128-bitUUID values can be added to the payload For this purpose the specific AD types describe the length ofthe advertised UUID and provide information as to whether the payload contains a incompletecompletelist of UUID supported by the GATT server

                                  bull 0x02 - Incomplete list of 16-bit UUIDs (adopted GATT services)bull 0x03 - Complete list of 16-bit UUIDs (adopted GATT services)bull 0x06 - Incomplete list of 128-bit UUIDs (custom GATT services)bull 0x07 - Complete list of 128-bit UUIDs (custom GATT services)

                                  Note  When a 16-bit UUID is transmitted only the unique 2-byte value is sent The client knows that it isrequired to be injected into the base UUID For example the Health Thermometer Service is assigned as0x1809 so its equivalent UUID is 00001809-0000-1000-8000-00805F9B34FB

                                  313 Device Name (AD Types 0x08 to 0x09)This AD type field is used to advertise the Local name of device in the network The Local name datatype value indicates if the name is complete or shortened If the name is shortened the complete namecan be read after the connection is established

                                  bull 0x08 - Shortened Local Namebull 0x09 - Complete Local Name

                                  Note 1 A shortened name contains only continuous characters from the beginning of the full name For

                                  example if the device name is BT_Device_Name then the shortened name can beBT_Device or BT_Dev

                                  2 Complete data type list are available at httpswwwbluetoothcomspecificationsassigned-numbersgeneric-access-profile

                                  For management of advertisement process and cover the different configurations specified by SIG theATBTLC1000 Host driver provides the two functions elaborated in the following sections

                                  In the application use these two functions to setup the following ADV_IN type payloadFigure 3-6 ADV_IN Type Payload Process

                                  ATBTLC1000Establishing Connection with Central Device

                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 21

                                  3131 Setting the Advertisement Payload (ble_advertisement_data_set)Prototype ndashat_ble_status_t at_ble_adv_data_set (uint8_t const const adv_datauint8_t adv_data_lenuint8_t const const scan_resp_datauint8_t scan_response_data_len)

                                  Description ndash Set clear or update the advertisement and scan response data

                                  Parameters ndash

                                  bull adv_data ndash Raw data to be placed in advertisement packetbull adv_data_len ndash Data length for adv_data Max size 28 bytes (3 bytes are reserved to set

                                  advertising AD type flags based on the selected Advertising mode and the user is not required toconfigure AD type flags in the advertisement payload)

                                  bull scan_resp_data ndash Raw data to be placed in the scan response packet If NULL no changes aremade to the current scan response packet data

                                  bull scan_response_data_len ndash Data length for scan_resp_data Max size 31 bytes

                                  Return ndash Execution Status

                                  This function requires a parameter raw adv_data to be sent to central Following is an example of itsdefinition

                                  static uint8_t adv_data[] = 0x11 AD1 length = 170x03 AD1 Type = Complete list of 128-bit UUIDs0x1b0xc50xd50xa50x020x000xa60x87 AD1 = UUID MSBs0xe50x110x360x390xc00xba0x5a0xf00x0A AD2 Length = 100x09 AD2 Type = Complete local NamelsquoMrsquorsquoyrsquorsquo_rsquorsquoDrsquorsquoErsquorsquoVrsquo AD2 = ldquoMy_DEVrdquo

                                  3132 Starting the Advertisement Process (at_ble_adv_start)Prototype ndashat_ble_status_t at_ble_adv_start (at_ble_adv_type_t typeat_ble_adv_mode_t modeat_ble_addr_t peer_addrat_ble_filter_type_t filtereduint16_t intervaluint16_t timeoutbool disable_randomness)

                                  Description ndash Start advertisement process

                                  Parameters ndash

                                  bull type ndash Advertising type to be used can bendash AT_BLE_ADV_TYPE_UNDIRECTEDndash AT_BLE_ADV_TYPE_DIRECTEDndash AT_BLE_ADV_TYPE_SCANNABLE_UNDIRECTEDndash AT_BLE_ADV_TYPE_NONCONN_UNDIRECTEDndash AT_BLE_ADV_TYPE_DIRECTED_LDCndash AT_BLE_ADV_TYPE_SCAN_RESPONSE

                                  bull mode ndash Advertising mode to be used can be

                                  ATBTLC1000Establishing Connection with Central Device

                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 22

                                  ndash AT_BLE_ADV_NON_DISCOVERABLEndash AT_BLE_ADV_GEN_DISCOVERABLEndash AT_BLE_ADV_LIM_DISCOVERABLEndash AT_BLE_ADV_BROADCASTER_MODE

                                  bull peer_addr ndash Specify peer address when advertising type is AT_BLE_ADV_TYPE_DIRECTEDbull filtered ndash

                                  ndash AT_BLE_ADV_FP_ANY ndash Allow scan and connection requests from anyonendash AT_BLE_ADV_FP_FILTER_SCANREQ ndash Allow scan request from White List devices onlyndash AT_BLE_ADV_FP_FILTER_CONNREQ ndash Allow connection request from White List devices

                                  onlyndash AT_BLE_ADV_FP_FILTER_BOTH ndash Allow scan and connection requests from White List

                                  devices onlybull interval ndash Advertisement interval (in 0625 ms units)bull timeout ndash Advertising timeout between 0x0001 and 0x028F in scale of seconds This parameter

                                  must be set to 0 if type equals AT_BLE_ADV_TYPE_DIRECTEDbull disable_randomness ndash When disabled advertisements are performed at the exact interval

                                  without adding random 10 ms tempo

                                  Return ndash Execution Status

                                  314 Advertisement ProcessIn this assignment the advertisement process is performed in the following configuration

                                  bull Undirected (Type AT_BLE_ADV_TYPE_UNDIRECTED)bull Discoverable (Mode AT_BLE_ADV_GEN_DISCOVERABLE)bull No peer Address (peer_addr = NULL)bull No filtering (filtered = AT_BLE_ADV_FP_ANY)bull Advertisement interval 1s (interval = 1600)bull Maximum timeout (timeout 655)bull Randomness enabled (disable_randomness = FALSE)

                                  3141 Starting the Advertisement Process1 Open startup_templatec file2 Declare the following ble_status global variable in startup_templatec as volatile

                                  include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehvolatile at_ble_status_t ble_status

                                  3 Declare the following adv_data global variable in startup_templatec as staticstatic uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD)0x09 AD2 Type = Complete local Name

                                  ATBTLC1000Establishing Connection with Central Device

                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 23

                                  My_SENS AD2 = ldquoMy_SENSrdquo

                                  Note 1 The name of the device is to be changed (AD2 field)2 According to the new name AD2 length must be adapted to new AD2 content

                                  4 Add the following start_advertisement function in startup_templatec prototype for thefunction void start_advertisement (void) also this can be added to avoid warningsvoid start_advertisement (void)printf(n Assignment 21 Start Advertisement)Set advertisement datable_status = at_ble_adv_data_set(adv_datasizeof(adv_data)NULL0)Start Advertisementble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550)if(ble_status = AT_BLE_SUCCESS)printf(n Failed to start advertisement)

                                  5 Start the advertisement process by adding the following highlighted code to the application mainroutineint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Start Advertising process start_advertisement() Register PrimaryIncluded service in case of GATT Server while(true) Write application task

                                  6 Click to save the project ltCtrl+Sgt

                                  7 Click button to compile the project ltF7gt8 Verify that no build error appears in Atmel Studio output window

                                  Figure 3-7 Atmel Studio Output Window

                                  ATBTLC1000Establishing Connection with Central Device

                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 24

                                  9 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt10 Open Microchip SmartConnect Application on Android or iOS device and tap START SCAN button

                                  Note  The device must appear in Microchip SmartConnect Application

                                  Figure 3-8 Microchip SmartConnect Application

                                  11 Terminal must display the following Log outputFigure 3-9 Log Output Window

                                  32 Managing GAP eventsThe management of the Bluetooth connection at the host MCU level is done through reception andhandling of events reported by the ATBTLC1000 These events are generated by ATBTLC1000 GAPGATT and L2CAP layers to notify the host about the ongoing Bluetooth interaction with other devices inits vicinity

                                  ATBTLC1000Establishing Connection with Central Device

                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 25

                                  To manage events coming from the ATBTLC1000 module the host driver must provide able_mgr_events_callback_handler function that allows registration of application callback functionto be executed on each event reported by the ATBTLC1000 module

                                  Prototype ndashbool ble_mgr_events_callback_handler(ble_mgr_event_cb_t event_cb_typeble_mgr_event_t event_typeconst voidble_event_handler)

                                  Description ndash Used by ProfileServiceApplication to register the Bluetooth Low Energy eventsrsquocallbacks

                                  Parameters ndash

                                  event_cb_type ndash types of actions to perform on callbacks can be either

                                  REGISTER_CALL_BACK or

                                  UNREGISTER_CALL_BACKevent_type ndash Any one of the event types can be used

                                  BLE_GAP_EVENT_TYPEBLE_GATT_CLIENT_EVENT_TYPEBLE_GATT_SERVER_EVENT_TYPEBLE_L2CAP_EVENT_TYPEBLE_GATT_HTPT_EVENT_TYPEBLE_DTM_EVENT_TYPEBLE_CUSTOM_EVENT_TYPEble_event_handler ndash pointer to handler list

                                  Structure ble_gap_event_cb_t defines the GAP callbacks Similarly structuresble_gatt_client_event_cb_t and ble_gatt_server_event_cb_t define the callbacks of GATTevents

                                  typedef struct ble_gap_event_cb BLE Undefined events received from ATBTLC1000 which is not handled in Libraryble_event_callback_t undefined BLE scan information contains the peer device scan information Refer ref at_ble_scan_info_tble_event_callback_t scan_info Once the BLE scan timeout or scan stop triggers the scan report event Refer ref at_ble_scan_report_tble_event_callback_t scan_report Advertisement complete event Refer ref at_ble_adv_cmp_evt_tble_event_callback_t advt_cmp Advertisement report in case of advertisement stopped due to advertisement timeout Refer ref at_ble_adv_report_tble_event_callback_t adv_report BLE device own random address changed event Refer ref at_ble_rand_addr_changed_tble_event_callback_t rand_addr_changed BLE connected event device connected to peer device Refer ref at_ble_connected_tble_event_callback_t connected BLE disconnected event device disconnected from peer device Refer ref at_ble_disconnected_tble_event_callback_t disconnected Connection parameter update done on peer device and own device Refer ref at_ble_conn_param_update_done_t

                                  ATBTLC1000Establishing Connection with Central Device

                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 26

                                  ble_event_callback_t conn_parameter_update_done Connection parameter update request from peer device Refer ref at_ble_conn_param_update_request_tble_event_callback_t conn_param_update_request Pair complete event as part of end of pairing process Refer ref at_ble_pair_done_tble_event_callback_t pair_done Pair request event from Central device Refer ref at_ble_pair_request_tble_event_callback_t pair_request Slave security request received from peer Peripheral device Refer ref at_ble_slave_sec_request_tble_event_callback_t slave_sec_request Pair Key request event from Peer central device Refer ref at_ble_pair_key_request_tble_event_callback_t pair_key_request encryption request comes from the peer device Needs to supply the bonding information which is stored earlier ref at_ble_encryption_request_tble_event_callback_t encryption_request encryption status changed event received from SMP once the encryption is started ref at_ble_encryption_status_changed_tble_event_callback_t encryption_status_changed Event triggered once the Resolve random address is resolved using supplied IRKs ref at_ble_resolv_rand_addr_status_tble_event_callback_t resolv_rand_addr_status Event is triggered once the connection signature information indication received ref at_ble_sign_counter_tble_event_callback_t sign_counters_ind Peer attribute information indication received Event ref at_ble_peer_att_info_ind_tble_event_callback_t peer_att_info_ind Peer device channel map received indication ref at_ble_channel_map_tble_event_callback_t con_channel_map_indble_gap_event_cb_t

                                  Note  Callback definition is application-specific If the application layer requires a specific event callbackthen the specific member of the structure is to be assigned with the address of the callback function

                                  In this assignment two callback functions on Connected and Disconnected GAP events are usedThis allows the application to restart the advertising process on Disconnect manage connectioninformation and startstop of sensor data update

                                  321 Handling of Connected and Disconnected GAP Events1 Open the startup_templatec file2 Define the following software flags as global variables in startup_templatec file volatile

                                  bool timer_flag = false and volatile bool connected_flag = false3 Declare and implement the following ble_connected_cb function in the

                                  startup_templatec file Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param)printf(n Assignment 22 Application connected )connected_flag = trueALL_UNUSED(param)return AT_BLE_SUCCESS

                                  4 Declare and implement the following ble_disconnected_cb function instartup_templatec file Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param)printf(n Assignment 22 Application disconnected )connected_flag = falsestart_advertisement()ALL_UNUSED(param)return AT_BLE_SUCCESS

                                  ATBTLC1000Establishing Connection with Central Device

                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 27

                                  5 Declare the following static GAP callback structure in ldquostartup_templatecrdquo filestatic const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTEDdisconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                                  6 Add the following register_btlc1000_callbacks function in startup_templatec Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void) Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks)ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACKBLE_GAP_EVENT_TYPEampapp_gap_handle)if (ble_status = true)printf(nError when Registering ATBTLC1000 callbacks)

                                  7 Add the register_btlc1000_callbacks function call prior to start advertisement in theapplication main routineint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Gap Callbacks register_btlc1000_callbacks ( ) Start Advertising process start_advertisement() Register PrimaryIncluded service in case of GATT Server while(true) Write application task

                                  8 Add the ble_event_task function call in the project main loop to handle the different incomingevents from ATBTLC1000while(true)ble_event_task()

                                  9 Press button ltF7gt to compile the project and verify that no build error appear in the AtmelStudio output window

                                  ATBTLC1000Establishing Connection with Central Device

                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 28

                                  Figure 3-10 Atmel Studio Output Window

                                  10 Click ldquo rdquo to save the project ltCtrl+Sgt

                                  11 Click ldquo rdquo to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt and checkcorrect initialization of the ATBTLC1000

                                  12 Open the Microchip SmartConnect application on Androidtrade or iOS device13 Press the ltStart Scangt button and pair peripherals by selecting them in the device list (pass key

                                  123456)Note 

                                  1 Pairing event handling is carried out by ble_managerc Refer toble_pair_key_request_handler() for code implementation The default pass key of123456 is also fixed inside this function This can be changed here

                                  Figure 3-11 Console Log Window

                                  Note  After peripheral pairing no services information are displayed in Microchip SmartConnectapplication as no service is currently defined and started on peripheral side

                                  ATBTLC1000Establishing Connection with Central Device

                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 29

                                  4 SettingHandling of Pre-Defined ServiceThe management of services are done in the GATT layer of the ATBTLC1000 ROM coded Bluetooth LowEnergy Stack The GATT transactions are based on high-level nested objects called Profiles Servicesand Characteristics stored in SRAM memory of ATBTLC1000 device This assignment adds the pre-defined service of information service from ASF library

                                  Figure 4-1 ATBTLC1000 GATT Layers

                                  bull ProfilesProfiles are not available in the Bluetooth Low Energy peripheral they are simply a pre-definedcollection of services that have been compiled by either the Bluetooth SIG (adopted GATT basedprofile) or by the application developer (custom profiles) For example the Heart Rate Profilecombines the Heart Rate Service and the Device Information Service

                                  Note  The complete list of officially adopted GATT-based profiles is available on the BluetoothDeveloper Portal

                                  bull ServicesA service is a collection of data and associated behaviors which accomplish a particular function orfeature of a device or portions of a device A service may reference other primary or secondaryservices andor a set of characteristics that make up the service Each service distinguishes itselffrom other services by means of a unique numeric ID called as UUID which can be either 16-bit(for officially adopted Bluetooth Low Energy Services) or 128-bit (for custom services)

                                  Note  A full list of officially adopted services and their UUID are seen on the Bluetooth DeveloperPortal

                                  bull CharacteristicsA characteristic is the lowest level concept in GATT transactions It contains a single data point withdifferent attributes such as notify read or write capabilities Similar to Services each characteristiccan be distinguished by a SIG-defined adopted UUID (16-bit) or custom (128-bit) UUID This UUIDensures interoperability across Bluetooth Low Energy devices The characteristics are important tointeract with in a Bluetooth Low Energy network In addition to standard UUID the custom UUID isused in case of specific application When characteristics with custom UUID are used in a devicethen it will be interoperable only with those devices that support these characteristics with customUUID

                                  ATBTLC1000SettingHandling of Pre-Defined Service

                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 30

                                  In this assignment the following steps are added to the Host MCU application to set up and handle adevice information service within the ATBTLC1000 module The following steps are added to the startupproject

                                  bull Adding device info service component from ASFbull Configuring and loading the service

                                  Figure 4-2 Device Information Service

                                  41 Adding Device Info Service Component from ASF Wizard to ProjectTo use the ldquoofficially adopted GATT-based profilesrdquo from SIG ASF provides Bluetooth Low Energy servicecomponents including init functions that pre-define services in Host memory

                                  Note  Before starting this assignment be sure to follow the steps mentioned in 2 Creating the Projectand Initializing and 3 Establishing Connection with Central Device

                                  1 Click ASF gt ASF Wizard2 Search for ldquoBLE-Device Information Servicesrdquo and then click Add

                                  ATBTLC1000SettingHandling of Pre-Defined Service

                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 31

                                  Figure 4-3 Available Modules

                                  3 Now ldquoBLE-Device Information Servicesrdquo (component) appears in ldquoSelected ModulesrdquoFigure 4-4 Selected Modules

                                  4 Click Apply to add the component to the projectFigure 4-5 Adding the Modules to Project

                                  5 The ldquoDevice Information Servicerdquo component is added to the project and is confirmed bydevice_information folder added in Solution Explorer

                                  ATBTLC1000SettingHandling of Pre-Defined Service

                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 32

                                  Figure 4-6 Device Information Service Added to Project

                                  42 Configuring and Loading Device Information ServiceThe ATBTLC1000 Host driver provides a set of GATT functions that allows storing and updating theservices in ATBTLC1000 memories

                                  Prototype at_ble_status_t at_ble_primary_service_define(at_ble_uuid_t uuidat_ble_handle_t service_handleat_ble_included_service_t included_service_listuint16_t included_service_countat_ble_characteristic_t charactristic_listuint16_t charactristic_count)

                                  Description Defines a new primary service along with its included services and characteristics inATBTLC1000

                                  Parameters

                                  bull Uuid [In] ndash primary service UUIDbull service_handle [Out] ndash Service handle is returned herebull included_service_list [In] ndash an array of included service referencesbull included_service_count [In] ndash number of elements in included_service_listbull charactristic_list [InOut] ndash an array of characteristics included in the service this array

                                  is updated with respective characteristics handlesbull charactristic_count[In] ndash number of elements in charactristic_list

                                  Return Execution Status

                                  This function requires an argument as GATT description structure of the service that is implemented Thepreviously added Device Info service component provides Bluetooth Low Energy service middlewareincluding the init functions that predefine the services See below ldquodis_init_servicerdquo from device infoBLE service (device_infohc)

                                  Prototype ndash void dis_init_service(dis_gatt_service_handler_t device_info_serv)Description ndash Initialize the device information service handler in the host MCU memory

                                  Parameters ndash

                                  ATBTLC1000SettingHandling of Pre-Defined Service

                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 33

                                  bull device_info_serv [Inout] pointer to device info GATT description handler to beupdated

                                  Return None

                                  Here is a picture of GATT device info service descriptor definition in Host memory

                                  device_info_serv-gtserv_handle = 0device_info_serv-gtserv_uuidtype = AT_BLE_UUID_16device_info_serv-gtserv_uuiduuid[0] = (uint8_t) DIS_SERVICE_UUIDdevice_info_serv-gtserv_uuiduuid[1] = (uint8_t) (DIS_SERVICE_UUID gtgt 8)Characteristic Info for Manufacturer Name Stringdevice_info_serv-gtserv_chars[0]char_val_handle = 0 handle stored here device_info_serv-gtserv_chars[0]uuidtype = AT_BLE_UUID_16device_info_serv-gtserv_chars[0]uuiduuid[0] = (uint8_t) IS_CHAR_MANUFACTURER_NAME_UUID UUID Manufacturer Name String device_info_serv-gtserv_chars[0]uuiduuid[1] = (uint8_t) (DIS_CHAR_MANUFACTURER_NAME_UUID gtgt 8) UUID Manufacturer Name String device_info_serv-gtserv_chars[0]properties = AT_BLE_CHAR_READ Properties memcpy(char_valuemanufacturer_nameDEFAULT_MANUFACTURER_NAMEDIS_CHAR_MANUFACTURER_NAME_INIT_LEN)device_info_serv-gtserv_chars[0]init_value = char_valuemanufacturer_namedevice_info_serv-gtserv_chars[0]value_init_len = DIS_CHAR_MANUFACTURER_NAME_INIT_LENdevice_info_serv-gtserv_chars[0]value_max_len = DIS_CHAR_MANUFACTURER_NAME_MAX_LENif BLE_PAIR_ENABLEdevice_info_serv-gtserv_chars[0]value_permissions = AT_BLE_ATTR_READABLE_REQ_AUTHN_NO_AUTHR permissions elsedevice_info_serv-gtserv_chars[0]value_permissions = AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR permissions endifdevice_info_serv-gtserv_chars[0]user_desc = NULL user defined name device_info_serv-gtserv_chars[0]user_desc_len = 0device_info_serv-gtserv_chars[0]user_desc_max_len = 0device_info_serv-gtserv_chars[0]user_desc_permissions = AT_BLE_ATTR_NO_PERMISSIONS user description permissionsdevice_info_serv-gtserv_chars[0]client_config_permissions = AT_BLE_ATTR_NO_PERMISSIONS client config permissionsdevice_info_serm hdsv-gtserv_chars[0]server_config_permissions = AT_BLE_ATTR_NO_PERMISSIONS server config permissionsdevice_info_serv-gtserv_chars[0]user_desc_handle = 0 user desc handlesdevice_info_serv-gtserv_chars[0]client_config_handle = 0 client config handlesdevice_info_serv-gtserv_chars[0]server_config_handle = 0 server config handlesdevice_info_serv-gtserv_chars[0]presentation_format = NULL presentation format

                                  Note  In case of custom service the above definition initialization must be taken care of by thedeveloper

                                  421 Procedure to Configure and Load Device Info Service1 Include device info service header file (device_infoh) at the beginning of

                                  startup_templatec fileinclude ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehinclude device_infoh

                                  2 Define a device info service handler as global in startup_templatec file Serviceshandlers dis_gatt_service_handler_t dis_service_handler

                                  ATBTLC1000SettingHandling of Pre-Defined Service

                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 34

                                  3 Add dis_init_service and at_ble_primary_service_define functions as called abovethe advertisement start in main routine Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service)dis_init_service (ampdis_service_handler) Define the primary service in the GATT server database if ((dis_primary_service_define (ampdis_service_handler)) = AT_BLE_SUCCESS)printf(Device Information Service definition failed) Start Advertising process start_advertisement()

                                  4 Click to save the project ltCtrl+Sgt and compile the project by pressing button ltF7gt5 Verify that no build error appears in Atmel Studio output window

                                  Figure 4-7 Atmel Studio Output Window

                                  6 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt7 Open ldquoMicrochip SmartConnectrdquo application on Android or iOS device8 Press ltStart Scangt button and connect to peripheral

                                  Note  The device name is a characteristic and contains the name of the device This device namecan be read by the central device to know the name of the device in order to differentiate thedevices This is being set using at_ble_device_name_set()API The device name is set bydefault when ble_device_init is called and the value is pre-defined using BLE_DEVICE_NAMEThe device name can also be sent as part of advertisement payload to be same as the oneconfigured in at_ble_adv_data_set() API It is the responsibility of users to keep the devicename set in advertisement payload the same as that configured inat_ble_device_name_set()

                                  9 The Service must now be visible after pairing with peripheral under Microchip SmartConnectapplication

                                  ATBTLC1000SettingHandling of Pre-Defined Service

                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 35

                                  Figure 4-8 Service List in Microchip SmartConnect Application

                                  Note  If the pairing of ATBTLC1000 with Microchip Smart connect is not successful then removethe pairing information from mobile by selecting ldquoForget Devicerdquo from the mobile settings Thereason for this is that the mobile app stores the previous pairing information but the ATBTLC1000device lost the previous pairing information due to RESET since it was stored on temporary storage(RAM)

                                  10 The serial terminal must display the following log output windowFigure 4-9 Console Log Window

                                  ATBTLC1000SettingHandling of Pre-Defined Service

                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 36

                                  5 Setting up and Handling Custom ServiceThe previous assignment describes the handling of Bluetooth Low Energy SIG defined device infoservice which is the predefined service available in ASF component This assignment describes thecustom service So the service initialization needs to be implemented In the context of customizedenvironment service the following service description is pushed in ATBTLC1000 memory

                                  Figure 5-1 Custom Service

                                  Custom Environment Service Description

                                  bull UUID type ndash Custom UUID (128-bit)bull UUID ndash 1bc5d5a5-0200-a687-e511-3639c1ba5af0

                                  Characteristic 0 (Temperature)

                                  bull User Description ndash Temperaturebull UUID type ndash Custom UUID (128-bit)bull UUID ndash 1bc5d5a5-0200-a687-e511-3639d8ba5af0bull Properties ndash Read Notifybull Value permission ndash No authorization requiredbull Client config permission ndash No permissionbull Server config permission ndash No permission

                                  Note  In this definition UUIDs are generated randomly Custom servicescharacteristics are free to useany 128-bit UUID less than the base UUID There is no reserved space for vendors to use 16-bit or 32-bitUUIDs

                                  With this definition any temperature change is notified to the central The notify mechanism allows thecentral to know when the data changes When notify property of the Client Characteristic ConfigurationDescriptor is enabled by the central and the device writes the new value then this updated value isautomatically sent to the central through a notification The central is not required to send readcharacteristic commands explicitly to the peripheral (GATT server)

                                  To setup and handle the custom environment service in ATBTLC1000 module the following steps areadded to the Host MCU application

                                  bull Configure and load the custom servicebull Update Temperature characteristic and notify to the central devicebull Receive and handle notification from the Host device

                                  ATBTLC1000Setting up and Handling Custom Service

                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 37

                                  Figure 5-2 Custom Service Flowchart

                                  51 Configuring and Loading the Custom Environment ServiceThe ATBTLC1000 Host driver provides the following set of GATT functions that allows it to push andupdate the service descriptions in the ATBTLC1000 SRAM memory

                                  Note  Before starting this assignment be sure to follow the steps mentioned in 2 Creating the Projectand Initializing and 3 Establishing Connection with Central Device

                                  Prototype ndashat_ble_status_t at_ble_primary_service_define(at_ble_uuid_t uuidat_ble_handle_t service_handleat_ble_included_service_t included_service_listuint16_t included_service_countat_ble_characteristic_t charactristic_listuint16_t charactristic_count)

                                  Description ndash Defines a new primary service along with its included services and characteristics inATBTLC1000 module

                                  Parameters

                                  bull Uuid [In] ndash primary service UUIDbull service_handle [Out] ndash service handle is returned herebull included_service_list [In] ndash array of included service referencesbull included_service_count [In] ndash number of elements in included_service_listbull charactristic_list [InOut] ndash an array of characteristics included in the service this array

                                  is update with respective characteristics handlesbull charactristic_count[In] ndash number of elements in charactristic_list

                                  ATBTLC1000Setting up and Handling Custom Service

                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 38

                                  Return ndash Execution Status

                                  bull Characteristics ndashndash Characteristics definition is done through specific array of following

                                  ldquoat_ble_characteristic_trdquo structure instancestypedef structat_ble_handle_t char_val_handle Handler (returned during service initialisation)at_ble_uuid_t uuid Characteristic UUID (type and value)at_ble_char_properties_t propertiesCharac Properties (read write notify)uint8_t init_value initial valueuint16_t value_init_len initial value lengthuint16_t value_max_len value max lengthat_ble_attr_permissions_t value_permissions access authorization and authenticationuint8_t user_desc User descriptionuint16_t user_desc_len User description lengthuint16_t user_desc_max_len User description max lengthat_ble_char_presentation_t presentation_format Presentation formatat_ble_attr_permissions_t user_desc_permissions User description permissionat_ble_attr_permissions_t client_config_permissions client permissionat_ble_attr_permissions_t server_config_permissions server permissionat_ble_handle_t user_desc_handle description handlerat_ble_handle_t client_config_handle Client config handlerat_ble_handle_t server_config_handle Server config handler at_ble_characteristic_t

                                  511 Procedure to Configure and Load Custom Environment Service1 Define the following service UUID and characteristic UUID in startup_templatec file

                                  define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

                                  2 Define the following environment service handler and characteristics variable as global instartup_templatec file Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

                                  3 Add the following service initialization function custom_environment_service_init instartup_templatecvoid custom_environment_service_init(void) at_ble_uuid_t environment_service_uuiduint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUIDuint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperatureenvironment_service_characs[0]user_desc_len = 10environment_service_characs[0]user_desc_max_len = 10environment_service_characs[0]uuidtype = AT_BLE_UUID_128memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16)environment_service_characs[0]properties = AT_BLE_CHAR_READ |AT_BLE_CHAR_NOTIFYenvironment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature valueenvironment_service_characs[0]value_permissions =(AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuidampenvironment_service_handlerNULL0environment_service_characs1)=AT_BLE_SUCCESS)printf(n Assignment 41 Failed to Initialize custom environment service)

                                  ATBTLC1000Setting up and Handling Custom Service

                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 39

                                  elseprintf(n Assignment 41 Initialize custom environment service)

                                  4 Declare and implement the following GATT event callback functioncustom_char_changed_app_event in startup_templatec file If a client (central) enablesnotifications for a server the server (peripheral) receives an AT_BLE_CHARACTERISTIC_CHANGEDevent and this event callback is called Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

                                  5 Declare and implement the following custom_notification_confirmation_handlerfunction in startup_templatec file Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param)at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )paramif (event_param-gtstatus == AT_BLE_SUCCESS)printf(n Assignment 41Notification Successfully sent over the air) else printf(n Assignment 41Sending Notification over the air failed)return AT_BLE_SUCCESS

                                  6 Declare the following GATT server callback structure in startup_templatec file Thisassignment uses two GATT callbacksstatic const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handlercharacteristic_changed = custom_char_changed_app_event

                                  7 Add the following register_gatt_server_callbacks function in startup_templatec toregister GATT server callback for notification confirmation event Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks)ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACKBLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle)if (ble_status = true)printf(nError when Registering ATBTLC1000 callbacks)

                                  8 Add custom_environment_service_init and register_gatt_server_callbacksfunction calls prior to start advertisement in the application main routine to initialize custom serviceand to register the GATT server callbacksint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()

                                  ATBTLC1000Setting up and Handling Custom Service

                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 40

                                  endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks() Custom service init custom_environment_service_init ( ) Register Gatt server callbacks register_gatt_server_callbacks ( ) Start Advertising process start_advertisement()while(true)ble_event_task()

                                  9 Click to save the project ltCtrl+Sgt

                                  10 Compile the project by pressing button ltF7gt11 Verify that no build error appears in the Atmel Studio output window

                                  Figure 5-3 Atmel Studio Output Window

                                  12 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt13 Open the ldquoMicrochip SmartConnectrdquo application on Android or iOS device14 Connect and pair to the peripheral (pass key 123456)15 Custom service must now be visible after pairing with peripheral under Microchip SmartConnect

                                  application

                                  ATBTLC1000Setting up and Handling Custom Service

                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 41

                                  Figure 5-4 Service List in Microchip SmartConnect Application

                                  Note  Custom service is displayed as unknown service in the above figure as this service is not aSIG-defined service

                                  Figure 5-5 General Information

                                  16 Serial terminal client must display the following Log output

                                  ATBTLC1000Setting up and Handling Custom Service

                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 42

                                  Figure 5-6 Log Output Window

                                  52 Updating the Temperature CharacteristicIn the previous assignment the custom Temperature characteristic is defined with a notify attribute Thistype of attribute requires notification to be sent to central when a new characteristic value is availableThe update of any ldquonotifyrdquo characteristic value is based on following interaction between the Host MCUand the ATBTLC1000Figure 5-7 Characteristic Notification

                                  521 Setting a Characteristic Value ( at_ble_characteristic_value_set)Prototype ndashat_ble_status_t at_ble_characteristic_value_setat_ble_handle_t handleuint8_t valueuint16_t len)

                                  Description ndash Sets a characteristic value in ATBTLC1000 memory

                                  Parameters ndash

                                  ATBTLC1000Setting up and Handling Custom Service

                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 43

                                  bull handle [inout] ndash Pointer to Characteristic handle to be changedbull value [in] ndash New valuebull len [in] ndash Value length in bytes

                                  Return ndash Execution Status

                                  522 Sending a Notification (at_ble_notification_send)Prototype ndashat_ble_status_t at_ble_notification_send(at_ble_handle_t conn_handleat_ble_handle_t attr_handle)

                                  Description ndash Sends a Notification

                                  Parameters ndash

                                  bull conn_handle[in] ndash handle of the connection to be notifiedbull attr_handle [in] ndash handle of the attribute originating the notification

                                  Return ndash Execution Status

                                  523 Sending Temperature Information Once in Every 10 Seconds to Central1 Modify the following ldquotimer_callback_fnrdquo callback function from the startup_templatec

                                  filestatic void timer_callback_fn(void)timer_flag = true

                                  2 hw_timer_init()in main routine of startup_templatec initializes the hardware timer3 If a client (Central) enables the notifications for a server the server (Peripheral) receives an

                                  AT_BLE_CHARACTERISTIC_CHANGED event callback then start the periodic 10 second timer forsending the notification Add the following code in previously definedcustom_char_changed_app_event function Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))timer_flag = falsehw_timer_start(10)printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

                                  4 Declare the following Temperature_value global variable in startup_templatec staticuint8_t Temperature_value = 25 as static

                                  5 Add the following send_temperature_notification function in startup_templatec tosend temperature every 10 seconds Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++

                                  ATBTLC1000Setting up and Handling Custom Service

                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 44

                                  if(Temperature_value gt 75)Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set(environment_service_characs[0]char_val_handle(uint8_t )ampTemperature_valuesizeof(Temperature_value))ble_status = at_ble_notification_send(0environment_service_characs[0]char_val_handle)if(ble_status = AT_BLE_SUCCESS)printf(fail to send temperature update notification )

                                  6 Add the following code in main routine to send temperature data every 10 secondswhile (1) ble_event_task()if(connected_flag == true ampamp timer_flag == truetimer_flag = falsesend_temperature_notification()

                                  7 Click to save the project ltCtrl+Sgt

                                  8 Compile the project by pressing the button ltF7gt9 Verify that no build error appears in Atmel Studio output window

                                  Figure 5-8 Atmel Studio Output Window

                                  10 Click to program the project binary on the L21 Xplained XSTK11 Open ldquoMicrochip SmartConnectrdquo Application on Android or iOS device12 Connect and pair to the peripheral (pass key 123456)13 Click NOTIFY to start the notification14 Temperature information in HEX values must be displayed in Microchip SmartConnect application

                                  ATBTLC1000Setting up and Handling Custom Service

                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 45

                                  Figure 5-9 Notification Window

                                  15 Serial terminal must display the following log outputFigure 5-10 Log Output Window

                                  ATBTLC1000Setting up and Handling Custom Service

                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 46

                                  6 Appendix A Software Solution - Pre-Defined SvcThe following is the code implementation for handling of pre-defined service done in 4 SettingHandlingof Pre-Defined Service

                                  - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehinclude device_infoh

                                  volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false Services handlers dis_gatt_service_handler_t dis_service_handler

                                  static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

                                  void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                                  Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                                  Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                                  static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                                  Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void) Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks)

                                  ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 47

                                  ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                  timer callback function static void timer_callback_fn(void) Add timer callback functionality here

                                  void button_cb(void) Add button callback functionality here

                                  int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                                  Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                                  DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks()

                                  Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service) dis_init_service(ampdis_service_handler) Define the primary service in the GATT server database if((dis_primary_service_define(ampdis_service_handler)) = AT_BLE_SUCCESS) printf(Device Information Service definition failed)

                                  Start Advertising process start_advertisement() while(true) ble_event_task()

                                  ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 48

                                  7 Appendix B Software Solution - Custom ServiceThe following is the code implementation for handling of pre-defined service done in 5 Setting up andHandling Custom Service

                                  - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templateh

                                  volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false

                                  static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

                                  define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0

                                  define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

                                  Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

                                  void custom_environment_service_init(void) at_ble_uuid_t environment_service_uuid uint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUID uint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128 memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperature environment_service_characs[0]user_desc_len = 10 environment_service_characs[0]user_desc_max_len = 10 environment_service_characs[0]uuidtype = AT_BLE_UUID_128 memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16) environment_service_characs[0]properties = AT_BLE_CHAR_READ | AT_BLE_CHAR_NOTIFY environment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature value environment_service_characs[0]value_permissions = (AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuid ampenvironment_service_handlerNULL0 environment_service_characs1)=AT_BLE_SUCCESS) printf(n Assignment 41 Failed to Initialize custom environment service) else printf(n Assignment 41 Initialize custom environment service)

                                  Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param) at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )param if (event_param-gtstatus == AT_BLE_SUCCESS) printf(n Assignment 41Notification Successfully sent over the air)

                                  ATBTLC1000Appendix B Software Solution - Custom Service

                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 49

                                  else printf(n Assignment 41Sending Notification over the air failed) return AT_BLE_SUCCESS

                                  static at_ble_status_t custom_char_changed_app_event(void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle -gt char_new_value[0])) timer_flag = false hw_timer_start(10) printf(n Assignment 41Characteristic changed event) return AT_BLE_SUCCESS

                                  static const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handler characteristic_changed = custom_char_changed_app_event

                                  Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                  void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                                  Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                                  Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                                  static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                                  Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void)

                                  ATBTLC1000Appendix B Software Solution - Custom Service

                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 50

                                  Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                  timer callback function static void timer_callback_fn(void) Add timer callback functionality here timer_flag = true

                                  void button_cb(void) Add button callback functionality here

                                  static uint8_t Temperature_value = 25

                                  Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++ if(Temperature_value gt 75) Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set( environment_service_characs[0]char_val_handle (uint8_t )ampTemperature_value sizeof(Temperature_value)) ble_status = at_ble_notification_send(0 environment_service_characs[0]char_val_handle) if(ble_status = AT_BLE_SUCCESS) printf(fail to send temperature update notification )

                                  int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                                  Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                                  DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register Gap ATBTLC1000 Callbacks register_btlc1000_callbacks()

                                  Custom service init custom_environment_service_init()

                                  ATBTLC1000Appendix B Software Solution - Custom Service

                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 51

                                  Register Gatt server callback register_gatt_server_callbacks()

                                  Start Advertising process start_advertisement() while(true) ble_event_task() if(connected_flag == true ampamp timer_flag == true) timer_flag = false send_temperature_notification()

                                  ATBTLC1000Appendix B Software Solution - Custom Service

                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 52

                                  8 Document Revision HistoryRev B - 42018

                                  Section Changes

                                  Document Revised contents to match various Bluetooth Low Energy standard versions

                                  Rev A - 122017

                                  Section Changes

                                  Document Initial release

                                  ATBTLC1000Document Revision History

                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 53

                                  The Microchip Web Site

                                  Microchip provides online support via our web site at httpwwwmicrochipcom This web site is used asa means to make files and information easily available to customers Accessible by using your favoriteInternet browser the web site contains the following information

                                  bull Product Support ndash Data sheets and errata application notes and sample programs designresources userrsquos guides and hardware support documents latest software releases and archivedsoftware

                                  bull General Technical Support ndash Frequently Asked Questions (FAQ) technical support requestsonline discussion groups Microchip consultant program member listing

                                  bull Business of Microchip ndash Product selector and ordering guides latest Microchip press releaseslisting of seminars and events listings of Microchip sales offices distributors and factoryrepresentatives

                                  Customer Change Notification Service

                                  Microchiprsquos customer notification service helps keep customers current on Microchip productsSubscribers will receive e-mail notification whenever there are changes updates revisions or erratarelated to a specified product family or development tool of interest

                                  To register access the Microchip web site at httpwwwmicrochipcom Under ldquoSupportrdquo click onldquoCustomer Change Notificationrdquo and follow the registration instructions

                                  Customer Support

                                  Users of Microchip products can receive assistance through several channels

                                  bull Distributor or Representativebull Local Sales Officebull Field Application Engineer (FAE)bull Technical Support

                                  Customers should contact their distributor representative or Field Application Engineer (FAE) for supportLocal sales offices are also available to help customers A listing of sales offices and locations is includedin the back of this document

                                  Technical support is available through the web site at httpwwwmicrochipcomsupport

                                  Microchip Devices Code Protection Feature

                                  Note the following details of the code protection feature on Microchip devices

                                  bull Microchip products meet the specification contained in their particular Microchip Data Sheetbull Microchip believes that its family of products is one of the most secure families of its kind on the

                                  market today when used in the intended manner and under normal conditionsbull There are dishonest and possibly illegal methods used to breach the code protection feature All of

                                  these methods to our knowledge require using the Microchip products in a manner outside theoperating specifications contained in Microchiprsquos Data Sheets Most likely the person doing so isengaged in theft of intellectual property

                                  bull Microchip is willing to work with the customer who is concerned about the integrity of their code

                                  ATBTLC1000

                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 54

                                  bull Neither Microchip nor any other semiconductor manufacturer can guarantee the security of theircode Code protection does not mean that we are guaranteeing the product as ldquounbreakablerdquo

                                  Code protection is constantly evolving We at Microchip are committed to continuously improving thecode protection features of our products Attempts to break Microchiprsquos code protection feature may be aviolation of the Digital Millennium Copyright Act If such acts allow unauthorized access to your softwareor other copyrighted work you may have a right to sue for relief under that Act

                                  Legal Notice

                                  Information contained in this publication regarding device applications and the like is provided only foryour convenience and may be superseded by updates It is your responsibility to ensure that yourapplication meets with your specifications MICROCHIP MAKES NO REPRESENTATIONS ORWARRANTIES OF ANY KIND WHETHER EXPRESS OR IMPLIED WRITTEN OR ORAL STATUTORYOR OTHERWISE RELATED TO THE INFORMATION INCLUDING BUT NOT LIMITED TO ITSCONDITION QUALITY PERFORMANCE MERCHANTABILITY OR FITNESS FOR PURPOSEMicrochip disclaims all liability arising from this information and its use Use of Microchip devices in lifesupport andor safety applications is entirely at the buyerrsquos risk and the buyer agrees to defendindemnify and hold harmless Microchip from any and all damages claims suits or expenses resultingfrom such use No licenses are conveyed implicitly or otherwise under any Microchip intellectualproperty rights unless otherwise stated

                                  Trademarks

                                  The Microchip name and logo the Microchip logo AnyRate AVR AVR logo AVR Freaks BeaconThingsBitCloud CryptoMemory CryptoRF dsPIC FlashFlex flexPWR Heldo JukeBlox KeeLoq KeeLoq logoKleer LANCheck LINK MD maXStylus maXTouch MediaLB megaAVR MOST MOST logo MPLABOptoLyzer PIC picoPower PICSTART PIC32 logo Prochip Designer QTouch RightTouch SAM-BASpyNIC SST SST Logo SuperFlash tinyAVR UNIO and XMEGA are registered trademarks ofMicrochip Technology Incorporated in the USA and other countries

                                  ClockWorks The Embedded Control Solutions Company EtherSynch Hyper Speed Control HyperLightLoad IntelliMOS mTouch Precision Edge and Quiet-Wire are registered trademarks of MicrochipTechnology Incorporated in the USA

                                  Adjacent Key Suppression AKS Analog-for-the-Digital Age Any Capacitor AnyIn AnyOut BodyComchipKIT chipKIT logo CodeGuard CryptoAuthentication CryptoCompanion CryptoControllerdsPICDEM dsPICDEMnet Dynamic Average Matching DAM ECAN EtherGREEN In-Circuit SerialProgramming ICSP Inter-Chip Connectivity JitterBlocker KleerNet KleerNet logo Mindi MiWimotorBench MPASM MPF MPLAB Certified logo MPLIB MPLINK MultiTRAK NetDetach OmniscientCode Generation PICDEM PICDEMnet PICkit PICtail PureSilicon QMatrix RightTouch logo REALICE Ripple Blocker SAM-ICE Serial Quad IO SMART-IS SQI SuperSwitcher SuperSwitcher II TotalEndurance TSHARC USBCheck VariSense ViewSpan WiperLock Wireless DNA and ZENA aretrademarks of Microchip Technology Incorporated in the USA and other countries

                                  SQTP is a service mark of Microchip Technology Incorporated in the USA

                                  Silicon Storage Technology is a registered trademark of Microchip Technology Inc in other countries

                                  GestIC is a registered trademark of Microchip Technology Germany II GmbH amp Co KG a subsidiary ofMicrochip Technology Inc in other countries

                                  All other trademarks mentioned herein are property of their respective companies

                                  ATBTLC1000

                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 55

                                  copy 2018 Microchip Technology Incorporated Printed in the USA All Rights Reserved

                                  ISBN 978-1-5224-2921-0

                                  Quality Management System Certified by DNV

                                  ISOTS 16949Microchip received ISOTS-169492009 certification for its worldwide headquarters design and waferfabrication facilities in Chandler and Tempe Arizona Gresham Oregon and design centers in Californiaand India The Companyrsquos quality system processes and procedures are for its PICreg MCUs and dsPICreg

                                  DSCs KEELOQreg code hopping devices Serial EEPROMs microperipherals nonvolatile memory andanalog products In addition Microchiprsquos quality system for the design and manufacture of developmentsystems is ISO 90012000 certified

                                  ATBTLC1000

                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 56

                                  AMERICAS ASIAPACIFIC ASIAPACIFIC EUROPECorporate Office2355 West Chandler BlvdChandler AZ 85224-6199Tel 480-792-7200Fax 480-792-7277Technical SupporthttpwwwmicrochipcomsupportWeb AddresswwwmicrochipcomAtlantaDuluth GATel 678-957-9614Fax 678-957-1455Austin TXTel 512-257-3370BostonWestborough MATel 774-760-0087Fax 774-760-0088ChicagoItasca ILTel 630-285-0071Fax 630-285-0075DallasAddison TXTel 972-818-7423Fax 972-818-2924DetroitNovi MITel 248-848-4000Houston TXTel 281-894-5983IndianapolisNoblesville INTel 317-773-8323Fax 317-773-5453Tel 317-536-2380Los AngelesMission Viejo CATel 949-462-9523Fax 949-462-9608Tel 951-273-7800Raleigh NCTel 919-844-7510New York NYTel 631-435-6000San Jose CATel 408-735-9110Tel 408-436-4270Canada - TorontoTel 905-695-1980Fax 905-695-2078

                                  Australia - SydneyTel 61-2-9868-6733China - BeijingTel 86-10-8569-7000China - ChengduTel 86-28-8665-5511China - ChongqingTel 86-23-8980-9588China - DongguanTel 86-769-8702-9880China - GuangzhouTel 86-20-8755-8029China - HangzhouTel 86-571-8792-8115China - Hong Kong SARTel 852-2943-5100China - NanjingTel 86-25-8473-2460China - QingdaoTel 86-532-8502-7355China - ShanghaiTel 86-21-3326-8000China - ShenyangTel 86-24-2334-2829China - ShenzhenTel 86-755-8864-2200China - SuzhouTel 86-186-6233-1526China - WuhanTel 86-27-5980-5300China - XianTel 86-29-8833-7252China - XiamenTel 86-592-2388138China - ZhuhaiTel 86-756-3210040

                                  India - BangaloreTel 91-80-3090-4444India - New DelhiTel 91-11-4160-8631India - PuneTel 91-20-4121-0141Japan - OsakaTel 81-6-6152-7160Japan - TokyoTel 81-3-6880- 3770Korea - DaeguTel 82-53-744-4301Korea - SeoulTel 82-2-554-7200Malaysia - Kuala LumpurTel 60-3-7651-7906Malaysia - PenangTel 60-4-227-8870Philippines - ManilaTel 63-2-634-9065SingaporeTel 65-6334-8870Taiwan - Hsin ChuTel 886-3-577-8366Taiwan - KaohsiungTel 886-7-213-7830Taiwan - TaipeiTel 886-2-2508-8600Thailand - BangkokTel 66-2-694-1351Vietnam - Ho Chi MinhTel 84-28-5448-2100

                                  Austria - WelsTel 43-7242-2244-39Fax 43-7242-2244-393Denmark - CopenhagenTel 45-4450-2828Fax 45-4485-2829Finland - EspooTel 358-9-4520-820France - ParisTel 33-1-69-53-63-20Fax 33-1-69-30-90-79Germany - GarchingTel 49-8931-9700Germany - HaanTel 49-2129-3766400Germany - HeilbronnTel 49-7131-67-3636Germany - KarlsruheTel 49-721-625370Germany - MunichTel 49-89-627-144-0Fax 49-89-627-144-44Germany - RosenheimTel 49-8031-354-560Israel - RarsquoananaTel 972-9-744-7705Italy - MilanTel 39-0331-742611Fax 39-0331-466781Italy - PadovaTel 39-049-7625286Netherlands - DrunenTel 31-416-690399Fax 31-416-690340Norway - TrondheimTel 47-7289-7561Poland - WarsawTel 48-22-3325737Romania - BucharestTel 40-21-407-87-50Spain - MadridTel 34-91-708-08-90Fax 34-91-708-08-91Sweden - GothenbergTel 46-31-704-60-40Sweden - StockholmTel 46-8-5090-4654UK - WokinghamTel 44-118-921-5800Fax 44-118-921-5820

                                  Worldwide Sales and Service

                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 57

                                  • Introduction
                                  • Table of Contents
                                  • 1 Getting Started
                                    • 11 Software Prerequisites
                                      • 111 Installation Steps of Atmel Studio 7
                                        • 12 Software Setup
                                          • 121 Installation of Microchip SmartConnect application on a Mobile device
                                            • 13 ATBTLC1000 Embedded Firmware
                                            • 14 ATBTLC1000 Host Software API
                                            • 15 Hardware Prerequisites
                                              • 151 SMARTtrade SAM L21 Xplained Pro
                                              • 152 ATBTLC1000ZR Xplained Pro Extension board
                                                • 16 Hardware Setup
                                                  • 2 Creating the Project and Initializing
                                                    • 21 Creating Project from ASF
                                                    • 22 Configuring ASF for ATBTLC1000-ZR
                                                    • 23 Compiling and Testing the Project
                                                      • 3 Establishing Connection with Central Device
                                                        • 31 Configuring and Starting the Advertisement Process
                                                          • 311 Flags (AD Type 0x00)
                                                          • 312 Available Service UUID (AD Types 0x02 to 0x07)
                                                          • 313 Device Name (AD Types 0x08 to 0x09)
                                                            • 3131 Setting the Advertisement Payload (ble_advertisement_data_set)
                                                            • 3132 Starting the Advertisement Process (at_ble_adv_start)
                                                              • 314 Advertisement Process
                                                                • 3141 Starting the Advertisement Process
                                                                    • 32 Managing GAP events
                                                                      • 321 Handling of Connected and Disconnected GAP Events
                                                                          • 4 SettingHandling of Pre-Defined Service
                                                                            • 41 Adding Device Info Service Component from ASF Wizard to Project
                                                                            • 42 Configuring and Loading Device Information Service
                                                                              • 421 Procedure to Configure and Load Device Info Service
                                                                                  • 5 Setting up and Handling Custom Service
                                                                                    • 51 Configuring and Loading the Custom Environment Service
                                                                                      • 511 Procedure to Configure and Load Custom Environment Service
                                                                                        • 52 Updating the Temperature Characteristic
                                                                                          • 521 Setting a Characteristic Value ( at_ble_characteristic_value_set)
                                                                                          • 522 Sending a Notification (at_ble_notification_send)
                                                                                          • 523 Sending Temperature Information Once in Every 10 Seconds to Central
                                                                                              • 6 Appendix A Software Solution - Pre-Defined Svc
                                                                                              • 7 Appendix B Software Solution - Custom Service
                                                                                              • 8 Document Revision History
                                                                                              • The Microchip Web Site
                                                                                              • Customer Change Notification Service
                                                                                              • Customer Support
                                                                                              • Microchip Devices Code Protection Feature
                                                                                              • Legal Notice
                                                                                              • Trademarks
                                                                                              • Quality Management System Certified by DNV
                                                                                              • Worldwide Sales and Service

                                    3 Establishing Connection with Central DeviceThe Bluetooth Low Energy connectivity is added to the application that is used to connect with theBluetooth Low Energy central The first step is about the management of Bluetooth connection with acentral device When using ATBTLC1000 device this process is managed by dedicated API function callsassociated with ATBTLC1000 events handling

                                    The interaction between Host MCU ATBTLC1000 and Bluetooth Low Energy central during connectionestablishment is as follows

                                    Figure 3-1 Establishing Connection with Central Device

                                    On host MCU side the management of the Bluetooth connection is performed through three main steps1 GAP callback registration2 Advertisement configuration3 ATBTLC1000 event handling

                                    In the existing project main routine the integration of these steps are highlighted in red in the followingflowchart

                                    ATBTLC1000Establishing Connection with Central Device

                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 18

                                    Figure 3-2 Main Routine Flow Chart

                                    31 Configuring and Starting the Advertisement ProcessThe Bluetooth Low Energy devices transmit advertisement packets to show their presence to nearbydevices The advertisement packet is sent periodically at a time interval defined by variableldquoadvintervalrdquo defined in Bluetooth SIG specification To avoid any collision with other wireless networksuch as Wi-Fireg a channel change is performed for each advertisement packet sent (data frequencyhopping) as illustrated in the following figureFigure 3-3 Advertisement Process

                                    During advertisement the payload structure to be sent differs from application to application and is set byusing encapsulated packet data unit type information (PDU_TYPE)

                                    ATBTLC1000Establishing Connection with Central Device

                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 19

                                    Figure 3-4 PDU Advertising

                                    The following table lists the different PDU types used according to device role

                                    Advertising event types (PDU_TYPE) Broadcaster Observer Peripheral Central

                                    Connectible undirected event (ADV_IND) Excluded Excluded Mandatory Excluded

                                    Connectible directed event(ADV_DIRECT_IND) Excluded Excluded Optional Excluded

                                    Non-connectible undirected event(ADV_NONCONN_IND) Mandatory Excluded Optional Excluded

                                    Scannable undirected event (ADV_SCAN_IND) Optional Excluded Optional Excluded

                                    As our device acts as a Bluetooth Low Energy peripheral the connectable undirected event (ADV_IND)advertising type is used See the following description about the ADV_IND advertisement packetFigure 3-5 ADV_IND Advertisement Packet

                                    The ADV_IND payload contains different Advertisement Data types (AD0 - ADn) which provide specificinformation to the central device such as device short name Tx power level and list of availableservices UUIDs The number of advertisement data types that can be added to the advertisementpayload are limited by the advertisement payload size of 31 octets

                                    Following is a list of advertisement data types that are commonly found in ADV_IND payload

                                    ATBTLC1000Establishing Connection with Central Device

                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 20

                                    311 Flags (AD Type 0x00)The flags describe the basic device capability such as BLE support BLE discoverable mode BREDRsupport and simultaneous BRED

                                    312 Available Service UUID (AD Types 0x02 to 0x07)The Bluetooth Low Energy advertisement payloads are limited to 31 bytes Therefore only two 128-bitUUID values can be added to the payload For this purpose the specific AD types describe the length ofthe advertised UUID and provide information as to whether the payload contains a incompletecompletelist of UUID supported by the GATT server

                                    bull 0x02 - Incomplete list of 16-bit UUIDs (adopted GATT services)bull 0x03 - Complete list of 16-bit UUIDs (adopted GATT services)bull 0x06 - Incomplete list of 128-bit UUIDs (custom GATT services)bull 0x07 - Complete list of 128-bit UUIDs (custom GATT services)

                                    Note  When a 16-bit UUID is transmitted only the unique 2-byte value is sent The client knows that it isrequired to be injected into the base UUID For example the Health Thermometer Service is assigned as0x1809 so its equivalent UUID is 00001809-0000-1000-8000-00805F9B34FB

                                    313 Device Name (AD Types 0x08 to 0x09)This AD type field is used to advertise the Local name of device in the network The Local name datatype value indicates if the name is complete or shortened If the name is shortened the complete namecan be read after the connection is established

                                    bull 0x08 - Shortened Local Namebull 0x09 - Complete Local Name

                                    Note 1 A shortened name contains only continuous characters from the beginning of the full name For

                                    example if the device name is BT_Device_Name then the shortened name can beBT_Device or BT_Dev

                                    2 Complete data type list are available at httpswwwbluetoothcomspecificationsassigned-numbersgeneric-access-profile

                                    For management of advertisement process and cover the different configurations specified by SIG theATBTLC1000 Host driver provides the two functions elaborated in the following sections

                                    In the application use these two functions to setup the following ADV_IN type payloadFigure 3-6 ADV_IN Type Payload Process

                                    ATBTLC1000Establishing Connection with Central Device

                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 21

                                    3131 Setting the Advertisement Payload (ble_advertisement_data_set)Prototype ndashat_ble_status_t at_ble_adv_data_set (uint8_t const const adv_datauint8_t adv_data_lenuint8_t const const scan_resp_datauint8_t scan_response_data_len)

                                    Description ndash Set clear or update the advertisement and scan response data

                                    Parameters ndash

                                    bull adv_data ndash Raw data to be placed in advertisement packetbull adv_data_len ndash Data length for adv_data Max size 28 bytes (3 bytes are reserved to set

                                    advertising AD type flags based on the selected Advertising mode and the user is not required toconfigure AD type flags in the advertisement payload)

                                    bull scan_resp_data ndash Raw data to be placed in the scan response packet If NULL no changes aremade to the current scan response packet data

                                    bull scan_response_data_len ndash Data length for scan_resp_data Max size 31 bytes

                                    Return ndash Execution Status

                                    This function requires a parameter raw adv_data to be sent to central Following is an example of itsdefinition

                                    static uint8_t adv_data[] = 0x11 AD1 length = 170x03 AD1 Type = Complete list of 128-bit UUIDs0x1b0xc50xd50xa50x020x000xa60x87 AD1 = UUID MSBs0xe50x110x360x390xc00xba0x5a0xf00x0A AD2 Length = 100x09 AD2 Type = Complete local NamelsquoMrsquorsquoyrsquorsquo_rsquorsquoDrsquorsquoErsquorsquoVrsquo AD2 = ldquoMy_DEVrdquo

                                    3132 Starting the Advertisement Process (at_ble_adv_start)Prototype ndashat_ble_status_t at_ble_adv_start (at_ble_adv_type_t typeat_ble_adv_mode_t modeat_ble_addr_t peer_addrat_ble_filter_type_t filtereduint16_t intervaluint16_t timeoutbool disable_randomness)

                                    Description ndash Start advertisement process

                                    Parameters ndash

                                    bull type ndash Advertising type to be used can bendash AT_BLE_ADV_TYPE_UNDIRECTEDndash AT_BLE_ADV_TYPE_DIRECTEDndash AT_BLE_ADV_TYPE_SCANNABLE_UNDIRECTEDndash AT_BLE_ADV_TYPE_NONCONN_UNDIRECTEDndash AT_BLE_ADV_TYPE_DIRECTED_LDCndash AT_BLE_ADV_TYPE_SCAN_RESPONSE

                                    bull mode ndash Advertising mode to be used can be

                                    ATBTLC1000Establishing Connection with Central Device

                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 22

                                    ndash AT_BLE_ADV_NON_DISCOVERABLEndash AT_BLE_ADV_GEN_DISCOVERABLEndash AT_BLE_ADV_LIM_DISCOVERABLEndash AT_BLE_ADV_BROADCASTER_MODE

                                    bull peer_addr ndash Specify peer address when advertising type is AT_BLE_ADV_TYPE_DIRECTEDbull filtered ndash

                                    ndash AT_BLE_ADV_FP_ANY ndash Allow scan and connection requests from anyonendash AT_BLE_ADV_FP_FILTER_SCANREQ ndash Allow scan request from White List devices onlyndash AT_BLE_ADV_FP_FILTER_CONNREQ ndash Allow connection request from White List devices

                                    onlyndash AT_BLE_ADV_FP_FILTER_BOTH ndash Allow scan and connection requests from White List

                                    devices onlybull interval ndash Advertisement interval (in 0625 ms units)bull timeout ndash Advertising timeout between 0x0001 and 0x028F in scale of seconds This parameter

                                    must be set to 0 if type equals AT_BLE_ADV_TYPE_DIRECTEDbull disable_randomness ndash When disabled advertisements are performed at the exact interval

                                    without adding random 10 ms tempo

                                    Return ndash Execution Status

                                    314 Advertisement ProcessIn this assignment the advertisement process is performed in the following configuration

                                    bull Undirected (Type AT_BLE_ADV_TYPE_UNDIRECTED)bull Discoverable (Mode AT_BLE_ADV_GEN_DISCOVERABLE)bull No peer Address (peer_addr = NULL)bull No filtering (filtered = AT_BLE_ADV_FP_ANY)bull Advertisement interval 1s (interval = 1600)bull Maximum timeout (timeout 655)bull Randomness enabled (disable_randomness = FALSE)

                                    3141 Starting the Advertisement Process1 Open startup_templatec file2 Declare the following ble_status global variable in startup_templatec as volatile

                                    include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehvolatile at_ble_status_t ble_status

                                    3 Declare the following adv_data global variable in startup_templatec as staticstatic uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD)0x09 AD2 Type = Complete local Name

                                    ATBTLC1000Establishing Connection with Central Device

                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 23

                                    My_SENS AD2 = ldquoMy_SENSrdquo

                                    Note 1 The name of the device is to be changed (AD2 field)2 According to the new name AD2 length must be adapted to new AD2 content

                                    4 Add the following start_advertisement function in startup_templatec prototype for thefunction void start_advertisement (void) also this can be added to avoid warningsvoid start_advertisement (void)printf(n Assignment 21 Start Advertisement)Set advertisement datable_status = at_ble_adv_data_set(adv_datasizeof(adv_data)NULL0)Start Advertisementble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550)if(ble_status = AT_BLE_SUCCESS)printf(n Failed to start advertisement)

                                    5 Start the advertisement process by adding the following highlighted code to the application mainroutineint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Start Advertising process start_advertisement() Register PrimaryIncluded service in case of GATT Server while(true) Write application task

                                    6 Click to save the project ltCtrl+Sgt

                                    7 Click button to compile the project ltF7gt8 Verify that no build error appears in Atmel Studio output window

                                    Figure 3-7 Atmel Studio Output Window

                                    ATBTLC1000Establishing Connection with Central Device

                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 24

                                    9 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt10 Open Microchip SmartConnect Application on Android or iOS device and tap START SCAN button

                                    Note  The device must appear in Microchip SmartConnect Application

                                    Figure 3-8 Microchip SmartConnect Application

                                    11 Terminal must display the following Log outputFigure 3-9 Log Output Window

                                    32 Managing GAP eventsThe management of the Bluetooth connection at the host MCU level is done through reception andhandling of events reported by the ATBTLC1000 These events are generated by ATBTLC1000 GAPGATT and L2CAP layers to notify the host about the ongoing Bluetooth interaction with other devices inits vicinity

                                    ATBTLC1000Establishing Connection with Central Device

                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 25

                                    To manage events coming from the ATBTLC1000 module the host driver must provide able_mgr_events_callback_handler function that allows registration of application callback functionto be executed on each event reported by the ATBTLC1000 module

                                    Prototype ndashbool ble_mgr_events_callback_handler(ble_mgr_event_cb_t event_cb_typeble_mgr_event_t event_typeconst voidble_event_handler)

                                    Description ndash Used by ProfileServiceApplication to register the Bluetooth Low Energy eventsrsquocallbacks

                                    Parameters ndash

                                    event_cb_type ndash types of actions to perform on callbacks can be either

                                    REGISTER_CALL_BACK or

                                    UNREGISTER_CALL_BACKevent_type ndash Any one of the event types can be used

                                    BLE_GAP_EVENT_TYPEBLE_GATT_CLIENT_EVENT_TYPEBLE_GATT_SERVER_EVENT_TYPEBLE_L2CAP_EVENT_TYPEBLE_GATT_HTPT_EVENT_TYPEBLE_DTM_EVENT_TYPEBLE_CUSTOM_EVENT_TYPEble_event_handler ndash pointer to handler list

                                    Structure ble_gap_event_cb_t defines the GAP callbacks Similarly structuresble_gatt_client_event_cb_t and ble_gatt_server_event_cb_t define the callbacks of GATTevents

                                    typedef struct ble_gap_event_cb BLE Undefined events received from ATBTLC1000 which is not handled in Libraryble_event_callback_t undefined BLE scan information contains the peer device scan information Refer ref at_ble_scan_info_tble_event_callback_t scan_info Once the BLE scan timeout or scan stop triggers the scan report event Refer ref at_ble_scan_report_tble_event_callback_t scan_report Advertisement complete event Refer ref at_ble_adv_cmp_evt_tble_event_callback_t advt_cmp Advertisement report in case of advertisement stopped due to advertisement timeout Refer ref at_ble_adv_report_tble_event_callback_t adv_report BLE device own random address changed event Refer ref at_ble_rand_addr_changed_tble_event_callback_t rand_addr_changed BLE connected event device connected to peer device Refer ref at_ble_connected_tble_event_callback_t connected BLE disconnected event device disconnected from peer device Refer ref at_ble_disconnected_tble_event_callback_t disconnected Connection parameter update done on peer device and own device Refer ref at_ble_conn_param_update_done_t

                                    ATBTLC1000Establishing Connection with Central Device

                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 26

                                    ble_event_callback_t conn_parameter_update_done Connection parameter update request from peer device Refer ref at_ble_conn_param_update_request_tble_event_callback_t conn_param_update_request Pair complete event as part of end of pairing process Refer ref at_ble_pair_done_tble_event_callback_t pair_done Pair request event from Central device Refer ref at_ble_pair_request_tble_event_callback_t pair_request Slave security request received from peer Peripheral device Refer ref at_ble_slave_sec_request_tble_event_callback_t slave_sec_request Pair Key request event from Peer central device Refer ref at_ble_pair_key_request_tble_event_callback_t pair_key_request encryption request comes from the peer device Needs to supply the bonding information which is stored earlier ref at_ble_encryption_request_tble_event_callback_t encryption_request encryption status changed event received from SMP once the encryption is started ref at_ble_encryption_status_changed_tble_event_callback_t encryption_status_changed Event triggered once the Resolve random address is resolved using supplied IRKs ref at_ble_resolv_rand_addr_status_tble_event_callback_t resolv_rand_addr_status Event is triggered once the connection signature information indication received ref at_ble_sign_counter_tble_event_callback_t sign_counters_ind Peer attribute information indication received Event ref at_ble_peer_att_info_ind_tble_event_callback_t peer_att_info_ind Peer device channel map received indication ref at_ble_channel_map_tble_event_callback_t con_channel_map_indble_gap_event_cb_t

                                    Note  Callback definition is application-specific If the application layer requires a specific event callbackthen the specific member of the structure is to be assigned with the address of the callback function

                                    In this assignment two callback functions on Connected and Disconnected GAP events are usedThis allows the application to restart the advertising process on Disconnect manage connectioninformation and startstop of sensor data update

                                    321 Handling of Connected and Disconnected GAP Events1 Open the startup_templatec file2 Define the following software flags as global variables in startup_templatec file volatile

                                    bool timer_flag = false and volatile bool connected_flag = false3 Declare and implement the following ble_connected_cb function in the

                                    startup_templatec file Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param)printf(n Assignment 22 Application connected )connected_flag = trueALL_UNUSED(param)return AT_BLE_SUCCESS

                                    4 Declare and implement the following ble_disconnected_cb function instartup_templatec file Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param)printf(n Assignment 22 Application disconnected )connected_flag = falsestart_advertisement()ALL_UNUSED(param)return AT_BLE_SUCCESS

                                    ATBTLC1000Establishing Connection with Central Device

                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 27

                                    5 Declare the following static GAP callback structure in ldquostartup_templatecrdquo filestatic const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTEDdisconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                                    6 Add the following register_btlc1000_callbacks function in startup_templatec Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void) Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks)ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACKBLE_GAP_EVENT_TYPEampapp_gap_handle)if (ble_status = true)printf(nError when Registering ATBTLC1000 callbacks)

                                    7 Add the register_btlc1000_callbacks function call prior to start advertisement in theapplication main routineint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Gap Callbacks register_btlc1000_callbacks ( ) Start Advertising process start_advertisement() Register PrimaryIncluded service in case of GATT Server while(true) Write application task

                                    8 Add the ble_event_task function call in the project main loop to handle the different incomingevents from ATBTLC1000while(true)ble_event_task()

                                    9 Press button ltF7gt to compile the project and verify that no build error appear in the AtmelStudio output window

                                    ATBTLC1000Establishing Connection with Central Device

                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 28

                                    Figure 3-10 Atmel Studio Output Window

                                    10 Click ldquo rdquo to save the project ltCtrl+Sgt

                                    11 Click ldquo rdquo to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt and checkcorrect initialization of the ATBTLC1000

                                    12 Open the Microchip SmartConnect application on Androidtrade or iOS device13 Press the ltStart Scangt button and pair peripherals by selecting them in the device list (pass key

                                    123456)Note 

                                    1 Pairing event handling is carried out by ble_managerc Refer toble_pair_key_request_handler() for code implementation The default pass key of123456 is also fixed inside this function This can be changed here

                                    Figure 3-11 Console Log Window

                                    Note  After peripheral pairing no services information are displayed in Microchip SmartConnectapplication as no service is currently defined and started on peripheral side

                                    ATBTLC1000Establishing Connection with Central Device

                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 29

                                    4 SettingHandling of Pre-Defined ServiceThe management of services are done in the GATT layer of the ATBTLC1000 ROM coded Bluetooth LowEnergy Stack The GATT transactions are based on high-level nested objects called Profiles Servicesand Characteristics stored in SRAM memory of ATBTLC1000 device This assignment adds the pre-defined service of information service from ASF library

                                    Figure 4-1 ATBTLC1000 GATT Layers

                                    bull ProfilesProfiles are not available in the Bluetooth Low Energy peripheral they are simply a pre-definedcollection of services that have been compiled by either the Bluetooth SIG (adopted GATT basedprofile) or by the application developer (custom profiles) For example the Heart Rate Profilecombines the Heart Rate Service and the Device Information Service

                                    Note  The complete list of officially adopted GATT-based profiles is available on the BluetoothDeveloper Portal

                                    bull ServicesA service is a collection of data and associated behaviors which accomplish a particular function orfeature of a device or portions of a device A service may reference other primary or secondaryservices andor a set of characteristics that make up the service Each service distinguishes itselffrom other services by means of a unique numeric ID called as UUID which can be either 16-bit(for officially adopted Bluetooth Low Energy Services) or 128-bit (for custom services)

                                    Note  A full list of officially adopted services and their UUID are seen on the Bluetooth DeveloperPortal

                                    bull CharacteristicsA characteristic is the lowest level concept in GATT transactions It contains a single data point withdifferent attributes such as notify read or write capabilities Similar to Services each characteristiccan be distinguished by a SIG-defined adopted UUID (16-bit) or custom (128-bit) UUID This UUIDensures interoperability across Bluetooth Low Energy devices The characteristics are important tointeract with in a Bluetooth Low Energy network In addition to standard UUID the custom UUID isused in case of specific application When characteristics with custom UUID are used in a devicethen it will be interoperable only with those devices that support these characteristics with customUUID

                                    ATBTLC1000SettingHandling of Pre-Defined Service

                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 30

                                    In this assignment the following steps are added to the Host MCU application to set up and handle adevice information service within the ATBTLC1000 module The following steps are added to the startupproject

                                    bull Adding device info service component from ASFbull Configuring and loading the service

                                    Figure 4-2 Device Information Service

                                    41 Adding Device Info Service Component from ASF Wizard to ProjectTo use the ldquoofficially adopted GATT-based profilesrdquo from SIG ASF provides Bluetooth Low Energy servicecomponents including init functions that pre-define services in Host memory

                                    Note  Before starting this assignment be sure to follow the steps mentioned in 2 Creating the Projectand Initializing and 3 Establishing Connection with Central Device

                                    1 Click ASF gt ASF Wizard2 Search for ldquoBLE-Device Information Servicesrdquo and then click Add

                                    ATBTLC1000SettingHandling of Pre-Defined Service

                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 31

                                    Figure 4-3 Available Modules

                                    3 Now ldquoBLE-Device Information Servicesrdquo (component) appears in ldquoSelected ModulesrdquoFigure 4-4 Selected Modules

                                    4 Click Apply to add the component to the projectFigure 4-5 Adding the Modules to Project

                                    5 The ldquoDevice Information Servicerdquo component is added to the project and is confirmed bydevice_information folder added in Solution Explorer

                                    ATBTLC1000SettingHandling of Pre-Defined Service

                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 32

                                    Figure 4-6 Device Information Service Added to Project

                                    42 Configuring and Loading Device Information ServiceThe ATBTLC1000 Host driver provides a set of GATT functions that allows storing and updating theservices in ATBTLC1000 memories

                                    Prototype at_ble_status_t at_ble_primary_service_define(at_ble_uuid_t uuidat_ble_handle_t service_handleat_ble_included_service_t included_service_listuint16_t included_service_countat_ble_characteristic_t charactristic_listuint16_t charactristic_count)

                                    Description Defines a new primary service along with its included services and characteristics inATBTLC1000

                                    Parameters

                                    bull Uuid [In] ndash primary service UUIDbull service_handle [Out] ndash Service handle is returned herebull included_service_list [In] ndash an array of included service referencesbull included_service_count [In] ndash number of elements in included_service_listbull charactristic_list [InOut] ndash an array of characteristics included in the service this array

                                    is updated with respective characteristics handlesbull charactristic_count[In] ndash number of elements in charactristic_list

                                    Return Execution Status

                                    This function requires an argument as GATT description structure of the service that is implemented Thepreviously added Device Info service component provides Bluetooth Low Energy service middlewareincluding the init functions that predefine the services See below ldquodis_init_servicerdquo from device infoBLE service (device_infohc)

                                    Prototype ndash void dis_init_service(dis_gatt_service_handler_t device_info_serv)Description ndash Initialize the device information service handler in the host MCU memory

                                    Parameters ndash

                                    ATBTLC1000SettingHandling of Pre-Defined Service

                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 33

                                    bull device_info_serv [Inout] pointer to device info GATT description handler to beupdated

                                    Return None

                                    Here is a picture of GATT device info service descriptor definition in Host memory

                                    device_info_serv-gtserv_handle = 0device_info_serv-gtserv_uuidtype = AT_BLE_UUID_16device_info_serv-gtserv_uuiduuid[0] = (uint8_t) DIS_SERVICE_UUIDdevice_info_serv-gtserv_uuiduuid[1] = (uint8_t) (DIS_SERVICE_UUID gtgt 8)Characteristic Info for Manufacturer Name Stringdevice_info_serv-gtserv_chars[0]char_val_handle = 0 handle stored here device_info_serv-gtserv_chars[0]uuidtype = AT_BLE_UUID_16device_info_serv-gtserv_chars[0]uuiduuid[0] = (uint8_t) IS_CHAR_MANUFACTURER_NAME_UUID UUID Manufacturer Name String device_info_serv-gtserv_chars[0]uuiduuid[1] = (uint8_t) (DIS_CHAR_MANUFACTURER_NAME_UUID gtgt 8) UUID Manufacturer Name String device_info_serv-gtserv_chars[0]properties = AT_BLE_CHAR_READ Properties memcpy(char_valuemanufacturer_nameDEFAULT_MANUFACTURER_NAMEDIS_CHAR_MANUFACTURER_NAME_INIT_LEN)device_info_serv-gtserv_chars[0]init_value = char_valuemanufacturer_namedevice_info_serv-gtserv_chars[0]value_init_len = DIS_CHAR_MANUFACTURER_NAME_INIT_LENdevice_info_serv-gtserv_chars[0]value_max_len = DIS_CHAR_MANUFACTURER_NAME_MAX_LENif BLE_PAIR_ENABLEdevice_info_serv-gtserv_chars[0]value_permissions = AT_BLE_ATTR_READABLE_REQ_AUTHN_NO_AUTHR permissions elsedevice_info_serv-gtserv_chars[0]value_permissions = AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR permissions endifdevice_info_serv-gtserv_chars[0]user_desc = NULL user defined name device_info_serv-gtserv_chars[0]user_desc_len = 0device_info_serv-gtserv_chars[0]user_desc_max_len = 0device_info_serv-gtserv_chars[0]user_desc_permissions = AT_BLE_ATTR_NO_PERMISSIONS user description permissionsdevice_info_serv-gtserv_chars[0]client_config_permissions = AT_BLE_ATTR_NO_PERMISSIONS client config permissionsdevice_info_serm hdsv-gtserv_chars[0]server_config_permissions = AT_BLE_ATTR_NO_PERMISSIONS server config permissionsdevice_info_serv-gtserv_chars[0]user_desc_handle = 0 user desc handlesdevice_info_serv-gtserv_chars[0]client_config_handle = 0 client config handlesdevice_info_serv-gtserv_chars[0]server_config_handle = 0 server config handlesdevice_info_serv-gtserv_chars[0]presentation_format = NULL presentation format

                                    Note  In case of custom service the above definition initialization must be taken care of by thedeveloper

                                    421 Procedure to Configure and Load Device Info Service1 Include device info service header file (device_infoh) at the beginning of

                                    startup_templatec fileinclude ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehinclude device_infoh

                                    2 Define a device info service handler as global in startup_templatec file Serviceshandlers dis_gatt_service_handler_t dis_service_handler

                                    ATBTLC1000SettingHandling of Pre-Defined Service

                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 34

                                    3 Add dis_init_service and at_ble_primary_service_define functions as called abovethe advertisement start in main routine Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service)dis_init_service (ampdis_service_handler) Define the primary service in the GATT server database if ((dis_primary_service_define (ampdis_service_handler)) = AT_BLE_SUCCESS)printf(Device Information Service definition failed) Start Advertising process start_advertisement()

                                    4 Click to save the project ltCtrl+Sgt and compile the project by pressing button ltF7gt5 Verify that no build error appears in Atmel Studio output window

                                    Figure 4-7 Atmel Studio Output Window

                                    6 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt7 Open ldquoMicrochip SmartConnectrdquo application on Android or iOS device8 Press ltStart Scangt button and connect to peripheral

                                    Note  The device name is a characteristic and contains the name of the device This device namecan be read by the central device to know the name of the device in order to differentiate thedevices This is being set using at_ble_device_name_set()API The device name is set bydefault when ble_device_init is called and the value is pre-defined using BLE_DEVICE_NAMEThe device name can also be sent as part of advertisement payload to be same as the oneconfigured in at_ble_adv_data_set() API It is the responsibility of users to keep the devicename set in advertisement payload the same as that configured inat_ble_device_name_set()

                                    9 The Service must now be visible after pairing with peripheral under Microchip SmartConnectapplication

                                    ATBTLC1000SettingHandling of Pre-Defined Service

                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 35

                                    Figure 4-8 Service List in Microchip SmartConnect Application

                                    Note  If the pairing of ATBTLC1000 with Microchip Smart connect is not successful then removethe pairing information from mobile by selecting ldquoForget Devicerdquo from the mobile settings Thereason for this is that the mobile app stores the previous pairing information but the ATBTLC1000device lost the previous pairing information due to RESET since it was stored on temporary storage(RAM)

                                    10 The serial terminal must display the following log output windowFigure 4-9 Console Log Window

                                    ATBTLC1000SettingHandling of Pre-Defined Service

                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 36

                                    5 Setting up and Handling Custom ServiceThe previous assignment describes the handling of Bluetooth Low Energy SIG defined device infoservice which is the predefined service available in ASF component This assignment describes thecustom service So the service initialization needs to be implemented In the context of customizedenvironment service the following service description is pushed in ATBTLC1000 memory

                                    Figure 5-1 Custom Service

                                    Custom Environment Service Description

                                    bull UUID type ndash Custom UUID (128-bit)bull UUID ndash 1bc5d5a5-0200-a687-e511-3639c1ba5af0

                                    Characteristic 0 (Temperature)

                                    bull User Description ndash Temperaturebull UUID type ndash Custom UUID (128-bit)bull UUID ndash 1bc5d5a5-0200-a687-e511-3639d8ba5af0bull Properties ndash Read Notifybull Value permission ndash No authorization requiredbull Client config permission ndash No permissionbull Server config permission ndash No permission

                                    Note  In this definition UUIDs are generated randomly Custom servicescharacteristics are free to useany 128-bit UUID less than the base UUID There is no reserved space for vendors to use 16-bit or 32-bitUUIDs

                                    With this definition any temperature change is notified to the central The notify mechanism allows thecentral to know when the data changes When notify property of the Client Characteristic ConfigurationDescriptor is enabled by the central and the device writes the new value then this updated value isautomatically sent to the central through a notification The central is not required to send readcharacteristic commands explicitly to the peripheral (GATT server)

                                    To setup and handle the custom environment service in ATBTLC1000 module the following steps areadded to the Host MCU application

                                    bull Configure and load the custom servicebull Update Temperature characteristic and notify to the central devicebull Receive and handle notification from the Host device

                                    ATBTLC1000Setting up and Handling Custom Service

                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 37

                                    Figure 5-2 Custom Service Flowchart

                                    51 Configuring and Loading the Custom Environment ServiceThe ATBTLC1000 Host driver provides the following set of GATT functions that allows it to push andupdate the service descriptions in the ATBTLC1000 SRAM memory

                                    Note  Before starting this assignment be sure to follow the steps mentioned in 2 Creating the Projectand Initializing and 3 Establishing Connection with Central Device

                                    Prototype ndashat_ble_status_t at_ble_primary_service_define(at_ble_uuid_t uuidat_ble_handle_t service_handleat_ble_included_service_t included_service_listuint16_t included_service_countat_ble_characteristic_t charactristic_listuint16_t charactristic_count)

                                    Description ndash Defines a new primary service along with its included services and characteristics inATBTLC1000 module

                                    Parameters

                                    bull Uuid [In] ndash primary service UUIDbull service_handle [Out] ndash service handle is returned herebull included_service_list [In] ndash array of included service referencesbull included_service_count [In] ndash number of elements in included_service_listbull charactristic_list [InOut] ndash an array of characteristics included in the service this array

                                    is update with respective characteristics handlesbull charactristic_count[In] ndash number of elements in charactristic_list

                                    ATBTLC1000Setting up and Handling Custom Service

                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 38

                                    Return ndash Execution Status

                                    bull Characteristics ndashndash Characteristics definition is done through specific array of following

                                    ldquoat_ble_characteristic_trdquo structure instancestypedef structat_ble_handle_t char_val_handle Handler (returned during service initialisation)at_ble_uuid_t uuid Characteristic UUID (type and value)at_ble_char_properties_t propertiesCharac Properties (read write notify)uint8_t init_value initial valueuint16_t value_init_len initial value lengthuint16_t value_max_len value max lengthat_ble_attr_permissions_t value_permissions access authorization and authenticationuint8_t user_desc User descriptionuint16_t user_desc_len User description lengthuint16_t user_desc_max_len User description max lengthat_ble_char_presentation_t presentation_format Presentation formatat_ble_attr_permissions_t user_desc_permissions User description permissionat_ble_attr_permissions_t client_config_permissions client permissionat_ble_attr_permissions_t server_config_permissions server permissionat_ble_handle_t user_desc_handle description handlerat_ble_handle_t client_config_handle Client config handlerat_ble_handle_t server_config_handle Server config handler at_ble_characteristic_t

                                    511 Procedure to Configure and Load Custom Environment Service1 Define the following service UUID and characteristic UUID in startup_templatec file

                                    define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

                                    2 Define the following environment service handler and characteristics variable as global instartup_templatec file Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

                                    3 Add the following service initialization function custom_environment_service_init instartup_templatecvoid custom_environment_service_init(void) at_ble_uuid_t environment_service_uuiduint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUIDuint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperatureenvironment_service_characs[0]user_desc_len = 10environment_service_characs[0]user_desc_max_len = 10environment_service_characs[0]uuidtype = AT_BLE_UUID_128memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16)environment_service_characs[0]properties = AT_BLE_CHAR_READ |AT_BLE_CHAR_NOTIFYenvironment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature valueenvironment_service_characs[0]value_permissions =(AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuidampenvironment_service_handlerNULL0environment_service_characs1)=AT_BLE_SUCCESS)printf(n Assignment 41 Failed to Initialize custom environment service)

                                    ATBTLC1000Setting up and Handling Custom Service

                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 39

                                    elseprintf(n Assignment 41 Initialize custom environment service)

                                    4 Declare and implement the following GATT event callback functioncustom_char_changed_app_event in startup_templatec file If a client (central) enablesnotifications for a server the server (peripheral) receives an AT_BLE_CHARACTERISTIC_CHANGEDevent and this event callback is called Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

                                    5 Declare and implement the following custom_notification_confirmation_handlerfunction in startup_templatec file Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param)at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )paramif (event_param-gtstatus == AT_BLE_SUCCESS)printf(n Assignment 41Notification Successfully sent over the air) else printf(n Assignment 41Sending Notification over the air failed)return AT_BLE_SUCCESS

                                    6 Declare the following GATT server callback structure in startup_templatec file Thisassignment uses two GATT callbacksstatic const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handlercharacteristic_changed = custom_char_changed_app_event

                                    7 Add the following register_gatt_server_callbacks function in startup_templatec toregister GATT server callback for notification confirmation event Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks)ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACKBLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle)if (ble_status = true)printf(nError when Registering ATBTLC1000 callbacks)

                                    8 Add custom_environment_service_init and register_gatt_server_callbacksfunction calls prior to start advertisement in the application main routine to initialize custom serviceand to register the GATT server callbacksint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()

                                    ATBTLC1000Setting up and Handling Custom Service

                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 40

                                    endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks() Custom service init custom_environment_service_init ( ) Register Gatt server callbacks register_gatt_server_callbacks ( ) Start Advertising process start_advertisement()while(true)ble_event_task()

                                    9 Click to save the project ltCtrl+Sgt

                                    10 Compile the project by pressing button ltF7gt11 Verify that no build error appears in the Atmel Studio output window

                                    Figure 5-3 Atmel Studio Output Window

                                    12 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt13 Open the ldquoMicrochip SmartConnectrdquo application on Android or iOS device14 Connect and pair to the peripheral (pass key 123456)15 Custom service must now be visible after pairing with peripheral under Microchip SmartConnect

                                    application

                                    ATBTLC1000Setting up and Handling Custom Service

                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 41

                                    Figure 5-4 Service List in Microchip SmartConnect Application

                                    Note  Custom service is displayed as unknown service in the above figure as this service is not aSIG-defined service

                                    Figure 5-5 General Information

                                    16 Serial terminal client must display the following Log output

                                    ATBTLC1000Setting up and Handling Custom Service

                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 42

                                    Figure 5-6 Log Output Window

                                    52 Updating the Temperature CharacteristicIn the previous assignment the custom Temperature characteristic is defined with a notify attribute Thistype of attribute requires notification to be sent to central when a new characteristic value is availableThe update of any ldquonotifyrdquo characteristic value is based on following interaction between the Host MCUand the ATBTLC1000Figure 5-7 Characteristic Notification

                                    521 Setting a Characteristic Value ( at_ble_characteristic_value_set)Prototype ndashat_ble_status_t at_ble_characteristic_value_setat_ble_handle_t handleuint8_t valueuint16_t len)

                                    Description ndash Sets a characteristic value in ATBTLC1000 memory

                                    Parameters ndash

                                    ATBTLC1000Setting up and Handling Custom Service

                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 43

                                    bull handle [inout] ndash Pointer to Characteristic handle to be changedbull value [in] ndash New valuebull len [in] ndash Value length in bytes

                                    Return ndash Execution Status

                                    522 Sending a Notification (at_ble_notification_send)Prototype ndashat_ble_status_t at_ble_notification_send(at_ble_handle_t conn_handleat_ble_handle_t attr_handle)

                                    Description ndash Sends a Notification

                                    Parameters ndash

                                    bull conn_handle[in] ndash handle of the connection to be notifiedbull attr_handle [in] ndash handle of the attribute originating the notification

                                    Return ndash Execution Status

                                    523 Sending Temperature Information Once in Every 10 Seconds to Central1 Modify the following ldquotimer_callback_fnrdquo callback function from the startup_templatec

                                    filestatic void timer_callback_fn(void)timer_flag = true

                                    2 hw_timer_init()in main routine of startup_templatec initializes the hardware timer3 If a client (Central) enables the notifications for a server the server (Peripheral) receives an

                                    AT_BLE_CHARACTERISTIC_CHANGED event callback then start the periodic 10 second timer forsending the notification Add the following code in previously definedcustom_char_changed_app_event function Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))timer_flag = falsehw_timer_start(10)printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

                                    4 Declare the following Temperature_value global variable in startup_templatec staticuint8_t Temperature_value = 25 as static

                                    5 Add the following send_temperature_notification function in startup_templatec tosend temperature every 10 seconds Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++

                                    ATBTLC1000Setting up and Handling Custom Service

                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 44

                                    if(Temperature_value gt 75)Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set(environment_service_characs[0]char_val_handle(uint8_t )ampTemperature_valuesizeof(Temperature_value))ble_status = at_ble_notification_send(0environment_service_characs[0]char_val_handle)if(ble_status = AT_BLE_SUCCESS)printf(fail to send temperature update notification )

                                    6 Add the following code in main routine to send temperature data every 10 secondswhile (1) ble_event_task()if(connected_flag == true ampamp timer_flag == truetimer_flag = falsesend_temperature_notification()

                                    7 Click to save the project ltCtrl+Sgt

                                    8 Compile the project by pressing the button ltF7gt9 Verify that no build error appears in Atmel Studio output window

                                    Figure 5-8 Atmel Studio Output Window

                                    10 Click to program the project binary on the L21 Xplained XSTK11 Open ldquoMicrochip SmartConnectrdquo Application on Android or iOS device12 Connect and pair to the peripheral (pass key 123456)13 Click NOTIFY to start the notification14 Temperature information in HEX values must be displayed in Microchip SmartConnect application

                                    ATBTLC1000Setting up and Handling Custom Service

                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 45

                                    Figure 5-9 Notification Window

                                    15 Serial terminal must display the following log outputFigure 5-10 Log Output Window

                                    ATBTLC1000Setting up and Handling Custom Service

                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 46

                                    6 Appendix A Software Solution - Pre-Defined SvcThe following is the code implementation for handling of pre-defined service done in 4 SettingHandlingof Pre-Defined Service

                                    - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehinclude device_infoh

                                    volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false Services handlers dis_gatt_service_handler_t dis_service_handler

                                    static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

                                    void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                                    Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                                    Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                                    static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                                    Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void) Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks)

                                    ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 47

                                    ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                    timer callback function static void timer_callback_fn(void) Add timer callback functionality here

                                    void button_cb(void) Add button callback functionality here

                                    int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                                    Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                                    DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks()

                                    Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service) dis_init_service(ampdis_service_handler) Define the primary service in the GATT server database if((dis_primary_service_define(ampdis_service_handler)) = AT_BLE_SUCCESS) printf(Device Information Service definition failed)

                                    Start Advertising process start_advertisement() while(true) ble_event_task()

                                    ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 48

                                    7 Appendix B Software Solution - Custom ServiceThe following is the code implementation for handling of pre-defined service done in 5 Setting up andHandling Custom Service

                                    - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templateh

                                    volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false

                                    static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

                                    define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0

                                    define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

                                    Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

                                    void custom_environment_service_init(void) at_ble_uuid_t environment_service_uuid uint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUID uint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128 memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperature environment_service_characs[0]user_desc_len = 10 environment_service_characs[0]user_desc_max_len = 10 environment_service_characs[0]uuidtype = AT_BLE_UUID_128 memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16) environment_service_characs[0]properties = AT_BLE_CHAR_READ | AT_BLE_CHAR_NOTIFY environment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature value environment_service_characs[0]value_permissions = (AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuid ampenvironment_service_handlerNULL0 environment_service_characs1)=AT_BLE_SUCCESS) printf(n Assignment 41 Failed to Initialize custom environment service) else printf(n Assignment 41 Initialize custom environment service)

                                    Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param) at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )param if (event_param-gtstatus == AT_BLE_SUCCESS) printf(n Assignment 41Notification Successfully sent over the air)

                                    ATBTLC1000Appendix B Software Solution - Custom Service

                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 49

                                    else printf(n Assignment 41Sending Notification over the air failed) return AT_BLE_SUCCESS

                                    static at_ble_status_t custom_char_changed_app_event(void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle -gt char_new_value[0])) timer_flag = false hw_timer_start(10) printf(n Assignment 41Characteristic changed event) return AT_BLE_SUCCESS

                                    static const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handler characteristic_changed = custom_char_changed_app_event

                                    Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                    void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                                    Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                                    Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                                    static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                                    Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void)

                                    ATBTLC1000Appendix B Software Solution - Custom Service

                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 50

                                    Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                    timer callback function static void timer_callback_fn(void) Add timer callback functionality here timer_flag = true

                                    void button_cb(void) Add button callback functionality here

                                    static uint8_t Temperature_value = 25

                                    Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++ if(Temperature_value gt 75) Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set( environment_service_characs[0]char_val_handle (uint8_t )ampTemperature_value sizeof(Temperature_value)) ble_status = at_ble_notification_send(0 environment_service_characs[0]char_val_handle) if(ble_status = AT_BLE_SUCCESS) printf(fail to send temperature update notification )

                                    int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                                    Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                                    DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register Gap ATBTLC1000 Callbacks register_btlc1000_callbacks()

                                    Custom service init custom_environment_service_init()

                                    ATBTLC1000Appendix B Software Solution - Custom Service

                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 51

                                    Register Gatt server callback register_gatt_server_callbacks()

                                    Start Advertising process start_advertisement() while(true) ble_event_task() if(connected_flag == true ampamp timer_flag == true) timer_flag = false send_temperature_notification()

                                    ATBTLC1000Appendix B Software Solution - Custom Service

                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 52

                                    8 Document Revision HistoryRev B - 42018

                                    Section Changes

                                    Document Revised contents to match various Bluetooth Low Energy standard versions

                                    Rev A - 122017

                                    Section Changes

                                    Document Initial release

                                    ATBTLC1000Document Revision History

                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 53

                                    The Microchip Web Site

                                    Microchip provides online support via our web site at httpwwwmicrochipcom This web site is used asa means to make files and information easily available to customers Accessible by using your favoriteInternet browser the web site contains the following information

                                    bull Product Support ndash Data sheets and errata application notes and sample programs designresources userrsquos guides and hardware support documents latest software releases and archivedsoftware

                                    bull General Technical Support ndash Frequently Asked Questions (FAQ) technical support requestsonline discussion groups Microchip consultant program member listing

                                    bull Business of Microchip ndash Product selector and ordering guides latest Microchip press releaseslisting of seminars and events listings of Microchip sales offices distributors and factoryrepresentatives

                                    Customer Change Notification Service

                                    Microchiprsquos customer notification service helps keep customers current on Microchip productsSubscribers will receive e-mail notification whenever there are changes updates revisions or erratarelated to a specified product family or development tool of interest

                                    To register access the Microchip web site at httpwwwmicrochipcom Under ldquoSupportrdquo click onldquoCustomer Change Notificationrdquo and follow the registration instructions

                                    Customer Support

                                    Users of Microchip products can receive assistance through several channels

                                    bull Distributor or Representativebull Local Sales Officebull Field Application Engineer (FAE)bull Technical Support

                                    Customers should contact their distributor representative or Field Application Engineer (FAE) for supportLocal sales offices are also available to help customers A listing of sales offices and locations is includedin the back of this document

                                    Technical support is available through the web site at httpwwwmicrochipcomsupport

                                    Microchip Devices Code Protection Feature

                                    Note the following details of the code protection feature on Microchip devices

                                    bull Microchip products meet the specification contained in their particular Microchip Data Sheetbull Microchip believes that its family of products is one of the most secure families of its kind on the

                                    market today when used in the intended manner and under normal conditionsbull There are dishonest and possibly illegal methods used to breach the code protection feature All of

                                    these methods to our knowledge require using the Microchip products in a manner outside theoperating specifications contained in Microchiprsquos Data Sheets Most likely the person doing so isengaged in theft of intellectual property

                                    bull Microchip is willing to work with the customer who is concerned about the integrity of their code

                                    ATBTLC1000

                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 54

                                    bull Neither Microchip nor any other semiconductor manufacturer can guarantee the security of theircode Code protection does not mean that we are guaranteeing the product as ldquounbreakablerdquo

                                    Code protection is constantly evolving We at Microchip are committed to continuously improving thecode protection features of our products Attempts to break Microchiprsquos code protection feature may be aviolation of the Digital Millennium Copyright Act If such acts allow unauthorized access to your softwareor other copyrighted work you may have a right to sue for relief under that Act

                                    Legal Notice

                                    Information contained in this publication regarding device applications and the like is provided only foryour convenience and may be superseded by updates It is your responsibility to ensure that yourapplication meets with your specifications MICROCHIP MAKES NO REPRESENTATIONS ORWARRANTIES OF ANY KIND WHETHER EXPRESS OR IMPLIED WRITTEN OR ORAL STATUTORYOR OTHERWISE RELATED TO THE INFORMATION INCLUDING BUT NOT LIMITED TO ITSCONDITION QUALITY PERFORMANCE MERCHANTABILITY OR FITNESS FOR PURPOSEMicrochip disclaims all liability arising from this information and its use Use of Microchip devices in lifesupport andor safety applications is entirely at the buyerrsquos risk and the buyer agrees to defendindemnify and hold harmless Microchip from any and all damages claims suits or expenses resultingfrom such use No licenses are conveyed implicitly or otherwise under any Microchip intellectualproperty rights unless otherwise stated

                                    Trademarks

                                    The Microchip name and logo the Microchip logo AnyRate AVR AVR logo AVR Freaks BeaconThingsBitCloud CryptoMemory CryptoRF dsPIC FlashFlex flexPWR Heldo JukeBlox KeeLoq KeeLoq logoKleer LANCheck LINK MD maXStylus maXTouch MediaLB megaAVR MOST MOST logo MPLABOptoLyzer PIC picoPower PICSTART PIC32 logo Prochip Designer QTouch RightTouch SAM-BASpyNIC SST SST Logo SuperFlash tinyAVR UNIO and XMEGA are registered trademarks ofMicrochip Technology Incorporated in the USA and other countries

                                    ClockWorks The Embedded Control Solutions Company EtherSynch Hyper Speed Control HyperLightLoad IntelliMOS mTouch Precision Edge and Quiet-Wire are registered trademarks of MicrochipTechnology Incorporated in the USA

                                    Adjacent Key Suppression AKS Analog-for-the-Digital Age Any Capacitor AnyIn AnyOut BodyComchipKIT chipKIT logo CodeGuard CryptoAuthentication CryptoCompanion CryptoControllerdsPICDEM dsPICDEMnet Dynamic Average Matching DAM ECAN EtherGREEN In-Circuit SerialProgramming ICSP Inter-Chip Connectivity JitterBlocker KleerNet KleerNet logo Mindi MiWimotorBench MPASM MPF MPLAB Certified logo MPLIB MPLINK MultiTRAK NetDetach OmniscientCode Generation PICDEM PICDEMnet PICkit PICtail PureSilicon QMatrix RightTouch logo REALICE Ripple Blocker SAM-ICE Serial Quad IO SMART-IS SQI SuperSwitcher SuperSwitcher II TotalEndurance TSHARC USBCheck VariSense ViewSpan WiperLock Wireless DNA and ZENA aretrademarks of Microchip Technology Incorporated in the USA and other countries

                                    SQTP is a service mark of Microchip Technology Incorporated in the USA

                                    Silicon Storage Technology is a registered trademark of Microchip Technology Inc in other countries

                                    GestIC is a registered trademark of Microchip Technology Germany II GmbH amp Co KG a subsidiary ofMicrochip Technology Inc in other countries

                                    All other trademarks mentioned herein are property of their respective companies

                                    ATBTLC1000

                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 55

                                    copy 2018 Microchip Technology Incorporated Printed in the USA All Rights Reserved

                                    ISBN 978-1-5224-2921-0

                                    Quality Management System Certified by DNV

                                    ISOTS 16949Microchip received ISOTS-169492009 certification for its worldwide headquarters design and waferfabrication facilities in Chandler and Tempe Arizona Gresham Oregon and design centers in Californiaand India The Companyrsquos quality system processes and procedures are for its PICreg MCUs and dsPICreg

                                    DSCs KEELOQreg code hopping devices Serial EEPROMs microperipherals nonvolatile memory andanalog products In addition Microchiprsquos quality system for the design and manufacture of developmentsystems is ISO 90012000 certified

                                    ATBTLC1000

                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 56

                                    AMERICAS ASIAPACIFIC ASIAPACIFIC EUROPECorporate Office2355 West Chandler BlvdChandler AZ 85224-6199Tel 480-792-7200Fax 480-792-7277Technical SupporthttpwwwmicrochipcomsupportWeb AddresswwwmicrochipcomAtlantaDuluth GATel 678-957-9614Fax 678-957-1455Austin TXTel 512-257-3370BostonWestborough MATel 774-760-0087Fax 774-760-0088ChicagoItasca ILTel 630-285-0071Fax 630-285-0075DallasAddison TXTel 972-818-7423Fax 972-818-2924DetroitNovi MITel 248-848-4000Houston TXTel 281-894-5983IndianapolisNoblesville INTel 317-773-8323Fax 317-773-5453Tel 317-536-2380Los AngelesMission Viejo CATel 949-462-9523Fax 949-462-9608Tel 951-273-7800Raleigh NCTel 919-844-7510New York NYTel 631-435-6000San Jose CATel 408-735-9110Tel 408-436-4270Canada - TorontoTel 905-695-1980Fax 905-695-2078

                                    Australia - SydneyTel 61-2-9868-6733China - BeijingTel 86-10-8569-7000China - ChengduTel 86-28-8665-5511China - ChongqingTel 86-23-8980-9588China - DongguanTel 86-769-8702-9880China - GuangzhouTel 86-20-8755-8029China - HangzhouTel 86-571-8792-8115China - Hong Kong SARTel 852-2943-5100China - NanjingTel 86-25-8473-2460China - QingdaoTel 86-532-8502-7355China - ShanghaiTel 86-21-3326-8000China - ShenyangTel 86-24-2334-2829China - ShenzhenTel 86-755-8864-2200China - SuzhouTel 86-186-6233-1526China - WuhanTel 86-27-5980-5300China - XianTel 86-29-8833-7252China - XiamenTel 86-592-2388138China - ZhuhaiTel 86-756-3210040

                                    India - BangaloreTel 91-80-3090-4444India - New DelhiTel 91-11-4160-8631India - PuneTel 91-20-4121-0141Japan - OsakaTel 81-6-6152-7160Japan - TokyoTel 81-3-6880- 3770Korea - DaeguTel 82-53-744-4301Korea - SeoulTel 82-2-554-7200Malaysia - Kuala LumpurTel 60-3-7651-7906Malaysia - PenangTel 60-4-227-8870Philippines - ManilaTel 63-2-634-9065SingaporeTel 65-6334-8870Taiwan - Hsin ChuTel 886-3-577-8366Taiwan - KaohsiungTel 886-7-213-7830Taiwan - TaipeiTel 886-2-2508-8600Thailand - BangkokTel 66-2-694-1351Vietnam - Ho Chi MinhTel 84-28-5448-2100

                                    Austria - WelsTel 43-7242-2244-39Fax 43-7242-2244-393Denmark - CopenhagenTel 45-4450-2828Fax 45-4485-2829Finland - EspooTel 358-9-4520-820France - ParisTel 33-1-69-53-63-20Fax 33-1-69-30-90-79Germany - GarchingTel 49-8931-9700Germany - HaanTel 49-2129-3766400Germany - HeilbronnTel 49-7131-67-3636Germany - KarlsruheTel 49-721-625370Germany - MunichTel 49-89-627-144-0Fax 49-89-627-144-44Germany - RosenheimTel 49-8031-354-560Israel - RarsquoananaTel 972-9-744-7705Italy - MilanTel 39-0331-742611Fax 39-0331-466781Italy - PadovaTel 39-049-7625286Netherlands - DrunenTel 31-416-690399Fax 31-416-690340Norway - TrondheimTel 47-7289-7561Poland - WarsawTel 48-22-3325737Romania - BucharestTel 40-21-407-87-50Spain - MadridTel 34-91-708-08-90Fax 34-91-708-08-91Sweden - GothenbergTel 46-31-704-60-40Sweden - StockholmTel 46-8-5090-4654UK - WokinghamTel 44-118-921-5800Fax 44-118-921-5820

                                    Worldwide Sales and Service

                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 57

                                    • Introduction
                                    • Table of Contents
                                    • 1 Getting Started
                                      • 11 Software Prerequisites
                                        • 111 Installation Steps of Atmel Studio 7
                                          • 12 Software Setup
                                            • 121 Installation of Microchip SmartConnect application on a Mobile device
                                              • 13 ATBTLC1000 Embedded Firmware
                                              • 14 ATBTLC1000 Host Software API
                                              • 15 Hardware Prerequisites
                                                • 151 SMARTtrade SAM L21 Xplained Pro
                                                • 152 ATBTLC1000ZR Xplained Pro Extension board
                                                  • 16 Hardware Setup
                                                    • 2 Creating the Project and Initializing
                                                      • 21 Creating Project from ASF
                                                      • 22 Configuring ASF for ATBTLC1000-ZR
                                                      • 23 Compiling and Testing the Project
                                                        • 3 Establishing Connection with Central Device
                                                          • 31 Configuring and Starting the Advertisement Process
                                                            • 311 Flags (AD Type 0x00)
                                                            • 312 Available Service UUID (AD Types 0x02 to 0x07)
                                                            • 313 Device Name (AD Types 0x08 to 0x09)
                                                              • 3131 Setting the Advertisement Payload (ble_advertisement_data_set)
                                                              • 3132 Starting the Advertisement Process (at_ble_adv_start)
                                                                • 314 Advertisement Process
                                                                  • 3141 Starting the Advertisement Process
                                                                      • 32 Managing GAP events
                                                                        • 321 Handling of Connected and Disconnected GAP Events
                                                                            • 4 SettingHandling of Pre-Defined Service
                                                                              • 41 Adding Device Info Service Component from ASF Wizard to Project
                                                                              • 42 Configuring and Loading Device Information Service
                                                                                • 421 Procedure to Configure and Load Device Info Service
                                                                                    • 5 Setting up and Handling Custom Service
                                                                                      • 51 Configuring and Loading the Custom Environment Service
                                                                                        • 511 Procedure to Configure and Load Custom Environment Service
                                                                                          • 52 Updating the Temperature Characteristic
                                                                                            • 521 Setting a Characteristic Value ( at_ble_characteristic_value_set)
                                                                                            • 522 Sending a Notification (at_ble_notification_send)
                                                                                            • 523 Sending Temperature Information Once in Every 10 Seconds to Central
                                                                                                • 6 Appendix A Software Solution - Pre-Defined Svc
                                                                                                • 7 Appendix B Software Solution - Custom Service
                                                                                                • 8 Document Revision History
                                                                                                • The Microchip Web Site
                                                                                                • Customer Change Notification Service
                                                                                                • Customer Support
                                                                                                • Microchip Devices Code Protection Feature
                                                                                                • Legal Notice
                                                                                                • Trademarks
                                                                                                • Quality Management System Certified by DNV
                                                                                                • Worldwide Sales and Service

                                      Figure 3-2 Main Routine Flow Chart

                                      31 Configuring and Starting the Advertisement ProcessThe Bluetooth Low Energy devices transmit advertisement packets to show their presence to nearbydevices The advertisement packet is sent periodically at a time interval defined by variableldquoadvintervalrdquo defined in Bluetooth SIG specification To avoid any collision with other wireless networksuch as Wi-Fireg a channel change is performed for each advertisement packet sent (data frequencyhopping) as illustrated in the following figureFigure 3-3 Advertisement Process

                                      During advertisement the payload structure to be sent differs from application to application and is set byusing encapsulated packet data unit type information (PDU_TYPE)

                                      ATBTLC1000Establishing Connection with Central Device

                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 19

                                      Figure 3-4 PDU Advertising

                                      The following table lists the different PDU types used according to device role

                                      Advertising event types (PDU_TYPE) Broadcaster Observer Peripheral Central

                                      Connectible undirected event (ADV_IND) Excluded Excluded Mandatory Excluded

                                      Connectible directed event(ADV_DIRECT_IND) Excluded Excluded Optional Excluded

                                      Non-connectible undirected event(ADV_NONCONN_IND) Mandatory Excluded Optional Excluded

                                      Scannable undirected event (ADV_SCAN_IND) Optional Excluded Optional Excluded

                                      As our device acts as a Bluetooth Low Energy peripheral the connectable undirected event (ADV_IND)advertising type is used See the following description about the ADV_IND advertisement packetFigure 3-5 ADV_IND Advertisement Packet

                                      The ADV_IND payload contains different Advertisement Data types (AD0 - ADn) which provide specificinformation to the central device such as device short name Tx power level and list of availableservices UUIDs The number of advertisement data types that can be added to the advertisementpayload are limited by the advertisement payload size of 31 octets

                                      Following is a list of advertisement data types that are commonly found in ADV_IND payload

                                      ATBTLC1000Establishing Connection with Central Device

                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 20

                                      311 Flags (AD Type 0x00)The flags describe the basic device capability such as BLE support BLE discoverable mode BREDRsupport and simultaneous BRED

                                      312 Available Service UUID (AD Types 0x02 to 0x07)The Bluetooth Low Energy advertisement payloads are limited to 31 bytes Therefore only two 128-bitUUID values can be added to the payload For this purpose the specific AD types describe the length ofthe advertised UUID and provide information as to whether the payload contains a incompletecompletelist of UUID supported by the GATT server

                                      bull 0x02 - Incomplete list of 16-bit UUIDs (adopted GATT services)bull 0x03 - Complete list of 16-bit UUIDs (adopted GATT services)bull 0x06 - Incomplete list of 128-bit UUIDs (custom GATT services)bull 0x07 - Complete list of 128-bit UUIDs (custom GATT services)

                                      Note  When a 16-bit UUID is transmitted only the unique 2-byte value is sent The client knows that it isrequired to be injected into the base UUID For example the Health Thermometer Service is assigned as0x1809 so its equivalent UUID is 00001809-0000-1000-8000-00805F9B34FB

                                      313 Device Name (AD Types 0x08 to 0x09)This AD type field is used to advertise the Local name of device in the network The Local name datatype value indicates if the name is complete or shortened If the name is shortened the complete namecan be read after the connection is established

                                      bull 0x08 - Shortened Local Namebull 0x09 - Complete Local Name

                                      Note 1 A shortened name contains only continuous characters from the beginning of the full name For

                                      example if the device name is BT_Device_Name then the shortened name can beBT_Device or BT_Dev

                                      2 Complete data type list are available at httpswwwbluetoothcomspecificationsassigned-numbersgeneric-access-profile

                                      For management of advertisement process and cover the different configurations specified by SIG theATBTLC1000 Host driver provides the two functions elaborated in the following sections

                                      In the application use these two functions to setup the following ADV_IN type payloadFigure 3-6 ADV_IN Type Payload Process

                                      ATBTLC1000Establishing Connection with Central Device

                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 21

                                      3131 Setting the Advertisement Payload (ble_advertisement_data_set)Prototype ndashat_ble_status_t at_ble_adv_data_set (uint8_t const const adv_datauint8_t adv_data_lenuint8_t const const scan_resp_datauint8_t scan_response_data_len)

                                      Description ndash Set clear or update the advertisement and scan response data

                                      Parameters ndash

                                      bull adv_data ndash Raw data to be placed in advertisement packetbull adv_data_len ndash Data length for adv_data Max size 28 bytes (3 bytes are reserved to set

                                      advertising AD type flags based on the selected Advertising mode and the user is not required toconfigure AD type flags in the advertisement payload)

                                      bull scan_resp_data ndash Raw data to be placed in the scan response packet If NULL no changes aremade to the current scan response packet data

                                      bull scan_response_data_len ndash Data length for scan_resp_data Max size 31 bytes

                                      Return ndash Execution Status

                                      This function requires a parameter raw adv_data to be sent to central Following is an example of itsdefinition

                                      static uint8_t adv_data[] = 0x11 AD1 length = 170x03 AD1 Type = Complete list of 128-bit UUIDs0x1b0xc50xd50xa50x020x000xa60x87 AD1 = UUID MSBs0xe50x110x360x390xc00xba0x5a0xf00x0A AD2 Length = 100x09 AD2 Type = Complete local NamelsquoMrsquorsquoyrsquorsquo_rsquorsquoDrsquorsquoErsquorsquoVrsquo AD2 = ldquoMy_DEVrdquo

                                      3132 Starting the Advertisement Process (at_ble_adv_start)Prototype ndashat_ble_status_t at_ble_adv_start (at_ble_adv_type_t typeat_ble_adv_mode_t modeat_ble_addr_t peer_addrat_ble_filter_type_t filtereduint16_t intervaluint16_t timeoutbool disable_randomness)

                                      Description ndash Start advertisement process

                                      Parameters ndash

                                      bull type ndash Advertising type to be used can bendash AT_BLE_ADV_TYPE_UNDIRECTEDndash AT_BLE_ADV_TYPE_DIRECTEDndash AT_BLE_ADV_TYPE_SCANNABLE_UNDIRECTEDndash AT_BLE_ADV_TYPE_NONCONN_UNDIRECTEDndash AT_BLE_ADV_TYPE_DIRECTED_LDCndash AT_BLE_ADV_TYPE_SCAN_RESPONSE

                                      bull mode ndash Advertising mode to be used can be

                                      ATBTLC1000Establishing Connection with Central Device

                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 22

                                      ndash AT_BLE_ADV_NON_DISCOVERABLEndash AT_BLE_ADV_GEN_DISCOVERABLEndash AT_BLE_ADV_LIM_DISCOVERABLEndash AT_BLE_ADV_BROADCASTER_MODE

                                      bull peer_addr ndash Specify peer address when advertising type is AT_BLE_ADV_TYPE_DIRECTEDbull filtered ndash

                                      ndash AT_BLE_ADV_FP_ANY ndash Allow scan and connection requests from anyonendash AT_BLE_ADV_FP_FILTER_SCANREQ ndash Allow scan request from White List devices onlyndash AT_BLE_ADV_FP_FILTER_CONNREQ ndash Allow connection request from White List devices

                                      onlyndash AT_BLE_ADV_FP_FILTER_BOTH ndash Allow scan and connection requests from White List

                                      devices onlybull interval ndash Advertisement interval (in 0625 ms units)bull timeout ndash Advertising timeout between 0x0001 and 0x028F in scale of seconds This parameter

                                      must be set to 0 if type equals AT_BLE_ADV_TYPE_DIRECTEDbull disable_randomness ndash When disabled advertisements are performed at the exact interval

                                      without adding random 10 ms tempo

                                      Return ndash Execution Status

                                      314 Advertisement ProcessIn this assignment the advertisement process is performed in the following configuration

                                      bull Undirected (Type AT_BLE_ADV_TYPE_UNDIRECTED)bull Discoverable (Mode AT_BLE_ADV_GEN_DISCOVERABLE)bull No peer Address (peer_addr = NULL)bull No filtering (filtered = AT_BLE_ADV_FP_ANY)bull Advertisement interval 1s (interval = 1600)bull Maximum timeout (timeout 655)bull Randomness enabled (disable_randomness = FALSE)

                                      3141 Starting the Advertisement Process1 Open startup_templatec file2 Declare the following ble_status global variable in startup_templatec as volatile

                                      include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehvolatile at_ble_status_t ble_status

                                      3 Declare the following adv_data global variable in startup_templatec as staticstatic uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD)0x09 AD2 Type = Complete local Name

                                      ATBTLC1000Establishing Connection with Central Device

                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 23

                                      My_SENS AD2 = ldquoMy_SENSrdquo

                                      Note 1 The name of the device is to be changed (AD2 field)2 According to the new name AD2 length must be adapted to new AD2 content

                                      4 Add the following start_advertisement function in startup_templatec prototype for thefunction void start_advertisement (void) also this can be added to avoid warningsvoid start_advertisement (void)printf(n Assignment 21 Start Advertisement)Set advertisement datable_status = at_ble_adv_data_set(adv_datasizeof(adv_data)NULL0)Start Advertisementble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550)if(ble_status = AT_BLE_SUCCESS)printf(n Failed to start advertisement)

                                      5 Start the advertisement process by adding the following highlighted code to the application mainroutineint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Start Advertising process start_advertisement() Register PrimaryIncluded service in case of GATT Server while(true) Write application task

                                      6 Click to save the project ltCtrl+Sgt

                                      7 Click button to compile the project ltF7gt8 Verify that no build error appears in Atmel Studio output window

                                      Figure 3-7 Atmel Studio Output Window

                                      ATBTLC1000Establishing Connection with Central Device

                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 24

                                      9 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt10 Open Microchip SmartConnect Application on Android or iOS device and tap START SCAN button

                                      Note  The device must appear in Microchip SmartConnect Application

                                      Figure 3-8 Microchip SmartConnect Application

                                      11 Terminal must display the following Log outputFigure 3-9 Log Output Window

                                      32 Managing GAP eventsThe management of the Bluetooth connection at the host MCU level is done through reception andhandling of events reported by the ATBTLC1000 These events are generated by ATBTLC1000 GAPGATT and L2CAP layers to notify the host about the ongoing Bluetooth interaction with other devices inits vicinity

                                      ATBTLC1000Establishing Connection with Central Device

                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 25

                                      To manage events coming from the ATBTLC1000 module the host driver must provide able_mgr_events_callback_handler function that allows registration of application callback functionto be executed on each event reported by the ATBTLC1000 module

                                      Prototype ndashbool ble_mgr_events_callback_handler(ble_mgr_event_cb_t event_cb_typeble_mgr_event_t event_typeconst voidble_event_handler)

                                      Description ndash Used by ProfileServiceApplication to register the Bluetooth Low Energy eventsrsquocallbacks

                                      Parameters ndash

                                      event_cb_type ndash types of actions to perform on callbacks can be either

                                      REGISTER_CALL_BACK or

                                      UNREGISTER_CALL_BACKevent_type ndash Any one of the event types can be used

                                      BLE_GAP_EVENT_TYPEBLE_GATT_CLIENT_EVENT_TYPEBLE_GATT_SERVER_EVENT_TYPEBLE_L2CAP_EVENT_TYPEBLE_GATT_HTPT_EVENT_TYPEBLE_DTM_EVENT_TYPEBLE_CUSTOM_EVENT_TYPEble_event_handler ndash pointer to handler list

                                      Structure ble_gap_event_cb_t defines the GAP callbacks Similarly structuresble_gatt_client_event_cb_t and ble_gatt_server_event_cb_t define the callbacks of GATTevents

                                      typedef struct ble_gap_event_cb BLE Undefined events received from ATBTLC1000 which is not handled in Libraryble_event_callback_t undefined BLE scan information contains the peer device scan information Refer ref at_ble_scan_info_tble_event_callback_t scan_info Once the BLE scan timeout or scan stop triggers the scan report event Refer ref at_ble_scan_report_tble_event_callback_t scan_report Advertisement complete event Refer ref at_ble_adv_cmp_evt_tble_event_callback_t advt_cmp Advertisement report in case of advertisement stopped due to advertisement timeout Refer ref at_ble_adv_report_tble_event_callback_t adv_report BLE device own random address changed event Refer ref at_ble_rand_addr_changed_tble_event_callback_t rand_addr_changed BLE connected event device connected to peer device Refer ref at_ble_connected_tble_event_callback_t connected BLE disconnected event device disconnected from peer device Refer ref at_ble_disconnected_tble_event_callback_t disconnected Connection parameter update done on peer device and own device Refer ref at_ble_conn_param_update_done_t

                                      ATBTLC1000Establishing Connection with Central Device

                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 26

                                      ble_event_callback_t conn_parameter_update_done Connection parameter update request from peer device Refer ref at_ble_conn_param_update_request_tble_event_callback_t conn_param_update_request Pair complete event as part of end of pairing process Refer ref at_ble_pair_done_tble_event_callback_t pair_done Pair request event from Central device Refer ref at_ble_pair_request_tble_event_callback_t pair_request Slave security request received from peer Peripheral device Refer ref at_ble_slave_sec_request_tble_event_callback_t slave_sec_request Pair Key request event from Peer central device Refer ref at_ble_pair_key_request_tble_event_callback_t pair_key_request encryption request comes from the peer device Needs to supply the bonding information which is stored earlier ref at_ble_encryption_request_tble_event_callback_t encryption_request encryption status changed event received from SMP once the encryption is started ref at_ble_encryption_status_changed_tble_event_callback_t encryption_status_changed Event triggered once the Resolve random address is resolved using supplied IRKs ref at_ble_resolv_rand_addr_status_tble_event_callback_t resolv_rand_addr_status Event is triggered once the connection signature information indication received ref at_ble_sign_counter_tble_event_callback_t sign_counters_ind Peer attribute information indication received Event ref at_ble_peer_att_info_ind_tble_event_callback_t peer_att_info_ind Peer device channel map received indication ref at_ble_channel_map_tble_event_callback_t con_channel_map_indble_gap_event_cb_t

                                      Note  Callback definition is application-specific If the application layer requires a specific event callbackthen the specific member of the structure is to be assigned with the address of the callback function

                                      In this assignment two callback functions on Connected and Disconnected GAP events are usedThis allows the application to restart the advertising process on Disconnect manage connectioninformation and startstop of sensor data update

                                      321 Handling of Connected and Disconnected GAP Events1 Open the startup_templatec file2 Define the following software flags as global variables in startup_templatec file volatile

                                      bool timer_flag = false and volatile bool connected_flag = false3 Declare and implement the following ble_connected_cb function in the

                                      startup_templatec file Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param)printf(n Assignment 22 Application connected )connected_flag = trueALL_UNUSED(param)return AT_BLE_SUCCESS

                                      4 Declare and implement the following ble_disconnected_cb function instartup_templatec file Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param)printf(n Assignment 22 Application disconnected )connected_flag = falsestart_advertisement()ALL_UNUSED(param)return AT_BLE_SUCCESS

                                      ATBTLC1000Establishing Connection with Central Device

                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 27

                                      5 Declare the following static GAP callback structure in ldquostartup_templatecrdquo filestatic const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTEDdisconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                                      6 Add the following register_btlc1000_callbacks function in startup_templatec Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void) Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks)ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACKBLE_GAP_EVENT_TYPEampapp_gap_handle)if (ble_status = true)printf(nError when Registering ATBTLC1000 callbacks)

                                      7 Add the register_btlc1000_callbacks function call prior to start advertisement in theapplication main routineint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Gap Callbacks register_btlc1000_callbacks ( ) Start Advertising process start_advertisement() Register PrimaryIncluded service in case of GATT Server while(true) Write application task

                                      8 Add the ble_event_task function call in the project main loop to handle the different incomingevents from ATBTLC1000while(true)ble_event_task()

                                      9 Press button ltF7gt to compile the project and verify that no build error appear in the AtmelStudio output window

                                      ATBTLC1000Establishing Connection with Central Device

                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 28

                                      Figure 3-10 Atmel Studio Output Window

                                      10 Click ldquo rdquo to save the project ltCtrl+Sgt

                                      11 Click ldquo rdquo to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt and checkcorrect initialization of the ATBTLC1000

                                      12 Open the Microchip SmartConnect application on Androidtrade or iOS device13 Press the ltStart Scangt button and pair peripherals by selecting them in the device list (pass key

                                      123456)Note 

                                      1 Pairing event handling is carried out by ble_managerc Refer toble_pair_key_request_handler() for code implementation The default pass key of123456 is also fixed inside this function This can be changed here

                                      Figure 3-11 Console Log Window

                                      Note  After peripheral pairing no services information are displayed in Microchip SmartConnectapplication as no service is currently defined and started on peripheral side

                                      ATBTLC1000Establishing Connection with Central Device

                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 29

                                      4 SettingHandling of Pre-Defined ServiceThe management of services are done in the GATT layer of the ATBTLC1000 ROM coded Bluetooth LowEnergy Stack The GATT transactions are based on high-level nested objects called Profiles Servicesand Characteristics stored in SRAM memory of ATBTLC1000 device This assignment adds the pre-defined service of information service from ASF library

                                      Figure 4-1 ATBTLC1000 GATT Layers

                                      bull ProfilesProfiles are not available in the Bluetooth Low Energy peripheral they are simply a pre-definedcollection of services that have been compiled by either the Bluetooth SIG (adopted GATT basedprofile) or by the application developer (custom profiles) For example the Heart Rate Profilecombines the Heart Rate Service and the Device Information Service

                                      Note  The complete list of officially adopted GATT-based profiles is available on the BluetoothDeveloper Portal

                                      bull ServicesA service is a collection of data and associated behaviors which accomplish a particular function orfeature of a device or portions of a device A service may reference other primary or secondaryservices andor a set of characteristics that make up the service Each service distinguishes itselffrom other services by means of a unique numeric ID called as UUID which can be either 16-bit(for officially adopted Bluetooth Low Energy Services) or 128-bit (for custom services)

                                      Note  A full list of officially adopted services and their UUID are seen on the Bluetooth DeveloperPortal

                                      bull CharacteristicsA characteristic is the lowest level concept in GATT transactions It contains a single data point withdifferent attributes such as notify read or write capabilities Similar to Services each characteristiccan be distinguished by a SIG-defined adopted UUID (16-bit) or custom (128-bit) UUID This UUIDensures interoperability across Bluetooth Low Energy devices The characteristics are important tointeract with in a Bluetooth Low Energy network In addition to standard UUID the custom UUID isused in case of specific application When characteristics with custom UUID are used in a devicethen it will be interoperable only with those devices that support these characteristics with customUUID

                                      ATBTLC1000SettingHandling of Pre-Defined Service

                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 30

                                      In this assignment the following steps are added to the Host MCU application to set up and handle adevice information service within the ATBTLC1000 module The following steps are added to the startupproject

                                      bull Adding device info service component from ASFbull Configuring and loading the service

                                      Figure 4-2 Device Information Service

                                      41 Adding Device Info Service Component from ASF Wizard to ProjectTo use the ldquoofficially adopted GATT-based profilesrdquo from SIG ASF provides Bluetooth Low Energy servicecomponents including init functions that pre-define services in Host memory

                                      Note  Before starting this assignment be sure to follow the steps mentioned in 2 Creating the Projectand Initializing and 3 Establishing Connection with Central Device

                                      1 Click ASF gt ASF Wizard2 Search for ldquoBLE-Device Information Servicesrdquo and then click Add

                                      ATBTLC1000SettingHandling of Pre-Defined Service

                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 31

                                      Figure 4-3 Available Modules

                                      3 Now ldquoBLE-Device Information Servicesrdquo (component) appears in ldquoSelected ModulesrdquoFigure 4-4 Selected Modules

                                      4 Click Apply to add the component to the projectFigure 4-5 Adding the Modules to Project

                                      5 The ldquoDevice Information Servicerdquo component is added to the project and is confirmed bydevice_information folder added in Solution Explorer

                                      ATBTLC1000SettingHandling of Pre-Defined Service

                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 32

                                      Figure 4-6 Device Information Service Added to Project

                                      42 Configuring and Loading Device Information ServiceThe ATBTLC1000 Host driver provides a set of GATT functions that allows storing and updating theservices in ATBTLC1000 memories

                                      Prototype at_ble_status_t at_ble_primary_service_define(at_ble_uuid_t uuidat_ble_handle_t service_handleat_ble_included_service_t included_service_listuint16_t included_service_countat_ble_characteristic_t charactristic_listuint16_t charactristic_count)

                                      Description Defines a new primary service along with its included services and characteristics inATBTLC1000

                                      Parameters

                                      bull Uuid [In] ndash primary service UUIDbull service_handle [Out] ndash Service handle is returned herebull included_service_list [In] ndash an array of included service referencesbull included_service_count [In] ndash number of elements in included_service_listbull charactristic_list [InOut] ndash an array of characteristics included in the service this array

                                      is updated with respective characteristics handlesbull charactristic_count[In] ndash number of elements in charactristic_list

                                      Return Execution Status

                                      This function requires an argument as GATT description structure of the service that is implemented Thepreviously added Device Info service component provides Bluetooth Low Energy service middlewareincluding the init functions that predefine the services See below ldquodis_init_servicerdquo from device infoBLE service (device_infohc)

                                      Prototype ndash void dis_init_service(dis_gatt_service_handler_t device_info_serv)Description ndash Initialize the device information service handler in the host MCU memory

                                      Parameters ndash

                                      ATBTLC1000SettingHandling of Pre-Defined Service

                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 33

                                      bull device_info_serv [Inout] pointer to device info GATT description handler to beupdated

                                      Return None

                                      Here is a picture of GATT device info service descriptor definition in Host memory

                                      device_info_serv-gtserv_handle = 0device_info_serv-gtserv_uuidtype = AT_BLE_UUID_16device_info_serv-gtserv_uuiduuid[0] = (uint8_t) DIS_SERVICE_UUIDdevice_info_serv-gtserv_uuiduuid[1] = (uint8_t) (DIS_SERVICE_UUID gtgt 8)Characteristic Info for Manufacturer Name Stringdevice_info_serv-gtserv_chars[0]char_val_handle = 0 handle stored here device_info_serv-gtserv_chars[0]uuidtype = AT_BLE_UUID_16device_info_serv-gtserv_chars[0]uuiduuid[0] = (uint8_t) IS_CHAR_MANUFACTURER_NAME_UUID UUID Manufacturer Name String device_info_serv-gtserv_chars[0]uuiduuid[1] = (uint8_t) (DIS_CHAR_MANUFACTURER_NAME_UUID gtgt 8) UUID Manufacturer Name String device_info_serv-gtserv_chars[0]properties = AT_BLE_CHAR_READ Properties memcpy(char_valuemanufacturer_nameDEFAULT_MANUFACTURER_NAMEDIS_CHAR_MANUFACTURER_NAME_INIT_LEN)device_info_serv-gtserv_chars[0]init_value = char_valuemanufacturer_namedevice_info_serv-gtserv_chars[0]value_init_len = DIS_CHAR_MANUFACTURER_NAME_INIT_LENdevice_info_serv-gtserv_chars[0]value_max_len = DIS_CHAR_MANUFACTURER_NAME_MAX_LENif BLE_PAIR_ENABLEdevice_info_serv-gtserv_chars[0]value_permissions = AT_BLE_ATTR_READABLE_REQ_AUTHN_NO_AUTHR permissions elsedevice_info_serv-gtserv_chars[0]value_permissions = AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR permissions endifdevice_info_serv-gtserv_chars[0]user_desc = NULL user defined name device_info_serv-gtserv_chars[0]user_desc_len = 0device_info_serv-gtserv_chars[0]user_desc_max_len = 0device_info_serv-gtserv_chars[0]user_desc_permissions = AT_BLE_ATTR_NO_PERMISSIONS user description permissionsdevice_info_serv-gtserv_chars[0]client_config_permissions = AT_BLE_ATTR_NO_PERMISSIONS client config permissionsdevice_info_serm hdsv-gtserv_chars[0]server_config_permissions = AT_BLE_ATTR_NO_PERMISSIONS server config permissionsdevice_info_serv-gtserv_chars[0]user_desc_handle = 0 user desc handlesdevice_info_serv-gtserv_chars[0]client_config_handle = 0 client config handlesdevice_info_serv-gtserv_chars[0]server_config_handle = 0 server config handlesdevice_info_serv-gtserv_chars[0]presentation_format = NULL presentation format

                                      Note  In case of custom service the above definition initialization must be taken care of by thedeveloper

                                      421 Procedure to Configure and Load Device Info Service1 Include device info service header file (device_infoh) at the beginning of

                                      startup_templatec fileinclude ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehinclude device_infoh

                                      2 Define a device info service handler as global in startup_templatec file Serviceshandlers dis_gatt_service_handler_t dis_service_handler

                                      ATBTLC1000SettingHandling of Pre-Defined Service

                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 34

                                      3 Add dis_init_service and at_ble_primary_service_define functions as called abovethe advertisement start in main routine Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service)dis_init_service (ampdis_service_handler) Define the primary service in the GATT server database if ((dis_primary_service_define (ampdis_service_handler)) = AT_BLE_SUCCESS)printf(Device Information Service definition failed) Start Advertising process start_advertisement()

                                      4 Click to save the project ltCtrl+Sgt and compile the project by pressing button ltF7gt5 Verify that no build error appears in Atmel Studio output window

                                      Figure 4-7 Atmel Studio Output Window

                                      6 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt7 Open ldquoMicrochip SmartConnectrdquo application on Android or iOS device8 Press ltStart Scangt button and connect to peripheral

                                      Note  The device name is a characteristic and contains the name of the device This device namecan be read by the central device to know the name of the device in order to differentiate thedevices This is being set using at_ble_device_name_set()API The device name is set bydefault when ble_device_init is called and the value is pre-defined using BLE_DEVICE_NAMEThe device name can also be sent as part of advertisement payload to be same as the oneconfigured in at_ble_adv_data_set() API It is the responsibility of users to keep the devicename set in advertisement payload the same as that configured inat_ble_device_name_set()

                                      9 The Service must now be visible after pairing with peripheral under Microchip SmartConnectapplication

                                      ATBTLC1000SettingHandling of Pre-Defined Service

                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 35

                                      Figure 4-8 Service List in Microchip SmartConnect Application

                                      Note  If the pairing of ATBTLC1000 with Microchip Smart connect is not successful then removethe pairing information from mobile by selecting ldquoForget Devicerdquo from the mobile settings Thereason for this is that the mobile app stores the previous pairing information but the ATBTLC1000device lost the previous pairing information due to RESET since it was stored on temporary storage(RAM)

                                      10 The serial terminal must display the following log output windowFigure 4-9 Console Log Window

                                      ATBTLC1000SettingHandling of Pre-Defined Service

                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 36

                                      5 Setting up and Handling Custom ServiceThe previous assignment describes the handling of Bluetooth Low Energy SIG defined device infoservice which is the predefined service available in ASF component This assignment describes thecustom service So the service initialization needs to be implemented In the context of customizedenvironment service the following service description is pushed in ATBTLC1000 memory

                                      Figure 5-1 Custom Service

                                      Custom Environment Service Description

                                      bull UUID type ndash Custom UUID (128-bit)bull UUID ndash 1bc5d5a5-0200-a687-e511-3639c1ba5af0

                                      Characteristic 0 (Temperature)

                                      bull User Description ndash Temperaturebull UUID type ndash Custom UUID (128-bit)bull UUID ndash 1bc5d5a5-0200-a687-e511-3639d8ba5af0bull Properties ndash Read Notifybull Value permission ndash No authorization requiredbull Client config permission ndash No permissionbull Server config permission ndash No permission

                                      Note  In this definition UUIDs are generated randomly Custom servicescharacteristics are free to useany 128-bit UUID less than the base UUID There is no reserved space for vendors to use 16-bit or 32-bitUUIDs

                                      With this definition any temperature change is notified to the central The notify mechanism allows thecentral to know when the data changes When notify property of the Client Characteristic ConfigurationDescriptor is enabled by the central and the device writes the new value then this updated value isautomatically sent to the central through a notification The central is not required to send readcharacteristic commands explicitly to the peripheral (GATT server)

                                      To setup and handle the custom environment service in ATBTLC1000 module the following steps areadded to the Host MCU application

                                      bull Configure and load the custom servicebull Update Temperature characteristic and notify to the central devicebull Receive and handle notification from the Host device

                                      ATBTLC1000Setting up and Handling Custom Service

                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 37

                                      Figure 5-2 Custom Service Flowchart

                                      51 Configuring and Loading the Custom Environment ServiceThe ATBTLC1000 Host driver provides the following set of GATT functions that allows it to push andupdate the service descriptions in the ATBTLC1000 SRAM memory

                                      Note  Before starting this assignment be sure to follow the steps mentioned in 2 Creating the Projectand Initializing and 3 Establishing Connection with Central Device

                                      Prototype ndashat_ble_status_t at_ble_primary_service_define(at_ble_uuid_t uuidat_ble_handle_t service_handleat_ble_included_service_t included_service_listuint16_t included_service_countat_ble_characteristic_t charactristic_listuint16_t charactristic_count)

                                      Description ndash Defines a new primary service along with its included services and characteristics inATBTLC1000 module

                                      Parameters

                                      bull Uuid [In] ndash primary service UUIDbull service_handle [Out] ndash service handle is returned herebull included_service_list [In] ndash array of included service referencesbull included_service_count [In] ndash number of elements in included_service_listbull charactristic_list [InOut] ndash an array of characteristics included in the service this array

                                      is update with respective characteristics handlesbull charactristic_count[In] ndash number of elements in charactristic_list

                                      ATBTLC1000Setting up and Handling Custom Service

                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 38

                                      Return ndash Execution Status

                                      bull Characteristics ndashndash Characteristics definition is done through specific array of following

                                      ldquoat_ble_characteristic_trdquo structure instancestypedef structat_ble_handle_t char_val_handle Handler (returned during service initialisation)at_ble_uuid_t uuid Characteristic UUID (type and value)at_ble_char_properties_t propertiesCharac Properties (read write notify)uint8_t init_value initial valueuint16_t value_init_len initial value lengthuint16_t value_max_len value max lengthat_ble_attr_permissions_t value_permissions access authorization and authenticationuint8_t user_desc User descriptionuint16_t user_desc_len User description lengthuint16_t user_desc_max_len User description max lengthat_ble_char_presentation_t presentation_format Presentation formatat_ble_attr_permissions_t user_desc_permissions User description permissionat_ble_attr_permissions_t client_config_permissions client permissionat_ble_attr_permissions_t server_config_permissions server permissionat_ble_handle_t user_desc_handle description handlerat_ble_handle_t client_config_handle Client config handlerat_ble_handle_t server_config_handle Server config handler at_ble_characteristic_t

                                      511 Procedure to Configure and Load Custom Environment Service1 Define the following service UUID and characteristic UUID in startup_templatec file

                                      define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

                                      2 Define the following environment service handler and characteristics variable as global instartup_templatec file Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

                                      3 Add the following service initialization function custom_environment_service_init instartup_templatecvoid custom_environment_service_init(void) at_ble_uuid_t environment_service_uuiduint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUIDuint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperatureenvironment_service_characs[0]user_desc_len = 10environment_service_characs[0]user_desc_max_len = 10environment_service_characs[0]uuidtype = AT_BLE_UUID_128memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16)environment_service_characs[0]properties = AT_BLE_CHAR_READ |AT_BLE_CHAR_NOTIFYenvironment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature valueenvironment_service_characs[0]value_permissions =(AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuidampenvironment_service_handlerNULL0environment_service_characs1)=AT_BLE_SUCCESS)printf(n Assignment 41 Failed to Initialize custom environment service)

                                      ATBTLC1000Setting up and Handling Custom Service

                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 39

                                      elseprintf(n Assignment 41 Initialize custom environment service)

                                      4 Declare and implement the following GATT event callback functioncustom_char_changed_app_event in startup_templatec file If a client (central) enablesnotifications for a server the server (peripheral) receives an AT_BLE_CHARACTERISTIC_CHANGEDevent and this event callback is called Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

                                      5 Declare and implement the following custom_notification_confirmation_handlerfunction in startup_templatec file Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param)at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )paramif (event_param-gtstatus == AT_BLE_SUCCESS)printf(n Assignment 41Notification Successfully sent over the air) else printf(n Assignment 41Sending Notification over the air failed)return AT_BLE_SUCCESS

                                      6 Declare the following GATT server callback structure in startup_templatec file Thisassignment uses two GATT callbacksstatic const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handlercharacteristic_changed = custom_char_changed_app_event

                                      7 Add the following register_gatt_server_callbacks function in startup_templatec toregister GATT server callback for notification confirmation event Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks)ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACKBLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle)if (ble_status = true)printf(nError when Registering ATBTLC1000 callbacks)

                                      8 Add custom_environment_service_init and register_gatt_server_callbacksfunction calls prior to start advertisement in the application main routine to initialize custom serviceand to register the GATT server callbacksint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()

                                      ATBTLC1000Setting up and Handling Custom Service

                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 40

                                      endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks() Custom service init custom_environment_service_init ( ) Register Gatt server callbacks register_gatt_server_callbacks ( ) Start Advertising process start_advertisement()while(true)ble_event_task()

                                      9 Click to save the project ltCtrl+Sgt

                                      10 Compile the project by pressing button ltF7gt11 Verify that no build error appears in the Atmel Studio output window

                                      Figure 5-3 Atmel Studio Output Window

                                      12 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt13 Open the ldquoMicrochip SmartConnectrdquo application on Android or iOS device14 Connect and pair to the peripheral (pass key 123456)15 Custom service must now be visible after pairing with peripheral under Microchip SmartConnect

                                      application

                                      ATBTLC1000Setting up and Handling Custom Service

                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 41

                                      Figure 5-4 Service List in Microchip SmartConnect Application

                                      Note  Custom service is displayed as unknown service in the above figure as this service is not aSIG-defined service

                                      Figure 5-5 General Information

                                      16 Serial terminal client must display the following Log output

                                      ATBTLC1000Setting up and Handling Custom Service

                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 42

                                      Figure 5-6 Log Output Window

                                      52 Updating the Temperature CharacteristicIn the previous assignment the custom Temperature characteristic is defined with a notify attribute Thistype of attribute requires notification to be sent to central when a new characteristic value is availableThe update of any ldquonotifyrdquo characteristic value is based on following interaction between the Host MCUand the ATBTLC1000Figure 5-7 Characteristic Notification

                                      521 Setting a Characteristic Value ( at_ble_characteristic_value_set)Prototype ndashat_ble_status_t at_ble_characteristic_value_setat_ble_handle_t handleuint8_t valueuint16_t len)

                                      Description ndash Sets a characteristic value in ATBTLC1000 memory

                                      Parameters ndash

                                      ATBTLC1000Setting up and Handling Custom Service

                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 43

                                      bull handle [inout] ndash Pointer to Characteristic handle to be changedbull value [in] ndash New valuebull len [in] ndash Value length in bytes

                                      Return ndash Execution Status

                                      522 Sending a Notification (at_ble_notification_send)Prototype ndashat_ble_status_t at_ble_notification_send(at_ble_handle_t conn_handleat_ble_handle_t attr_handle)

                                      Description ndash Sends a Notification

                                      Parameters ndash

                                      bull conn_handle[in] ndash handle of the connection to be notifiedbull attr_handle [in] ndash handle of the attribute originating the notification

                                      Return ndash Execution Status

                                      523 Sending Temperature Information Once in Every 10 Seconds to Central1 Modify the following ldquotimer_callback_fnrdquo callback function from the startup_templatec

                                      filestatic void timer_callback_fn(void)timer_flag = true

                                      2 hw_timer_init()in main routine of startup_templatec initializes the hardware timer3 If a client (Central) enables the notifications for a server the server (Peripheral) receives an

                                      AT_BLE_CHARACTERISTIC_CHANGED event callback then start the periodic 10 second timer forsending the notification Add the following code in previously definedcustom_char_changed_app_event function Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))timer_flag = falsehw_timer_start(10)printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

                                      4 Declare the following Temperature_value global variable in startup_templatec staticuint8_t Temperature_value = 25 as static

                                      5 Add the following send_temperature_notification function in startup_templatec tosend temperature every 10 seconds Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++

                                      ATBTLC1000Setting up and Handling Custom Service

                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 44

                                      if(Temperature_value gt 75)Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set(environment_service_characs[0]char_val_handle(uint8_t )ampTemperature_valuesizeof(Temperature_value))ble_status = at_ble_notification_send(0environment_service_characs[0]char_val_handle)if(ble_status = AT_BLE_SUCCESS)printf(fail to send temperature update notification )

                                      6 Add the following code in main routine to send temperature data every 10 secondswhile (1) ble_event_task()if(connected_flag == true ampamp timer_flag == truetimer_flag = falsesend_temperature_notification()

                                      7 Click to save the project ltCtrl+Sgt

                                      8 Compile the project by pressing the button ltF7gt9 Verify that no build error appears in Atmel Studio output window

                                      Figure 5-8 Atmel Studio Output Window

                                      10 Click to program the project binary on the L21 Xplained XSTK11 Open ldquoMicrochip SmartConnectrdquo Application on Android or iOS device12 Connect and pair to the peripheral (pass key 123456)13 Click NOTIFY to start the notification14 Temperature information in HEX values must be displayed in Microchip SmartConnect application

                                      ATBTLC1000Setting up and Handling Custom Service

                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 45

                                      Figure 5-9 Notification Window

                                      15 Serial terminal must display the following log outputFigure 5-10 Log Output Window

                                      ATBTLC1000Setting up and Handling Custom Service

                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 46

                                      6 Appendix A Software Solution - Pre-Defined SvcThe following is the code implementation for handling of pre-defined service done in 4 SettingHandlingof Pre-Defined Service

                                      - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehinclude device_infoh

                                      volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false Services handlers dis_gatt_service_handler_t dis_service_handler

                                      static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

                                      void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                                      Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                                      Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                                      static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                                      Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void) Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks)

                                      ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 47

                                      ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                      timer callback function static void timer_callback_fn(void) Add timer callback functionality here

                                      void button_cb(void) Add button callback functionality here

                                      int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                                      Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                                      DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks()

                                      Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service) dis_init_service(ampdis_service_handler) Define the primary service in the GATT server database if((dis_primary_service_define(ampdis_service_handler)) = AT_BLE_SUCCESS) printf(Device Information Service definition failed)

                                      Start Advertising process start_advertisement() while(true) ble_event_task()

                                      ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 48

                                      7 Appendix B Software Solution - Custom ServiceThe following is the code implementation for handling of pre-defined service done in 5 Setting up andHandling Custom Service

                                      - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templateh

                                      volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false

                                      static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

                                      define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0

                                      define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

                                      Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

                                      void custom_environment_service_init(void) at_ble_uuid_t environment_service_uuid uint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUID uint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128 memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperature environment_service_characs[0]user_desc_len = 10 environment_service_characs[0]user_desc_max_len = 10 environment_service_characs[0]uuidtype = AT_BLE_UUID_128 memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16) environment_service_characs[0]properties = AT_BLE_CHAR_READ | AT_BLE_CHAR_NOTIFY environment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature value environment_service_characs[0]value_permissions = (AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuid ampenvironment_service_handlerNULL0 environment_service_characs1)=AT_BLE_SUCCESS) printf(n Assignment 41 Failed to Initialize custom environment service) else printf(n Assignment 41 Initialize custom environment service)

                                      Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param) at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )param if (event_param-gtstatus == AT_BLE_SUCCESS) printf(n Assignment 41Notification Successfully sent over the air)

                                      ATBTLC1000Appendix B Software Solution - Custom Service

                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 49

                                      else printf(n Assignment 41Sending Notification over the air failed) return AT_BLE_SUCCESS

                                      static at_ble_status_t custom_char_changed_app_event(void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle -gt char_new_value[0])) timer_flag = false hw_timer_start(10) printf(n Assignment 41Characteristic changed event) return AT_BLE_SUCCESS

                                      static const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handler characteristic_changed = custom_char_changed_app_event

                                      Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                      void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                                      Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                                      Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                                      static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                                      Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void)

                                      ATBTLC1000Appendix B Software Solution - Custom Service

                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 50

                                      Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                      timer callback function static void timer_callback_fn(void) Add timer callback functionality here timer_flag = true

                                      void button_cb(void) Add button callback functionality here

                                      static uint8_t Temperature_value = 25

                                      Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++ if(Temperature_value gt 75) Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set( environment_service_characs[0]char_val_handle (uint8_t )ampTemperature_value sizeof(Temperature_value)) ble_status = at_ble_notification_send(0 environment_service_characs[0]char_val_handle) if(ble_status = AT_BLE_SUCCESS) printf(fail to send temperature update notification )

                                      int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                                      Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                                      DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register Gap ATBTLC1000 Callbacks register_btlc1000_callbacks()

                                      Custom service init custom_environment_service_init()

                                      ATBTLC1000Appendix B Software Solution - Custom Service

                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 51

                                      Register Gatt server callback register_gatt_server_callbacks()

                                      Start Advertising process start_advertisement() while(true) ble_event_task() if(connected_flag == true ampamp timer_flag == true) timer_flag = false send_temperature_notification()

                                      ATBTLC1000Appendix B Software Solution - Custom Service

                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 52

                                      8 Document Revision HistoryRev B - 42018

                                      Section Changes

                                      Document Revised contents to match various Bluetooth Low Energy standard versions

                                      Rev A - 122017

                                      Section Changes

                                      Document Initial release

                                      ATBTLC1000Document Revision History

                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 53

                                      The Microchip Web Site

                                      Microchip provides online support via our web site at httpwwwmicrochipcom This web site is used asa means to make files and information easily available to customers Accessible by using your favoriteInternet browser the web site contains the following information

                                      bull Product Support ndash Data sheets and errata application notes and sample programs designresources userrsquos guides and hardware support documents latest software releases and archivedsoftware

                                      bull General Technical Support ndash Frequently Asked Questions (FAQ) technical support requestsonline discussion groups Microchip consultant program member listing

                                      bull Business of Microchip ndash Product selector and ordering guides latest Microchip press releaseslisting of seminars and events listings of Microchip sales offices distributors and factoryrepresentatives

                                      Customer Change Notification Service

                                      Microchiprsquos customer notification service helps keep customers current on Microchip productsSubscribers will receive e-mail notification whenever there are changes updates revisions or erratarelated to a specified product family or development tool of interest

                                      To register access the Microchip web site at httpwwwmicrochipcom Under ldquoSupportrdquo click onldquoCustomer Change Notificationrdquo and follow the registration instructions

                                      Customer Support

                                      Users of Microchip products can receive assistance through several channels

                                      bull Distributor or Representativebull Local Sales Officebull Field Application Engineer (FAE)bull Technical Support

                                      Customers should contact their distributor representative or Field Application Engineer (FAE) for supportLocal sales offices are also available to help customers A listing of sales offices and locations is includedin the back of this document

                                      Technical support is available through the web site at httpwwwmicrochipcomsupport

                                      Microchip Devices Code Protection Feature

                                      Note the following details of the code protection feature on Microchip devices

                                      bull Microchip products meet the specification contained in their particular Microchip Data Sheetbull Microchip believes that its family of products is one of the most secure families of its kind on the

                                      market today when used in the intended manner and under normal conditionsbull There are dishonest and possibly illegal methods used to breach the code protection feature All of

                                      these methods to our knowledge require using the Microchip products in a manner outside theoperating specifications contained in Microchiprsquos Data Sheets Most likely the person doing so isengaged in theft of intellectual property

                                      bull Microchip is willing to work with the customer who is concerned about the integrity of their code

                                      ATBTLC1000

                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 54

                                      bull Neither Microchip nor any other semiconductor manufacturer can guarantee the security of theircode Code protection does not mean that we are guaranteeing the product as ldquounbreakablerdquo

                                      Code protection is constantly evolving We at Microchip are committed to continuously improving thecode protection features of our products Attempts to break Microchiprsquos code protection feature may be aviolation of the Digital Millennium Copyright Act If such acts allow unauthorized access to your softwareor other copyrighted work you may have a right to sue for relief under that Act

                                      Legal Notice

                                      Information contained in this publication regarding device applications and the like is provided only foryour convenience and may be superseded by updates It is your responsibility to ensure that yourapplication meets with your specifications MICROCHIP MAKES NO REPRESENTATIONS ORWARRANTIES OF ANY KIND WHETHER EXPRESS OR IMPLIED WRITTEN OR ORAL STATUTORYOR OTHERWISE RELATED TO THE INFORMATION INCLUDING BUT NOT LIMITED TO ITSCONDITION QUALITY PERFORMANCE MERCHANTABILITY OR FITNESS FOR PURPOSEMicrochip disclaims all liability arising from this information and its use Use of Microchip devices in lifesupport andor safety applications is entirely at the buyerrsquos risk and the buyer agrees to defendindemnify and hold harmless Microchip from any and all damages claims suits or expenses resultingfrom such use No licenses are conveyed implicitly or otherwise under any Microchip intellectualproperty rights unless otherwise stated

                                      Trademarks

                                      The Microchip name and logo the Microchip logo AnyRate AVR AVR logo AVR Freaks BeaconThingsBitCloud CryptoMemory CryptoRF dsPIC FlashFlex flexPWR Heldo JukeBlox KeeLoq KeeLoq logoKleer LANCheck LINK MD maXStylus maXTouch MediaLB megaAVR MOST MOST logo MPLABOptoLyzer PIC picoPower PICSTART PIC32 logo Prochip Designer QTouch RightTouch SAM-BASpyNIC SST SST Logo SuperFlash tinyAVR UNIO and XMEGA are registered trademarks ofMicrochip Technology Incorporated in the USA and other countries

                                      ClockWorks The Embedded Control Solutions Company EtherSynch Hyper Speed Control HyperLightLoad IntelliMOS mTouch Precision Edge and Quiet-Wire are registered trademarks of MicrochipTechnology Incorporated in the USA

                                      Adjacent Key Suppression AKS Analog-for-the-Digital Age Any Capacitor AnyIn AnyOut BodyComchipKIT chipKIT logo CodeGuard CryptoAuthentication CryptoCompanion CryptoControllerdsPICDEM dsPICDEMnet Dynamic Average Matching DAM ECAN EtherGREEN In-Circuit SerialProgramming ICSP Inter-Chip Connectivity JitterBlocker KleerNet KleerNet logo Mindi MiWimotorBench MPASM MPF MPLAB Certified logo MPLIB MPLINK MultiTRAK NetDetach OmniscientCode Generation PICDEM PICDEMnet PICkit PICtail PureSilicon QMatrix RightTouch logo REALICE Ripple Blocker SAM-ICE Serial Quad IO SMART-IS SQI SuperSwitcher SuperSwitcher II TotalEndurance TSHARC USBCheck VariSense ViewSpan WiperLock Wireless DNA and ZENA aretrademarks of Microchip Technology Incorporated in the USA and other countries

                                      SQTP is a service mark of Microchip Technology Incorporated in the USA

                                      Silicon Storage Technology is a registered trademark of Microchip Technology Inc in other countries

                                      GestIC is a registered trademark of Microchip Technology Germany II GmbH amp Co KG a subsidiary ofMicrochip Technology Inc in other countries

                                      All other trademarks mentioned herein are property of their respective companies

                                      ATBTLC1000

                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 55

                                      copy 2018 Microchip Technology Incorporated Printed in the USA All Rights Reserved

                                      ISBN 978-1-5224-2921-0

                                      Quality Management System Certified by DNV

                                      ISOTS 16949Microchip received ISOTS-169492009 certification for its worldwide headquarters design and waferfabrication facilities in Chandler and Tempe Arizona Gresham Oregon and design centers in Californiaand India The Companyrsquos quality system processes and procedures are for its PICreg MCUs and dsPICreg

                                      DSCs KEELOQreg code hopping devices Serial EEPROMs microperipherals nonvolatile memory andanalog products In addition Microchiprsquos quality system for the design and manufacture of developmentsystems is ISO 90012000 certified

                                      ATBTLC1000

                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 56

                                      AMERICAS ASIAPACIFIC ASIAPACIFIC EUROPECorporate Office2355 West Chandler BlvdChandler AZ 85224-6199Tel 480-792-7200Fax 480-792-7277Technical SupporthttpwwwmicrochipcomsupportWeb AddresswwwmicrochipcomAtlantaDuluth GATel 678-957-9614Fax 678-957-1455Austin TXTel 512-257-3370BostonWestborough MATel 774-760-0087Fax 774-760-0088ChicagoItasca ILTel 630-285-0071Fax 630-285-0075DallasAddison TXTel 972-818-7423Fax 972-818-2924DetroitNovi MITel 248-848-4000Houston TXTel 281-894-5983IndianapolisNoblesville INTel 317-773-8323Fax 317-773-5453Tel 317-536-2380Los AngelesMission Viejo CATel 949-462-9523Fax 949-462-9608Tel 951-273-7800Raleigh NCTel 919-844-7510New York NYTel 631-435-6000San Jose CATel 408-735-9110Tel 408-436-4270Canada - TorontoTel 905-695-1980Fax 905-695-2078

                                      Australia - SydneyTel 61-2-9868-6733China - BeijingTel 86-10-8569-7000China - ChengduTel 86-28-8665-5511China - ChongqingTel 86-23-8980-9588China - DongguanTel 86-769-8702-9880China - GuangzhouTel 86-20-8755-8029China - HangzhouTel 86-571-8792-8115China - Hong Kong SARTel 852-2943-5100China - NanjingTel 86-25-8473-2460China - QingdaoTel 86-532-8502-7355China - ShanghaiTel 86-21-3326-8000China - ShenyangTel 86-24-2334-2829China - ShenzhenTel 86-755-8864-2200China - SuzhouTel 86-186-6233-1526China - WuhanTel 86-27-5980-5300China - XianTel 86-29-8833-7252China - XiamenTel 86-592-2388138China - ZhuhaiTel 86-756-3210040

                                      India - BangaloreTel 91-80-3090-4444India - New DelhiTel 91-11-4160-8631India - PuneTel 91-20-4121-0141Japan - OsakaTel 81-6-6152-7160Japan - TokyoTel 81-3-6880- 3770Korea - DaeguTel 82-53-744-4301Korea - SeoulTel 82-2-554-7200Malaysia - Kuala LumpurTel 60-3-7651-7906Malaysia - PenangTel 60-4-227-8870Philippines - ManilaTel 63-2-634-9065SingaporeTel 65-6334-8870Taiwan - Hsin ChuTel 886-3-577-8366Taiwan - KaohsiungTel 886-7-213-7830Taiwan - TaipeiTel 886-2-2508-8600Thailand - BangkokTel 66-2-694-1351Vietnam - Ho Chi MinhTel 84-28-5448-2100

                                      Austria - WelsTel 43-7242-2244-39Fax 43-7242-2244-393Denmark - CopenhagenTel 45-4450-2828Fax 45-4485-2829Finland - EspooTel 358-9-4520-820France - ParisTel 33-1-69-53-63-20Fax 33-1-69-30-90-79Germany - GarchingTel 49-8931-9700Germany - HaanTel 49-2129-3766400Germany - HeilbronnTel 49-7131-67-3636Germany - KarlsruheTel 49-721-625370Germany - MunichTel 49-89-627-144-0Fax 49-89-627-144-44Germany - RosenheimTel 49-8031-354-560Israel - RarsquoananaTel 972-9-744-7705Italy - MilanTel 39-0331-742611Fax 39-0331-466781Italy - PadovaTel 39-049-7625286Netherlands - DrunenTel 31-416-690399Fax 31-416-690340Norway - TrondheimTel 47-7289-7561Poland - WarsawTel 48-22-3325737Romania - BucharestTel 40-21-407-87-50Spain - MadridTel 34-91-708-08-90Fax 34-91-708-08-91Sweden - GothenbergTel 46-31-704-60-40Sweden - StockholmTel 46-8-5090-4654UK - WokinghamTel 44-118-921-5800Fax 44-118-921-5820

                                      Worldwide Sales and Service

                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 57

                                      • Introduction
                                      • Table of Contents
                                      • 1 Getting Started
                                        • 11 Software Prerequisites
                                          • 111 Installation Steps of Atmel Studio 7
                                            • 12 Software Setup
                                              • 121 Installation of Microchip SmartConnect application on a Mobile device
                                                • 13 ATBTLC1000 Embedded Firmware
                                                • 14 ATBTLC1000 Host Software API
                                                • 15 Hardware Prerequisites
                                                  • 151 SMARTtrade SAM L21 Xplained Pro
                                                  • 152 ATBTLC1000ZR Xplained Pro Extension board
                                                    • 16 Hardware Setup
                                                      • 2 Creating the Project and Initializing
                                                        • 21 Creating Project from ASF
                                                        • 22 Configuring ASF for ATBTLC1000-ZR
                                                        • 23 Compiling and Testing the Project
                                                          • 3 Establishing Connection with Central Device
                                                            • 31 Configuring and Starting the Advertisement Process
                                                              • 311 Flags (AD Type 0x00)
                                                              • 312 Available Service UUID (AD Types 0x02 to 0x07)
                                                              • 313 Device Name (AD Types 0x08 to 0x09)
                                                                • 3131 Setting the Advertisement Payload (ble_advertisement_data_set)
                                                                • 3132 Starting the Advertisement Process (at_ble_adv_start)
                                                                  • 314 Advertisement Process
                                                                    • 3141 Starting the Advertisement Process
                                                                        • 32 Managing GAP events
                                                                          • 321 Handling of Connected and Disconnected GAP Events
                                                                              • 4 SettingHandling of Pre-Defined Service
                                                                                • 41 Adding Device Info Service Component from ASF Wizard to Project
                                                                                • 42 Configuring and Loading Device Information Service
                                                                                  • 421 Procedure to Configure and Load Device Info Service
                                                                                      • 5 Setting up and Handling Custom Service
                                                                                        • 51 Configuring and Loading the Custom Environment Service
                                                                                          • 511 Procedure to Configure and Load Custom Environment Service
                                                                                            • 52 Updating the Temperature Characteristic
                                                                                              • 521 Setting a Characteristic Value ( at_ble_characteristic_value_set)
                                                                                              • 522 Sending a Notification (at_ble_notification_send)
                                                                                              • 523 Sending Temperature Information Once in Every 10 Seconds to Central
                                                                                                  • 6 Appendix A Software Solution - Pre-Defined Svc
                                                                                                  • 7 Appendix B Software Solution - Custom Service
                                                                                                  • 8 Document Revision History
                                                                                                  • The Microchip Web Site
                                                                                                  • Customer Change Notification Service
                                                                                                  • Customer Support
                                                                                                  • Microchip Devices Code Protection Feature
                                                                                                  • Legal Notice
                                                                                                  • Trademarks
                                                                                                  • Quality Management System Certified by DNV
                                                                                                  • Worldwide Sales and Service

                                        Figure 3-4 PDU Advertising

                                        The following table lists the different PDU types used according to device role

                                        Advertising event types (PDU_TYPE) Broadcaster Observer Peripheral Central

                                        Connectible undirected event (ADV_IND) Excluded Excluded Mandatory Excluded

                                        Connectible directed event(ADV_DIRECT_IND) Excluded Excluded Optional Excluded

                                        Non-connectible undirected event(ADV_NONCONN_IND) Mandatory Excluded Optional Excluded

                                        Scannable undirected event (ADV_SCAN_IND) Optional Excluded Optional Excluded

                                        As our device acts as a Bluetooth Low Energy peripheral the connectable undirected event (ADV_IND)advertising type is used See the following description about the ADV_IND advertisement packetFigure 3-5 ADV_IND Advertisement Packet

                                        The ADV_IND payload contains different Advertisement Data types (AD0 - ADn) which provide specificinformation to the central device such as device short name Tx power level and list of availableservices UUIDs The number of advertisement data types that can be added to the advertisementpayload are limited by the advertisement payload size of 31 octets

                                        Following is a list of advertisement data types that are commonly found in ADV_IND payload

                                        ATBTLC1000Establishing Connection with Central Device

                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 20

                                        311 Flags (AD Type 0x00)The flags describe the basic device capability such as BLE support BLE discoverable mode BREDRsupport and simultaneous BRED

                                        312 Available Service UUID (AD Types 0x02 to 0x07)The Bluetooth Low Energy advertisement payloads are limited to 31 bytes Therefore only two 128-bitUUID values can be added to the payload For this purpose the specific AD types describe the length ofthe advertised UUID and provide information as to whether the payload contains a incompletecompletelist of UUID supported by the GATT server

                                        bull 0x02 - Incomplete list of 16-bit UUIDs (adopted GATT services)bull 0x03 - Complete list of 16-bit UUIDs (adopted GATT services)bull 0x06 - Incomplete list of 128-bit UUIDs (custom GATT services)bull 0x07 - Complete list of 128-bit UUIDs (custom GATT services)

                                        Note  When a 16-bit UUID is transmitted only the unique 2-byte value is sent The client knows that it isrequired to be injected into the base UUID For example the Health Thermometer Service is assigned as0x1809 so its equivalent UUID is 00001809-0000-1000-8000-00805F9B34FB

                                        313 Device Name (AD Types 0x08 to 0x09)This AD type field is used to advertise the Local name of device in the network The Local name datatype value indicates if the name is complete or shortened If the name is shortened the complete namecan be read after the connection is established

                                        bull 0x08 - Shortened Local Namebull 0x09 - Complete Local Name

                                        Note 1 A shortened name contains only continuous characters from the beginning of the full name For

                                        example if the device name is BT_Device_Name then the shortened name can beBT_Device or BT_Dev

                                        2 Complete data type list are available at httpswwwbluetoothcomspecificationsassigned-numbersgeneric-access-profile

                                        For management of advertisement process and cover the different configurations specified by SIG theATBTLC1000 Host driver provides the two functions elaborated in the following sections

                                        In the application use these two functions to setup the following ADV_IN type payloadFigure 3-6 ADV_IN Type Payload Process

                                        ATBTLC1000Establishing Connection with Central Device

                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 21

                                        3131 Setting the Advertisement Payload (ble_advertisement_data_set)Prototype ndashat_ble_status_t at_ble_adv_data_set (uint8_t const const adv_datauint8_t adv_data_lenuint8_t const const scan_resp_datauint8_t scan_response_data_len)

                                        Description ndash Set clear or update the advertisement and scan response data

                                        Parameters ndash

                                        bull adv_data ndash Raw data to be placed in advertisement packetbull adv_data_len ndash Data length for adv_data Max size 28 bytes (3 bytes are reserved to set

                                        advertising AD type flags based on the selected Advertising mode and the user is not required toconfigure AD type flags in the advertisement payload)

                                        bull scan_resp_data ndash Raw data to be placed in the scan response packet If NULL no changes aremade to the current scan response packet data

                                        bull scan_response_data_len ndash Data length for scan_resp_data Max size 31 bytes

                                        Return ndash Execution Status

                                        This function requires a parameter raw adv_data to be sent to central Following is an example of itsdefinition

                                        static uint8_t adv_data[] = 0x11 AD1 length = 170x03 AD1 Type = Complete list of 128-bit UUIDs0x1b0xc50xd50xa50x020x000xa60x87 AD1 = UUID MSBs0xe50x110x360x390xc00xba0x5a0xf00x0A AD2 Length = 100x09 AD2 Type = Complete local NamelsquoMrsquorsquoyrsquorsquo_rsquorsquoDrsquorsquoErsquorsquoVrsquo AD2 = ldquoMy_DEVrdquo

                                        3132 Starting the Advertisement Process (at_ble_adv_start)Prototype ndashat_ble_status_t at_ble_adv_start (at_ble_adv_type_t typeat_ble_adv_mode_t modeat_ble_addr_t peer_addrat_ble_filter_type_t filtereduint16_t intervaluint16_t timeoutbool disable_randomness)

                                        Description ndash Start advertisement process

                                        Parameters ndash

                                        bull type ndash Advertising type to be used can bendash AT_BLE_ADV_TYPE_UNDIRECTEDndash AT_BLE_ADV_TYPE_DIRECTEDndash AT_BLE_ADV_TYPE_SCANNABLE_UNDIRECTEDndash AT_BLE_ADV_TYPE_NONCONN_UNDIRECTEDndash AT_BLE_ADV_TYPE_DIRECTED_LDCndash AT_BLE_ADV_TYPE_SCAN_RESPONSE

                                        bull mode ndash Advertising mode to be used can be

                                        ATBTLC1000Establishing Connection with Central Device

                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 22

                                        ndash AT_BLE_ADV_NON_DISCOVERABLEndash AT_BLE_ADV_GEN_DISCOVERABLEndash AT_BLE_ADV_LIM_DISCOVERABLEndash AT_BLE_ADV_BROADCASTER_MODE

                                        bull peer_addr ndash Specify peer address when advertising type is AT_BLE_ADV_TYPE_DIRECTEDbull filtered ndash

                                        ndash AT_BLE_ADV_FP_ANY ndash Allow scan and connection requests from anyonendash AT_BLE_ADV_FP_FILTER_SCANREQ ndash Allow scan request from White List devices onlyndash AT_BLE_ADV_FP_FILTER_CONNREQ ndash Allow connection request from White List devices

                                        onlyndash AT_BLE_ADV_FP_FILTER_BOTH ndash Allow scan and connection requests from White List

                                        devices onlybull interval ndash Advertisement interval (in 0625 ms units)bull timeout ndash Advertising timeout between 0x0001 and 0x028F in scale of seconds This parameter

                                        must be set to 0 if type equals AT_BLE_ADV_TYPE_DIRECTEDbull disable_randomness ndash When disabled advertisements are performed at the exact interval

                                        without adding random 10 ms tempo

                                        Return ndash Execution Status

                                        314 Advertisement ProcessIn this assignment the advertisement process is performed in the following configuration

                                        bull Undirected (Type AT_BLE_ADV_TYPE_UNDIRECTED)bull Discoverable (Mode AT_BLE_ADV_GEN_DISCOVERABLE)bull No peer Address (peer_addr = NULL)bull No filtering (filtered = AT_BLE_ADV_FP_ANY)bull Advertisement interval 1s (interval = 1600)bull Maximum timeout (timeout 655)bull Randomness enabled (disable_randomness = FALSE)

                                        3141 Starting the Advertisement Process1 Open startup_templatec file2 Declare the following ble_status global variable in startup_templatec as volatile

                                        include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehvolatile at_ble_status_t ble_status

                                        3 Declare the following adv_data global variable in startup_templatec as staticstatic uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD)0x09 AD2 Type = Complete local Name

                                        ATBTLC1000Establishing Connection with Central Device

                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 23

                                        My_SENS AD2 = ldquoMy_SENSrdquo

                                        Note 1 The name of the device is to be changed (AD2 field)2 According to the new name AD2 length must be adapted to new AD2 content

                                        4 Add the following start_advertisement function in startup_templatec prototype for thefunction void start_advertisement (void) also this can be added to avoid warningsvoid start_advertisement (void)printf(n Assignment 21 Start Advertisement)Set advertisement datable_status = at_ble_adv_data_set(adv_datasizeof(adv_data)NULL0)Start Advertisementble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550)if(ble_status = AT_BLE_SUCCESS)printf(n Failed to start advertisement)

                                        5 Start the advertisement process by adding the following highlighted code to the application mainroutineint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Start Advertising process start_advertisement() Register PrimaryIncluded service in case of GATT Server while(true) Write application task

                                        6 Click to save the project ltCtrl+Sgt

                                        7 Click button to compile the project ltF7gt8 Verify that no build error appears in Atmel Studio output window

                                        Figure 3-7 Atmel Studio Output Window

                                        ATBTLC1000Establishing Connection with Central Device

                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 24

                                        9 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt10 Open Microchip SmartConnect Application on Android or iOS device and tap START SCAN button

                                        Note  The device must appear in Microchip SmartConnect Application

                                        Figure 3-8 Microchip SmartConnect Application

                                        11 Terminal must display the following Log outputFigure 3-9 Log Output Window

                                        32 Managing GAP eventsThe management of the Bluetooth connection at the host MCU level is done through reception andhandling of events reported by the ATBTLC1000 These events are generated by ATBTLC1000 GAPGATT and L2CAP layers to notify the host about the ongoing Bluetooth interaction with other devices inits vicinity

                                        ATBTLC1000Establishing Connection with Central Device

                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 25

                                        To manage events coming from the ATBTLC1000 module the host driver must provide able_mgr_events_callback_handler function that allows registration of application callback functionto be executed on each event reported by the ATBTLC1000 module

                                        Prototype ndashbool ble_mgr_events_callback_handler(ble_mgr_event_cb_t event_cb_typeble_mgr_event_t event_typeconst voidble_event_handler)

                                        Description ndash Used by ProfileServiceApplication to register the Bluetooth Low Energy eventsrsquocallbacks

                                        Parameters ndash

                                        event_cb_type ndash types of actions to perform on callbacks can be either

                                        REGISTER_CALL_BACK or

                                        UNREGISTER_CALL_BACKevent_type ndash Any one of the event types can be used

                                        BLE_GAP_EVENT_TYPEBLE_GATT_CLIENT_EVENT_TYPEBLE_GATT_SERVER_EVENT_TYPEBLE_L2CAP_EVENT_TYPEBLE_GATT_HTPT_EVENT_TYPEBLE_DTM_EVENT_TYPEBLE_CUSTOM_EVENT_TYPEble_event_handler ndash pointer to handler list

                                        Structure ble_gap_event_cb_t defines the GAP callbacks Similarly structuresble_gatt_client_event_cb_t and ble_gatt_server_event_cb_t define the callbacks of GATTevents

                                        typedef struct ble_gap_event_cb BLE Undefined events received from ATBTLC1000 which is not handled in Libraryble_event_callback_t undefined BLE scan information contains the peer device scan information Refer ref at_ble_scan_info_tble_event_callback_t scan_info Once the BLE scan timeout or scan stop triggers the scan report event Refer ref at_ble_scan_report_tble_event_callback_t scan_report Advertisement complete event Refer ref at_ble_adv_cmp_evt_tble_event_callback_t advt_cmp Advertisement report in case of advertisement stopped due to advertisement timeout Refer ref at_ble_adv_report_tble_event_callback_t adv_report BLE device own random address changed event Refer ref at_ble_rand_addr_changed_tble_event_callback_t rand_addr_changed BLE connected event device connected to peer device Refer ref at_ble_connected_tble_event_callback_t connected BLE disconnected event device disconnected from peer device Refer ref at_ble_disconnected_tble_event_callback_t disconnected Connection parameter update done on peer device and own device Refer ref at_ble_conn_param_update_done_t

                                        ATBTLC1000Establishing Connection with Central Device

                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 26

                                        ble_event_callback_t conn_parameter_update_done Connection parameter update request from peer device Refer ref at_ble_conn_param_update_request_tble_event_callback_t conn_param_update_request Pair complete event as part of end of pairing process Refer ref at_ble_pair_done_tble_event_callback_t pair_done Pair request event from Central device Refer ref at_ble_pair_request_tble_event_callback_t pair_request Slave security request received from peer Peripheral device Refer ref at_ble_slave_sec_request_tble_event_callback_t slave_sec_request Pair Key request event from Peer central device Refer ref at_ble_pair_key_request_tble_event_callback_t pair_key_request encryption request comes from the peer device Needs to supply the bonding information which is stored earlier ref at_ble_encryption_request_tble_event_callback_t encryption_request encryption status changed event received from SMP once the encryption is started ref at_ble_encryption_status_changed_tble_event_callback_t encryption_status_changed Event triggered once the Resolve random address is resolved using supplied IRKs ref at_ble_resolv_rand_addr_status_tble_event_callback_t resolv_rand_addr_status Event is triggered once the connection signature information indication received ref at_ble_sign_counter_tble_event_callback_t sign_counters_ind Peer attribute information indication received Event ref at_ble_peer_att_info_ind_tble_event_callback_t peer_att_info_ind Peer device channel map received indication ref at_ble_channel_map_tble_event_callback_t con_channel_map_indble_gap_event_cb_t

                                        Note  Callback definition is application-specific If the application layer requires a specific event callbackthen the specific member of the structure is to be assigned with the address of the callback function

                                        In this assignment two callback functions on Connected and Disconnected GAP events are usedThis allows the application to restart the advertising process on Disconnect manage connectioninformation and startstop of sensor data update

                                        321 Handling of Connected and Disconnected GAP Events1 Open the startup_templatec file2 Define the following software flags as global variables in startup_templatec file volatile

                                        bool timer_flag = false and volatile bool connected_flag = false3 Declare and implement the following ble_connected_cb function in the

                                        startup_templatec file Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param)printf(n Assignment 22 Application connected )connected_flag = trueALL_UNUSED(param)return AT_BLE_SUCCESS

                                        4 Declare and implement the following ble_disconnected_cb function instartup_templatec file Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param)printf(n Assignment 22 Application disconnected )connected_flag = falsestart_advertisement()ALL_UNUSED(param)return AT_BLE_SUCCESS

                                        ATBTLC1000Establishing Connection with Central Device

                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 27

                                        5 Declare the following static GAP callback structure in ldquostartup_templatecrdquo filestatic const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTEDdisconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                                        6 Add the following register_btlc1000_callbacks function in startup_templatec Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void) Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks)ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACKBLE_GAP_EVENT_TYPEampapp_gap_handle)if (ble_status = true)printf(nError when Registering ATBTLC1000 callbacks)

                                        7 Add the register_btlc1000_callbacks function call prior to start advertisement in theapplication main routineint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Gap Callbacks register_btlc1000_callbacks ( ) Start Advertising process start_advertisement() Register PrimaryIncluded service in case of GATT Server while(true) Write application task

                                        8 Add the ble_event_task function call in the project main loop to handle the different incomingevents from ATBTLC1000while(true)ble_event_task()

                                        9 Press button ltF7gt to compile the project and verify that no build error appear in the AtmelStudio output window

                                        ATBTLC1000Establishing Connection with Central Device

                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 28

                                        Figure 3-10 Atmel Studio Output Window

                                        10 Click ldquo rdquo to save the project ltCtrl+Sgt

                                        11 Click ldquo rdquo to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt and checkcorrect initialization of the ATBTLC1000

                                        12 Open the Microchip SmartConnect application on Androidtrade or iOS device13 Press the ltStart Scangt button and pair peripherals by selecting them in the device list (pass key

                                        123456)Note 

                                        1 Pairing event handling is carried out by ble_managerc Refer toble_pair_key_request_handler() for code implementation The default pass key of123456 is also fixed inside this function This can be changed here

                                        Figure 3-11 Console Log Window

                                        Note  After peripheral pairing no services information are displayed in Microchip SmartConnectapplication as no service is currently defined and started on peripheral side

                                        ATBTLC1000Establishing Connection with Central Device

                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 29

                                        4 SettingHandling of Pre-Defined ServiceThe management of services are done in the GATT layer of the ATBTLC1000 ROM coded Bluetooth LowEnergy Stack The GATT transactions are based on high-level nested objects called Profiles Servicesand Characteristics stored in SRAM memory of ATBTLC1000 device This assignment adds the pre-defined service of information service from ASF library

                                        Figure 4-1 ATBTLC1000 GATT Layers

                                        bull ProfilesProfiles are not available in the Bluetooth Low Energy peripheral they are simply a pre-definedcollection of services that have been compiled by either the Bluetooth SIG (adopted GATT basedprofile) or by the application developer (custom profiles) For example the Heart Rate Profilecombines the Heart Rate Service and the Device Information Service

                                        Note  The complete list of officially adopted GATT-based profiles is available on the BluetoothDeveloper Portal

                                        bull ServicesA service is a collection of data and associated behaviors which accomplish a particular function orfeature of a device or portions of a device A service may reference other primary or secondaryservices andor a set of characteristics that make up the service Each service distinguishes itselffrom other services by means of a unique numeric ID called as UUID which can be either 16-bit(for officially adopted Bluetooth Low Energy Services) or 128-bit (for custom services)

                                        Note  A full list of officially adopted services and their UUID are seen on the Bluetooth DeveloperPortal

                                        bull CharacteristicsA characteristic is the lowest level concept in GATT transactions It contains a single data point withdifferent attributes such as notify read or write capabilities Similar to Services each characteristiccan be distinguished by a SIG-defined adopted UUID (16-bit) or custom (128-bit) UUID This UUIDensures interoperability across Bluetooth Low Energy devices The characteristics are important tointeract with in a Bluetooth Low Energy network In addition to standard UUID the custom UUID isused in case of specific application When characteristics with custom UUID are used in a devicethen it will be interoperable only with those devices that support these characteristics with customUUID

                                        ATBTLC1000SettingHandling of Pre-Defined Service

                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 30

                                        In this assignment the following steps are added to the Host MCU application to set up and handle adevice information service within the ATBTLC1000 module The following steps are added to the startupproject

                                        bull Adding device info service component from ASFbull Configuring and loading the service

                                        Figure 4-2 Device Information Service

                                        41 Adding Device Info Service Component from ASF Wizard to ProjectTo use the ldquoofficially adopted GATT-based profilesrdquo from SIG ASF provides Bluetooth Low Energy servicecomponents including init functions that pre-define services in Host memory

                                        Note  Before starting this assignment be sure to follow the steps mentioned in 2 Creating the Projectand Initializing and 3 Establishing Connection with Central Device

                                        1 Click ASF gt ASF Wizard2 Search for ldquoBLE-Device Information Servicesrdquo and then click Add

                                        ATBTLC1000SettingHandling of Pre-Defined Service

                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 31

                                        Figure 4-3 Available Modules

                                        3 Now ldquoBLE-Device Information Servicesrdquo (component) appears in ldquoSelected ModulesrdquoFigure 4-4 Selected Modules

                                        4 Click Apply to add the component to the projectFigure 4-5 Adding the Modules to Project

                                        5 The ldquoDevice Information Servicerdquo component is added to the project and is confirmed bydevice_information folder added in Solution Explorer

                                        ATBTLC1000SettingHandling of Pre-Defined Service

                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 32

                                        Figure 4-6 Device Information Service Added to Project

                                        42 Configuring and Loading Device Information ServiceThe ATBTLC1000 Host driver provides a set of GATT functions that allows storing and updating theservices in ATBTLC1000 memories

                                        Prototype at_ble_status_t at_ble_primary_service_define(at_ble_uuid_t uuidat_ble_handle_t service_handleat_ble_included_service_t included_service_listuint16_t included_service_countat_ble_characteristic_t charactristic_listuint16_t charactristic_count)

                                        Description Defines a new primary service along with its included services and characteristics inATBTLC1000

                                        Parameters

                                        bull Uuid [In] ndash primary service UUIDbull service_handle [Out] ndash Service handle is returned herebull included_service_list [In] ndash an array of included service referencesbull included_service_count [In] ndash number of elements in included_service_listbull charactristic_list [InOut] ndash an array of characteristics included in the service this array

                                        is updated with respective characteristics handlesbull charactristic_count[In] ndash number of elements in charactristic_list

                                        Return Execution Status

                                        This function requires an argument as GATT description structure of the service that is implemented Thepreviously added Device Info service component provides Bluetooth Low Energy service middlewareincluding the init functions that predefine the services See below ldquodis_init_servicerdquo from device infoBLE service (device_infohc)

                                        Prototype ndash void dis_init_service(dis_gatt_service_handler_t device_info_serv)Description ndash Initialize the device information service handler in the host MCU memory

                                        Parameters ndash

                                        ATBTLC1000SettingHandling of Pre-Defined Service

                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 33

                                        bull device_info_serv [Inout] pointer to device info GATT description handler to beupdated

                                        Return None

                                        Here is a picture of GATT device info service descriptor definition in Host memory

                                        device_info_serv-gtserv_handle = 0device_info_serv-gtserv_uuidtype = AT_BLE_UUID_16device_info_serv-gtserv_uuiduuid[0] = (uint8_t) DIS_SERVICE_UUIDdevice_info_serv-gtserv_uuiduuid[1] = (uint8_t) (DIS_SERVICE_UUID gtgt 8)Characteristic Info for Manufacturer Name Stringdevice_info_serv-gtserv_chars[0]char_val_handle = 0 handle stored here device_info_serv-gtserv_chars[0]uuidtype = AT_BLE_UUID_16device_info_serv-gtserv_chars[0]uuiduuid[0] = (uint8_t) IS_CHAR_MANUFACTURER_NAME_UUID UUID Manufacturer Name String device_info_serv-gtserv_chars[0]uuiduuid[1] = (uint8_t) (DIS_CHAR_MANUFACTURER_NAME_UUID gtgt 8) UUID Manufacturer Name String device_info_serv-gtserv_chars[0]properties = AT_BLE_CHAR_READ Properties memcpy(char_valuemanufacturer_nameDEFAULT_MANUFACTURER_NAMEDIS_CHAR_MANUFACTURER_NAME_INIT_LEN)device_info_serv-gtserv_chars[0]init_value = char_valuemanufacturer_namedevice_info_serv-gtserv_chars[0]value_init_len = DIS_CHAR_MANUFACTURER_NAME_INIT_LENdevice_info_serv-gtserv_chars[0]value_max_len = DIS_CHAR_MANUFACTURER_NAME_MAX_LENif BLE_PAIR_ENABLEdevice_info_serv-gtserv_chars[0]value_permissions = AT_BLE_ATTR_READABLE_REQ_AUTHN_NO_AUTHR permissions elsedevice_info_serv-gtserv_chars[0]value_permissions = AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR permissions endifdevice_info_serv-gtserv_chars[0]user_desc = NULL user defined name device_info_serv-gtserv_chars[0]user_desc_len = 0device_info_serv-gtserv_chars[0]user_desc_max_len = 0device_info_serv-gtserv_chars[0]user_desc_permissions = AT_BLE_ATTR_NO_PERMISSIONS user description permissionsdevice_info_serv-gtserv_chars[0]client_config_permissions = AT_BLE_ATTR_NO_PERMISSIONS client config permissionsdevice_info_serm hdsv-gtserv_chars[0]server_config_permissions = AT_BLE_ATTR_NO_PERMISSIONS server config permissionsdevice_info_serv-gtserv_chars[0]user_desc_handle = 0 user desc handlesdevice_info_serv-gtserv_chars[0]client_config_handle = 0 client config handlesdevice_info_serv-gtserv_chars[0]server_config_handle = 0 server config handlesdevice_info_serv-gtserv_chars[0]presentation_format = NULL presentation format

                                        Note  In case of custom service the above definition initialization must be taken care of by thedeveloper

                                        421 Procedure to Configure and Load Device Info Service1 Include device info service header file (device_infoh) at the beginning of

                                        startup_templatec fileinclude ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehinclude device_infoh

                                        2 Define a device info service handler as global in startup_templatec file Serviceshandlers dis_gatt_service_handler_t dis_service_handler

                                        ATBTLC1000SettingHandling of Pre-Defined Service

                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 34

                                        3 Add dis_init_service and at_ble_primary_service_define functions as called abovethe advertisement start in main routine Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service)dis_init_service (ampdis_service_handler) Define the primary service in the GATT server database if ((dis_primary_service_define (ampdis_service_handler)) = AT_BLE_SUCCESS)printf(Device Information Service definition failed) Start Advertising process start_advertisement()

                                        4 Click to save the project ltCtrl+Sgt and compile the project by pressing button ltF7gt5 Verify that no build error appears in Atmel Studio output window

                                        Figure 4-7 Atmel Studio Output Window

                                        6 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt7 Open ldquoMicrochip SmartConnectrdquo application on Android or iOS device8 Press ltStart Scangt button and connect to peripheral

                                        Note  The device name is a characteristic and contains the name of the device This device namecan be read by the central device to know the name of the device in order to differentiate thedevices This is being set using at_ble_device_name_set()API The device name is set bydefault when ble_device_init is called and the value is pre-defined using BLE_DEVICE_NAMEThe device name can also be sent as part of advertisement payload to be same as the oneconfigured in at_ble_adv_data_set() API It is the responsibility of users to keep the devicename set in advertisement payload the same as that configured inat_ble_device_name_set()

                                        9 The Service must now be visible after pairing with peripheral under Microchip SmartConnectapplication

                                        ATBTLC1000SettingHandling of Pre-Defined Service

                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 35

                                        Figure 4-8 Service List in Microchip SmartConnect Application

                                        Note  If the pairing of ATBTLC1000 with Microchip Smart connect is not successful then removethe pairing information from mobile by selecting ldquoForget Devicerdquo from the mobile settings Thereason for this is that the mobile app stores the previous pairing information but the ATBTLC1000device lost the previous pairing information due to RESET since it was stored on temporary storage(RAM)

                                        10 The serial terminal must display the following log output windowFigure 4-9 Console Log Window

                                        ATBTLC1000SettingHandling of Pre-Defined Service

                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 36

                                        5 Setting up and Handling Custom ServiceThe previous assignment describes the handling of Bluetooth Low Energy SIG defined device infoservice which is the predefined service available in ASF component This assignment describes thecustom service So the service initialization needs to be implemented In the context of customizedenvironment service the following service description is pushed in ATBTLC1000 memory

                                        Figure 5-1 Custom Service

                                        Custom Environment Service Description

                                        bull UUID type ndash Custom UUID (128-bit)bull UUID ndash 1bc5d5a5-0200-a687-e511-3639c1ba5af0

                                        Characteristic 0 (Temperature)

                                        bull User Description ndash Temperaturebull UUID type ndash Custom UUID (128-bit)bull UUID ndash 1bc5d5a5-0200-a687-e511-3639d8ba5af0bull Properties ndash Read Notifybull Value permission ndash No authorization requiredbull Client config permission ndash No permissionbull Server config permission ndash No permission

                                        Note  In this definition UUIDs are generated randomly Custom servicescharacteristics are free to useany 128-bit UUID less than the base UUID There is no reserved space for vendors to use 16-bit or 32-bitUUIDs

                                        With this definition any temperature change is notified to the central The notify mechanism allows thecentral to know when the data changes When notify property of the Client Characteristic ConfigurationDescriptor is enabled by the central and the device writes the new value then this updated value isautomatically sent to the central through a notification The central is not required to send readcharacteristic commands explicitly to the peripheral (GATT server)

                                        To setup and handle the custom environment service in ATBTLC1000 module the following steps areadded to the Host MCU application

                                        bull Configure and load the custom servicebull Update Temperature characteristic and notify to the central devicebull Receive and handle notification from the Host device

                                        ATBTLC1000Setting up and Handling Custom Service

                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 37

                                        Figure 5-2 Custom Service Flowchart

                                        51 Configuring and Loading the Custom Environment ServiceThe ATBTLC1000 Host driver provides the following set of GATT functions that allows it to push andupdate the service descriptions in the ATBTLC1000 SRAM memory

                                        Note  Before starting this assignment be sure to follow the steps mentioned in 2 Creating the Projectand Initializing and 3 Establishing Connection with Central Device

                                        Prototype ndashat_ble_status_t at_ble_primary_service_define(at_ble_uuid_t uuidat_ble_handle_t service_handleat_ble_included_service_t included_service_listuint16_t included_service_countat_ble_characteristic_t charactristic_listuint16_t charactristic_count)

                                        Description ndash Defines a new primary service along with its included services and characteristics inATBTLC1000 module

                                        Parameters

                                        bull Uuid [In] ndash primary service UUIDbull service_handle [Out] ndash service handle is returned herebull included_service_list [In] ndash array of included service referencesbull included_service_count [In] ndash number of elements in included_service_listbull charactristic_list [InOut] ndash an array of characteristics included in the service this array

                                        is update with respective characteristics handlesbull charactristic_count[In] ndash number of elements in charactristic_list

                                        ATBTLC1000Setting up and Handling Custom Service

                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 38

                                        Return ndash Execution Status

                                        bull Characteristics ndashndash Characteristics definition is done through specific array of following

                                        ldquoat_ble_characteristic_trdquo structure instancestypedef structat_ble_handle_t char_val_handle Handler (returned during service initialisation)at_ble_uuid_t uuid Characteristic UUID (type and value)at_ble_char_properties_t propertiesCharac Properties (read write notify)uint8_t init_value initial valueuint16_t value_init_len initial value lengthuint16_t value_max_len value max lengthat_ble_attr_permissions_t value_permissions access authorization and authenticationuint8_t user_desc User descriptionuint16_t user_desc_len User description lengthuint16_t user_desc_max_len User description max lengthat_ble_char_presentation_t presentation_format Presentation formatat_ble_attr_permissions_t user_desc_permissions User description permissionat_ble_attr_permissions_t client_config_permissions client permissionat_ble_attr_permissions_t server_config_permissions server permissionat_ble_handle_t user_desc_handle description handlerat_ble_handle_t client_config_handle Client config handlerat_ble_handle_t server_config_handle Server config handler at_ble_characteristic_t

                                        511 Procedure to Configure and Load Custom Environment Service1 Define the following service UUID and characteristic UUID in startup_templatec file

                                        define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

                                        2 Define the following environment service handler and characteristics variable as global instartup_templatec file Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

                                        3 Add the following service initialization function custom_environment_service_init instartup_templatecvoid custom_environment_service_init(void) at_ble_uuid_t environment_service_uuiduint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUIDuint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperatureenvironment_service_characs[0]user_desc_len = 10environment_service_characs[0]user_desc_max_len = 10environment_service_characs[0]uuidtype = AT_BLE_UUID_128memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16)environment_service_characs[0]properties = AT_BLE_CHAR_READ |AT_BLE_CHAR_NOTIFYenvironment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature valueenvironment_service_characs[0]value_permissions =(AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuidampenvironment_service_handlerNULL0environment_service_characs1)=AT_BLE_SUCCESS)printf(n Assignment 41 Failed to Initialize custom environment service)

                                        ATBTLC1000Setting up and Handling Custom Service

                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 39

                                        elseprintf(n Assignment 41 Initialize custom environment service)

                                        4 Declare and implement the following GATT event callback functioncustom_char_changed_app_event in startup_templatec file If a client (central) enablesnotifications for a server the server (peripheral) receives an AT_BLE_CHARACTERISTIC_CHANGEDevent and this event callback is called Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

                                        5 Declare and implement the following custom_notification_confirmation_handlerfunction in startup_templatec file Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param)at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )paramif (event_param-gtstatus == AT_BLE_SUCCESS)printf(n Assignment 41Notification Successfully sent over the air) else printf(n Assignment 41Sending Notification over the air failed)return AT_BLE_SUCCESS

                                        6 Declare the following GATT server callback structure in startup_templatec file Thisassignment uses two GATT callbacksstatic const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handlercharacteristic_changed = custom_char_changed_app_event

                                        7 Add the following register_gatt_server_callbacks function in startup_templatec toregister GATT server callback for notification confirmation event Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks)ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACKBLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle)if (ble_status = true)printf(nError when Registering ATBTLC1000 callbacks)

                                        8 Add custom_environment_service_init and register_gatt_server_callbacksfunction calls prior to start advertisement in the application main routine to initialize custom serviceand to register the GATT server callbacksint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()

                                        ATBTLC1000Setting up and Handling Custom Service

                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 40

                                        endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks() Custom service init custom_environment_service_init ( ) Register Gatt server callbacks register_gatt_server_callbacks ( ) Start Advertising process start_advertisement()while(true)ble_event_task()

                                        9 Click to save the project ltCtrl+Sgt

                                        10 Compile the project by pressing button ltF7gt11 Verify that no build error appears in the Atmel Studio output window

                                        Figure 5-3 Atmel Studio Output Window

                                        12 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt13 Open the ldquoMicrochip SmartConnectrdquo application on Android or iOS device14 Connect and pair to the peripheral (pass key 123456)15 Custom service must now be visible after pairing with peripheral under Microchip SmartConnect

                                        application

                                        ATBTLC1000Setting up and Handling Custom Service

                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 41

                                        Figure 5-4 Service List in Microchip SmartConnect Application

                                        Note  Custom service is displayed as unknown service in the above figure as this service is not aSIG-defined service

                                        Figure 5-5 General Information

                                        16 Serial terminal client must display the following Log output

                                        ATBTLC1000Setting up and Handling Custom Service

                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 42

                                        Figure 5-6 Log Output Window

                                        52 Updating the Temperature CharacteristicIn the previous assignment the custom Temperature characteristic is defined with a notify attribute Thistype of attribute requires notification to be sent to central when a new characteristic value is availableThe update of any ldquonotifyrdquo characteristic value is based on following interaction between the Host MCUand the ATBTLC1000Figure 5-7 Characteristic Notification

                                        521 Setting a Characteristic Value ( at_ble_characteristic_value_set)Prototype ndashat_ble_status_t at_ble_characteristic_value_setat_ble_handle_t handleuint8_t valueuint16_t len)

                                        Description ndash Sets a characteristic value in ATBTLC1000 memory

                                        Parameters ndash

                                        ATBTLC1000Setting up and Handling Custom Service

                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 43

                                        bull handle [inout] ndash Pointer to Characteristic handle to be changedbull value [in] ndash New valuebull len [in] ndash Value length in bytes

                                        Return ndash Execution Status

                                        522 Sending a Notification (at_ble_notification_send)Prototype ndashat_ble_status_t at_ble_notification_send(at_ble_handle_t conn_handleat_ble_handle_t attr_handle)

                                        Description ndash Sends a Notification

                                        Parameters ndash

                                        bull conn_handle[in] ndash handle of the connection to be notifiedbull attr_handle [in] ndash handle of the attribute originating the notification

                                        Return ndash Execution Status

                                        523 Sending Temperature Information Once in Every 10 Seconds to Central1 Modify the following ldquotimer_callback_fnrdquo callback function from the startup_templatec

                                        filestatic void timer_callback_fn(void)timer_flag = true

                                        2 hw_timer_init()in main routine of startup_templatec initializes the hardware timer3 If a client (Central) enables the notifications for a server the server (Peripheral) receives an

                                        AT_BLE_CHARACTERISTIC_CHANGED event callback then start the periodic 10 second timer forsending the notification Add the following code in previously definedcustom_char_changed_app_event function Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))timer_flag = falsehw_timer_start(10)printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

                                        4 Declare the following Temperature_value global variable in startup_templatec staticuint8_t Temperature_value = 25 as static

                                        5 Add the following send_temperature_notification function in startup_templatec tosend temperature every 10 seconds Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++

                                        ATBTLC1000Setting up and Handling Custom Service

                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 44

                                        if(Temperature_value gt 75)Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set(environment_service_characs[0]char_val_handle(uint8_t )ampTemperature_valuesizeof(Temperature_value))ble_status = at_ble_notification_send(0environment_service_characs[0]char_val_handle)if(ble_status = AT_BLE_SUCCESS)printf(fail to send temperature update notification )

                                        6 Add the following code in main routine to send temperature data every 10 secondswhile (1) ble_event_task()if(connected_flag == true ampamp timer_flag == truetimer_flag = falsesend_temperature_notification()

                                        7 Click to save the project ltCtrl+Sgt

                                        8 Compile the project by pressing the button ltF7gt9 Verify that no build error appears in Atmel Studio output window

                                        Figure 5-8 Atmel Studio Output Window

                                        10 Click to program the project binary on the L21 Xplained XSTK11 Open ldquoMicrochip SmartConnectrdquo Application on Android or iOS device12 Connect and pair to the peripheral (pass key 123456)13 Click NOTIFY to start the notification14 Temperature information in HEX values must be displayed in Microchip SmartConnect application

                                        ATBTLC1000Setting up and Handling Custom Service

                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 45

                                        Figure 5-9 Notification Window

                                        15 Serial terminal must display the following log outputFigure 5-10 Log Output Window

                                        ATBTLC1000Setting up and Handling Custom Service

                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 46

                                        6 Appendix A Software Solution - Pre-Defined SvcThe following is the code implementation for handling of pre-defined service done in 4 SettingHandlingof Pre-Defined Service

                                        - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehinclude device_infoh

                                        volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false Services handlers dis_gatt_service_handler_t dis_service_handler

                                        static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

                                        void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                                        Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                                        Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                                        static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                                        Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void) Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks)

                                        ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 47

                                        ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                        timer callback function static void timer_callback_fn(void) Add timer callback functionality here

                                        void button_cb(void) Add button callback functionality here

                                        int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                                        Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                                        DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks()

                                        Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service) dis_init_service(ampdis_service_handler) Define the primary service in the GATT server database if((dis_primary_service_define(ampdis_service_handler)) = AT_BLE_SUCCESS) printf(Device Information Service definition failed)

                                        Start Advertising process start_advertisement() while(true) ble_event_task()

                                        ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 48

                                        7 Appendix B Software Solution - Custom ServiceThe following is the code implementation for handling of pre-defined service done in 5 Setting up andHandling Custom Service

                                        - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templateh

                                        volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false

                                        static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

                                        define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0

                                        define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

                                        Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

                                        void custom_environment_service_init(void) at_ble_uuid_t environment_service_uuid uint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUID uint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128 memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperature environment_service_characs[0]user_desc_len = 10 environment_service_characs[0]user_desc_max_len = 10 environment_service_characs[0]uuidtype = AT_BLE_UUID_128 memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16) environment_service_characs[0]properties = AT_BLE_CHAR_READ | AT_BLE_CHAR_NOTIFY environment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature value environment_service_characs[0]value_permissions = (AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuid ampenvironment_service_handlerNULL0 environment_service_characs1)=AT_BLE_SUCCESS) printf(n Assignment 41 Failed to Initialize custom environment service) else printf(n Assignment 41 Initialize custom environment service)

                                        Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param) at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )param if (event_param-gtstatus == AT_BLE_SUCCESS) printf(n Assignment 41Notification Successfully sent over the air)

                                        ATBTLC1000Appendix B Software Solution - Custom Service

                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 49

                                        else printf(n Assignment 41Sending Notification over the air failed) return AT_BLE_SUCCESS

                                        static at_ble_status_t custom_char_changed_app_event(void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle -gt char_new_value[0])) timer_flag = false hw_timer_start(10) printf(n Assignment 41Characteristic changed event) return AT_BLE_SUCCESS

                                        static const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handler characteristic_changed = custom_char_changed_app_event

                                        Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                        void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                                        Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                                        Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                                        static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                                        Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void)

                                        ATBTLC1000Appendix B Software Solution - Custom Service

                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 50

                                        Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                        timer callback function static void timer_callback_fn(void) Add timer callback functionality here timer_flag = true

                                        void button_cb(void) Add button callback functionality here

                                        static uint8_t Temperature_value = 25

                                        Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++ if(Temperature_value gt 75) Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set( environment_service_characs[0]char_val_handle (uint8_t )ampTemperature_value sizeof(Temperature_value)) ble_status = at_ble_notification_send(0 environment_service_characs[0]char_val_handle) if(ble_status = AT_BLE_SUCCESS) printf(fail to send temperature update notification )

                                        int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                                        Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                                        DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register Gap ATBTLC1000 Callbacks register_btlc1000_callbacks()

                                        Custom service init custom_environment_service_init()

                                        ATBTLC1000Appendix B Software Solution - Custom Service

                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 51

                                        Register Gatt server callback register_gatt_server_callbacks()

                                        Start Advertising process start_advertisement() while(true) ble_event_task() if(connected_flag == true ampamp timer_flag == true) timer_flag = false send_temperature_notification()

                                        ATBTLC1000Appendix B Software Solution - Custom Service

                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 52

                                        8 Document Revision HistoryRev B - 42018

                                        Section Changes

                                        Document Revised contents to match various Bluetooth Low Energy standard versions

                                        Rev A - 122017

                                        Section Changes

                                        Document Initial release

                                        ATBTLC1000Document Revision History

                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 53

                                        The Microchip Web Site

                                        Microchip provides online support via our web site at httpwwwmicrochipcom This web site is used asa means to make files and information easily available to customers Accessible by using your favoriteInternet browser the web site contains the following information

                                        bull Product Support ndash Data sheets and errata application notes and sample programs designresources userrsquos guides and hardware support documents latest software releases and archivedsoftware

                                        bull General Technical Support ndash Frequently Asked Questions (FAQ) technical support requestsonline discussion groups Microchip consultant program member listing

                                        bull Business of Microchip ndash Product selector and ordering guides latest Microchip press releaseslisting of seminars and events listings of Microchip sales offices distributors and factoryrepresentatives

                                        Customer Change Notification Service

                                        Microchiprsquos customer notification service helps keep customers current on Microchip productsSubscribers will receive e-mail notification whenever there are changes updates revisions or erratarelated to a specified product family or development tool of interest

                                        To register access the Microchip web site at httpwwwmicrochipcom Under ldquoSupportrdquo click onldquoCustomer Change Notificationrdquo and follow the registration instructions

                                        Customer Support

                                        Users of Microchip products can receive assistance through several channels

                                        bull Distributor or Representativebull Local Sales Officebull Field Application Engineer (FAE)bull Technical Support

                                        Customers should contact their distributor representative or Field Application Engineer (FAE) for supportLocal sales offices are also available to help customers A listing of sales offices and locations is includedin the back of this document

                                        Technical support is available through the web site at httpwwwmicrochipcomsupport

                                        Microchip Devices Code Protection Feature

                                        Note the following details of the code protection feature on Microchip devices

                                        bull Microchip products meet the specification contained in their particular Microchip Data Sheetbull Microchip believes that its family of products is one of the most secure families of its kind on the

                                        market today when used in the intended manner and under normal conditionsbull There are dishonest and possibly illegal methods used to breach the code protection feature All of

                                        these methods to our knowledge require using the Microchip products in a manner outside theoperating specifications contained in Microchiprsquos Data Sheets Most likely the person doing so isengaged in theft of intellectual property

                                        bull Microchip is willing to work with the customer who is concerned about the integrity of their code

                                        ATBTLC1000

                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 54

                                        bull Neither Microchip nor any other semiconductor manufacturer can guarantee the security of theircode Code protection does not mean that we are guaranteeing the product as ldquounbreakablerdquo

                                        Code protection is constantly evolving We at Microchip are committed to continuously improving thecode protection features of our products Attempts to break Microchiprsquos code protection feature may be aviolation of the Digital Millennium Copyright Act If such acts allow unauthorized access to your softwareor other copyrighted work you may have a right to sue for relief under that Act

                                        Legal Notice

                                        Information contained in this publication regarding device applications and the like is provided only foryour convenience and may be superseded by updates It is your responsibility to ensure that yourapplication meets with your specifications MICROCHIP MAKES NO REPRESENTATIONS ORWARRANTIES OF ANY KIND WHETHER EXPRESS OR IMPLIED WRITTEN OR ORAL STATUTORYOR OTHERWISE RELATED TO THE INFORMATION INCLUDING BUT NOT LIMITED TO ITSCONDITION QUALITY PERFORMANCE MERCHANTABILITY OR FITNESS FOR PURPOSEMicrochip disclaims all liability arising from this information and its use Use of Microchip devices in lifesupport andor safety applications is entirely at the buyerrsquos risk and the buyer agrees to defendindemnify and hold harmless Microchip from any and all damages claims suits or expenses resultingfrom such use No licenses are conveyed implicitly or otherwise under any Microchip intellectualproperty rights unless otherwise stated

                                        Trademarks

                                        The Microchip name and logo the Microchip logo AnyRate AVR AVR logo AVR Freaks BeaconThingsBitCloud CryptoMemory CryptoRF dsPIC FlashFlex flexPWR Heldo JukeBlox KeeLoq KeeLoq logoKleer LANCheck LINK MD maXStylus maXTouch MediaLB megaAVR MOST MOST logo MPLABOptoLyzer PIC picoPower PICSTART PIC32 logo Prochip Designer QTouch RightTouch SAM-BASpyNIC SST SST Logo SuperFlash tinyAVR UNIO and XMEGA are registered trademarks ofMicrochip Technology Incorporated in the USA and other countries

                                        ClockWorks The Embedded Control Solutions Company EtherSynch Hyper Speed Control HyperLightLoad IntelliMOS mTouch Precision Edge and Quiet-Wire are registered trademarks of MicrochipTechnology Incorporated in the USA

                                        Adjacent Key Suppression AKS Analog-for-the-Digital Age Any Capacitor AnyIn AnyOut BodyComchipKIT chipKIT logo CodeGuard CryptoAuthentication CryptoCompanion CryptoControllerdsPICDEM dsPICDEMnet Dynamic Average Matching DAM ECAN EtherGREEN In-Circuit SerialProgramming ICSP Inter-Chip Connectivity JitterBlocker KleerNet KleerNet logo Mindi MiWimotorBench MPASM MPF MPLAB Certified logo MPLIB MPLINK MultiTRAK NetDetach OmniscientCode Generation PICDEM PICDEMnet PICkit PICtail PureSilicon QMatrix RightTouch logo REALICE Ripple Blocker SAM-ICE Serial Quad IO SMART-IS SQI SuperSwitcher SuperSwitcher II TotalEndurance TSHARC USBCheck VariSense ViewSpan WiperLock Wireless DNA and ZENA aretrademarks of Microchip Technology Incorporated in the USA and other countries

                                        SQTP is a service mark of Microchip Technology Incorporated in the USA

                                        Silicon Storage Technology is a registered trademark of Microchip Technology Inc in other countries

                                        GestIC is a registered trademark of Microchip Technology Germany II GmbH amp Co KG a subsidiary ofMicrochip Technology Inc in other countries

                                        All other trademarks mentioned herein are property of their respective companies

                                        ATBTLC1000

                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 55

                                        copy 2018 Microchip Technology Incorporated Printed in the USA All Rights Reserved

                                        ISBN 978-1-5224-2921-0

                                        Quality Management System Certified by DNV

                                        ISOTS 16949Microchip received ISOTS-169492009 certification for its worldwide headquarters design and waferfabrication facilities in Chandler and Tempe Arizona Gresham Oregon and design centers in Californiaand India The Companyrsquos quality system processes and procedures are for its PICreg MCUs and dsPICreg

                                        DSCs KEELOQreg code hopping devices Serial EEPROMs microperipherals nonvolatile memory andanalog products In addition Microchiprsquos quality system for the design and manufacture of developmentsystems is ISO 90012000 certified

                                        ATBTLC1000

                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 56

                                        AMERICAS ASIAPACIFIC ASIAPACIFIC EUROPECorporate Office2355 West Chandler BlvdChandler AZ 85224-6199Tel 480-792-7200Fax 480-792-7277Technical SupporthttpwwwmicrochipcomsupportWeb AddresswwwmicrochipcomAtlantaDuluth GATel 678-957-9614Fax 678-957-1455Austin TXTel 512-257-3370BostonWestborough MATel 774-760-0087Fax 774-760-0088ChicagoItasca ILTel 630-285-0071Fax 630-285-0075DallasAddison TXTel 972-818-7423Fax 972-818-2924DetroitNovi MITel 248-848-4000Houston TXTel 281-894-5983IndianapolisNoblesville INTel 317-773-8323Fax 317-773-5453Tel 317-536-2380Los AngelesMission Viejo CATel 949-462-9523Fax 949-462-9608Tel 951-273-7800Raleigh NCTel 919-844-7510New York NYTel 631-435-6000San Jose CATel 408-735-9110Tel 408-436-4270Canada - TorontoTel 905-695-1980Fax 905-695-2078

                                        Australia - SydneyTel 61-2-9868-6733China - BeijingTel 86-10-8569-7000China - ChengduTel 86-28-8665-5511China - ChongqingTel 86-23-8980-9588China - DongguanTel 86-769-8702-9880China - GuangzhouTel 86-20-8755-8029China - HangzhouTel 86-571-8792-8115China - Hong Kong SARTel 852-2943-5100China - NanjingTel 86-25-8473-2460China - QingdaoTel 86-532-8502-7355China - ShanghaiTel 86-21-3326-8000China - ShenyangTel 86-24-2334-2829China - ShenzhenTel 86-755-8864-2200China - SuzhouTel 86-186-6233-1526China - WuhanTel 86-27-5980-5300China - XianTel 86-29-8833-7252China - XiamenTel 86-592-2388138China - ZhuhaiTel 86-756-3210040

                                        India - BangaloreTel 91-80-3090-4444India - New DelhiTel 91-11-4160-8631India - PuneTel 91-20-4121-0141Japan - OsakaTel 81-6-6152-7160Japan - TokyoTel 81-3-6880- 3770Korea - DaeguTel 82-53-744-4301Korea - SeoulTel 82-2-554-7200Malaysia - Kuala LumpurTel 60-3-7651-7906Malaysia - PenangTel 60-4-227-8870Philippines - ManilaTel 63-2-634-9065SingaporeTel 65-6334-8870Taiwan - Hsin ChuTel 886-3-577-8366Taiwan - KaohsiungTel 886-7-213-7830Taiwan - TaipeiTel 886-2-2508-8600Thailand - BangkokTel 66-2-694-1351Vietnam - Ho Chi MinhTel 84-28-5448-2100

                                        Austria - WelsTel 43-7242-2244-39Fax 43-7242-2244-393Denmark - CopenhagenTel 45-4450-2828Fax 45-4485-2829Finland - EspooTel 358-9-4520-820France - ParisTel 33-1-69-53-63-20Fax 33-1-69-30-90-79Germany - GarchingTel 49-8931-9700Germany - HaanTel 49-2129-3766400Germany - HeilbronnTel 49-7131-67-3636Germany - KarlsruheTel 49-721-625370Germany - MunichTel 49-89-627-144-0Fax 49-89-627-144-44Germany - RosenheimTel 49-8031-354-560Israel - RarsquoananaTel 972-9-744-7705Italy - MilanTel 39-0331-742611Fax 39-0331-466781Italy - PadovaTel 39-049-7625286Netherlands - DrunenTel 31-416-690399Fax 31-416-690340Norway - TrondheimTel 47-7289-7561Poland - WarsawTel 48-22-3325737Romania - BucharestTel 40-21-407-87-50Spain - MadridTel 34-91-708-08-90Fax 34-91-708-08-91Sweden - GothenbergTel 46-31-704-60-40Sweden - StockholmTel 46-8-5090-4654UK - WokinghamTel 44-118-921-5800Fax 44-118-921-5820

                                        Worldwide Sales and Service

                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 57

                                        • Introduction
                                        • Table of Contents
                                        • 1 Getting Started
                                          • 11 Software Prerequisites
                                            • 111 Installation Steps of Atmel Studio 7
                                              • 12 Software Setup
                                                • 121 Installation of Microchip SmartConnect application on a Mobile device
                                                  • 13 ATBTLC1000 Embedded Firmware
                                                  • 14 ATBTLC1000 Host Software API
                                                  • 15 Hardware Prerequisites
                                                    • 151 SMARTtrade SAM L21 Xplained Pro
                                                    • 152 ATBTLC1000ZR Xplained Pro Extension board
                                                      • 16 Hardware Setup
                                                        • 2 Creating the Project and Initializing
                                                          • 21 Creating Project from ASF
                                                          • 22 Configuring ASF for ATBTLC1000-ZR
                                                          • 23 Compiling and Testing the Project
                                                            • 3 Establishing Connection with Central Device
                                                              • 31 Configuring and Starting the Advertisement Process
                                                                • 311 Flags (AD Type 0x00)
                                                                • 312 Available Service UUID (AD Types 0x02 to 0x07)
                                                                • 313 Device Name (AD Types 0x08 to 0x09)
                                                                  • 3131 Setting the Advertisement Payload (ble_advertisement_data_set)
                                                                  • 3132 Starting the Advertisement Process (at_ble_adv_start)
                                                                    • 314 Advertisement Process
                                                                      • 3141 Starting the Advertisement Process
                                                                          • 32 Managing GAP events
                                                                            • 321 Handling of Connected and Disconnected GAP Events
                                                                                • 4 SettingHandling of Pre-Defined Service
                                                                                  • 41 Adding Device Info Service Component from ASF Wizard to Project
                                                                                  • 42 Configuring and Loading Device Information Service
                                                                                    • 421 Procedure to Configure and Load Device Info Service
                                                                                        • 5 Setting up and Handling Custom Service
                                                                                          • 51 Configuring and Loading the Custom Environment Service
                                                                                            • 511 Procedure to Configure and Load Custom Environment Service
                                                                                              • 52 Updating the Temperature Characteristic
                                                                                                • 521 Setting a Characteristic Value ( at_ble_characteristic_value_set)
                                                                                                • 522 Sending a Notification (at_ble_notification_send)
                                                                                                • 523 Sending Temperature Information Once in Every 10 Seconds to Central
                                                                                                    • 6 Appendix A Software Solution - Pre-Defined Svc
                                                                                                    • 7 Appendix B Software Solution - Custom Service
                                                                                                    • 8 Document Revision History
                                                                                                    • The Microchip Web Site
                                                                                                    • Customer Change Notification Service
                                                                                                    • Customer Support
                                                                                                    • Microchip Devices Code Protection Feature
                                                                                                    • Legal Notice
                                                                                                    • Trademarks
                                                                                                    • Quality Management System Certified by DNV
                                                                                                    • Worldwide Sales and Service

                                          311 Flags (AD Type 0x00)The flags describe the basic device capability such as BLE support BLE discoverable mode BREDRsupport and simultaneous BRED

                                          312 Available Service UUID (AD Types 0x02 to 0x07)The Bluetooth Low Energy advertisement payloads are limited to 31 bytes Therefore only two 128-bitUUID values can be added to the payload For this purpose the specific AD types describe the length ofthe advertised UUID and provide information as to whether the payload contains a incompletecompletelist of UUID supported by the GATT server

                                          bull 0x02 - Incomplete list of 16-bit UUIDs (adopted GATT services)bull 0x03 - Complete list of 16-bit UUIDs (adopted GATT services)bull 0x06 - Incomplete list of 128-bit UUIDs (custom GATT services)bull 0x07 - Complete list of 128-bit UUIDs (custom GATT services)

                                          Note  When a 16-bit UUID is transmitted only the unique 2-byte value is sent The client knows that it isrequired to be injected into the base UUID For example the Health Thermometer Service is assigned as0x1809 so its equivalent UUID is 00001809-0000-1000-8000-00805F9B34FB

                                          313 Device Name (AD Types 0x08 to 0x09)This AD type field is used to advertise the Local name of device in the network The Local name datatype value indicates if the name is complete or shortened If the name is shortened the complete namecan be read after the connection is established

                                          bull 0x08 - Shortened Local Namebull 0x09 - Complete Local Name

                                          Note 1 A shortened name contains only continuous characters from the beginning of the full name For

                                          example if the device name is BT_Device_Name then the shortened name can beBT_Device or BT_Dev

                                          2 Complete data type list are available at httpswwwbluetoothcomspecificationsassigned-numbersgeneric-access-profile

                                          For management of advertisement process and cover the different configurations specified by SIG theATBTLC1000 Host driver provides the two functions elaborated in the following sections

                                          In the application use these two functions to setup the following ADV_IN type payloadFigure 3-6 ADV_IN Type Payload Process

                                          ATBTLC1000Establishing Connection with Central Device

                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 21

                                          3131 Setting the Advertisement Payload (ble_advertisement_data_set)Prototype ndashat_ble_status_t at_ble_adv_data_set (uint8_t const const adv_datauint8_t adv_data_lenuint8_t const const scan_resp_datauint8_t scan_response_data_len)

                                          Description ndash Set clear or update the advertisement and scan response data

                                          Parameters ndash

                                          bull adv_data ndash Raw data to be placed in advertisement packetbull adv_data_len ndash Data length for adv_data Max size 28 bytes (3 bytes are reserved to set

                                          advertising AD type flags based on the selected Advertising mode and the user is not required toconfigure AD type flags in the advertisement payload)

                                          bull scan_resp_data ndash Raw data to be placed in the scan response packet If NULL no changes aremade to the current scan response packet data

                                          bull scan_response_data_len ndash Data length for scan_resp_data Max size 31 bytes

                                          Return ndash Execution Status

                                          This function requires a parameter raw adv_data to be sent to central Following is an example of itsdefinition

                                          static uint8_t adv_data[] = 0x11 AD1 length = 170x03 AD1 Type = Complete list of 128-bit UUIDs0x1b0xc50xd50xa50x020x000xa60x87 AD1 = UUID MSBs0xe50x110x360x390xc00xba0x5a0xf00x0A AD2 Length = 100x09 AD2 Type = Complete local NamelsquoMrsquorsquoyrsquorsquo_rsquorsquoDrsquorsquoErsquorsquoVrsquo AD2 = ldquoMy_DEVrdquo

                                          3132 Starting the Advertisement Process (at_ble_adv_start)Prototype ndashat_ble_status_t at_ble_adv_start (at_ble_adv_type_t typeat_ble_adv_mode_t modeat_ble_addr_t peer_addrat_ble_filter_type_t filtereduint16_t intervaluint16_t timeoutbool disable_randomness)

                                          Description ndash Start advertisement process

                                          Parameters ndash

                                          bull type ndash Advertising type to be used can bendash AT_BLE_ADV_TYPE_UNDIRECTEDndash AT_BLE_ADV_TYPE_DIRECTEDndash AT_BLE_ADV_TYPE_SCANNABLE_UNDIRECTEDndash AT_BLE_ADV_TYPE_NONCONN_UNDIRECTEDndash AT_BLE_ADV_TYPE_DIRECTED_LDCndash AT_BLE_ADV_TYPE_SCAN_RESPONSE

                                          bull mode ndash Advertising mode to be used can be

                                          ATBTLC1000Establishing Connection with Central Device

                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 22

                                          ndash AT_BLE_ADV_NON_DISCOVERABLEndash AT_BLE_ADV_GEN_DISCOVERABLEndash AT_BLE_ADV_LIM_DISCOVERABLEndash AT_BLE_ADV_BROADCASTER_MODE

                                          bull peer_addr ndash Specify peer address when advertising type is AT_BLE_ADV_TYPE_DIRECTEDbull filtered ndash

                                          ndash AT_BLE_ADV_FP_ANY ndash Allow scan and connection requests from anyonendash AT_BLE_ADV_FP_FILTER_SCANREQ ndash Allow scan request from White List devices onlyndash AT_BLE_ADV_FP_FILTER_CONNREQ ndash Allow connection request from White List devices

                                          onlyndash AT_BLE_ADV_FP_FILTER_BOTH ndash Allow scan and connection requests from White List

                                          devices onlybull interval ndash Advertisement interval (in 0625 ms units)bull timeout ndash Advertising timeout between 0x0001 and 0x028F in scale of seconds This parameter

                                          must be set to 0 if type equals AT_BLE_ADV_TYPE_DIRECTEDbull disable_randomness ndash When disabled advertisements are performed at the exact interval

                                          without adding random 10 ms tempo

                                          Return ndash Execution Status

                                          314 Advertisement ProcessIn this assignment the advertisement process is performed in the following configuration

                                          bull Undirected (Type AT_BLE_ADV_TYPE_UNDIRECTED)bull Discoverable (Mode AT_BLE_ADV_GEN_DISCOVERABLE)bull No peer Address (peer_addr = NULL)bull No filtering (filtered = AT_BLE_ADV_FP_ANY)bull Advertisement interval 1s (interval = 1600)bull Maximum timeout (timeout 655)bull Randomness enabled (disable_randomness = FALSE)

                                          3141 Starting the Advertisement Process1 Open startup_templatec file2 Declare the following ble_status global variable in startup_templatec as volatile

                                          include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehvolatile at_ble_status_t ble_status

                                          3 Declare the following adv_data global variable in startup_templatec as staticstatic uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD)0x09 AD2 Type = Complete local Name

                                          ATBTLC1000Establishing Connection with Central Device

                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 23

                                          My_SENS AD2 = ldquoMy_SENSrdquo

                                          Note 1 The name of the device is to be changed (AD2 field)2 According to the new name AD2 length must be adapted to new AD2 content

                                          4 Add the following start_advertisement function in startup_templatec prototype for thefunction void start_advertisement (void) also this can be added to avoid warningsvoid start_advertisement (void)printf(n Assignment 21 Start Advertisement)Set advertisement datable_status = at_ble_adv_data_set(adv_datasizeof(adv_data)NULL0)Start Advertisementble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550)if(ble_status = AT_BLE_SUCCESS)printf(n Failed to start advertisement)

                                          5 Start the advertisement process by adding the following highlighted code to the application mainroutineint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Start Advertising process start_advertisement() Register PrimaryIncluded service in case of GATT Server while(true) Write application task

                                          6 Click to save the project ltCtrl+Sgt

                                          7 Click button to compile the project ltF7gt8 Verify that no build error appears in Atmel Studio output window

                                          Figure 3-7 Atmel Studio Output Window

                                          ATBTLC1000Establishing Connection with Central Device

                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 24

                                          9 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt10 Open Microchip SmartConnect Application on Android or iOS device and tap START SCAN button

                                          Note  The device must appear in Microchip SmartConnect Application

                                          Figure 3-8 Microchip SmartConnect Application

                                          11 Terminal must display the following Log outputFigure 3-9 Log Output Window

                                          32 Managing GAP eventsThe management of the Bluetooth connection at the host MCU level is done through reception andhandling of events reported by the ATBTLC1000 These events are generated by ATBTLC1000 GAPGATT and L2CAP layers to notify the host about the ongoing Bluetooth interaction with other devices inits vicinity

                                          ATBTLC1000Establishing Connection with Central Device

                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 25

                                          To manage events coming from the ATBTLC1000 module the host driver must provide able_mgr_events_callback_handler function that allows registration of application callback functionto be executed on each event reported by the ATBTLC1000 module

                                          Prototype ndashbool ble_mgr_events_callback_handler(ble_mgr_event_cb_t event_cb_typeble_mgr_event_t event_typeconst voidble_event_handler)

                                          Description ndash Used by ProfileServiceApplication to register the Bluetooth Low Energy eventsrsquocallbacks

                                          Parameters ndash

                                          event_cb_type ndash types of actions to perform on callbacks can be either

                                          REGISTER_CALL_BACK or

                                          UNREGISTER_CALL_BACKevent_type ndash Any one of the event types can be used

                                          BLE_GAP_EVENT_TYPEBLE_GATT_CLIENT_EVENT_TYPEBLE_GATT_SERVER_EVENT_TYPEBLE_L2CAP_EVENT_TYPEBLE_GATT_HTPT_EVENT_TYPEBLE_DTM_EVENT_TYPEBLE_CUSTOM_EVENT_TYPEble_event_handler ndash pointer to handler list

                                          Structure ble_gap_event_cb_t defines the GAP callbacks Similarly structuresble_gatt_client_event_cb_t and ble_gatt_server_event_cb_t define the callbacks of GATTevents

                                          typedef struct ble_gap_event_cb BLE Undefined events received from ATBTLC1000 which is not handled in Libraryble_event_callback_t undefined BLE scan information contains the peer device scan information Refer ref at_ble_scan_info_tble_event_callback_t scan_info Once the BLE scan timeout or scan stop triggers the scan report event Refer ref at_ble_scan_report_tble_event_callback_t scan_report Advertisement complete event Refer ref at_ble_adv_cmp_evt_tble_event_callback_t advt_cmp Advertisement report in case of advertisement stopped due to advertisement timeout Refer ref at_ble_adv_report_tble_event_callback_t adv_report BLE device own random address changed event Refer ref at_ble_rand_addr_changed_tble_event_callback_t rand_addr_changed BLE connected event device connected to peer device Refer ref at_ble_connected_tble_event_callback_t connected BLE disconnected event device disconnected from peer device Refer ref at_ble_disconnected_tble_event_callback_t disconnected Connection parameter update done on peer device and own device Refer ref at_ble_conn_param_update_done_t

                                          ATBTLC1000Establishing Connection with Central Device

                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 26

                                          ble_event_callback_t conn_parameter_update_done Connection parameter update request from peer device Refer ref at_ble_conn_param_update_request_tble_event_callback_t conn_param_update_request Pair complete event as part of end of pairing process Refer ref at_ble_pair_done_tble_event_callback_t pair_done Pair request event from Central device Refer ref at_ble_pair_request_tble_event_callback_t pair_request Slave security request received from peer Peripheral device Refer ref at_ble_slave_sec_request_tble_event_callback_t slave_sec_request Pair Key request event from Peer central device Refer ref at_ble_pair_key_request_tble_event_callback_t pair_key_request encryption request comes from the peer device Needs to supply the bonding information which is stored earlier ref at_ble_encryption_request_tble_event_callback_t encryption_request encryption status changed event received from SMP once the encryption is started ref at_ble_encryption_status_changed_tble_event_callback_t encryption_status_changed Event triggered once the Resolve random address is resolved using supplied IRKs ref at_ble_resolv_rand_addr_status_tble_event_callback_t resolv_rand_addr_status Event is triggered once the connection signature information indication received ref at_ble_sign_counter_tble_event_callback_t sign_counters_ind Peer attribute information indication received Event ref at_ble_peer_att_info_ind_tble_event_callback_t peer_att_info_ind Peer device channel map received indication ref at_ble_channel_map_tble_event_callback_t con_channel_map_indble_gap_event_cb_t

                                          Note  Callback definition is application-specific If the application layer requires a specific event callbackthen the specific member of the structure is to be assigned with the address of the callback function

                                          In this assignment two callback functions on Connected and Disconnected GAP events are usedThis allows the application to restart the advertising process on Disconnect manage connectioninformation and startstop of sensor data update

                                          321 Handling of Connected and Disconnected GAP Events1 Open the startup_templatec file2 Define the following software flags as global variables in startup_templatec file volatile

                                          bool timer_flag = false and volatile bool connected_flag = false3 Declare and implement the following ble_connected_cb function in the

                                          startup_templatec file Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param)printf(n Assignment 22 Application connected )connected_flag = trueALL_UNUSED(param)return AT_BLE_SUCCESS

                                          4 Declare and implement the following ble_disconnected_cb function instartup_templatec file Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param)printf(n Assignment 22 Application disconnected )connected_flag = falsestart_advertisement()ALL_UNUSED(param)return AT_BLE_SUCCESS

                                          ATBTLC1000Establishing Connection with Central Device

                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 27

                                          5 Declare the following static GAP callback structure in ldquostartup_templatecrdquo filestatic const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTEDdisconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                                          6 Add the following register_btlc1000_callbacks function in startup_templatec Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void) Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks)ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACKBLE_GAP_EVENT_TYPEampapp_gap_handle)if (ble_status = true)printf(nError when Registering ATBTLC1000 callbacks)

                                          7 Add the register_btlc1000_callbacks function call prior to start advertisement in theapplication main routineint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Gap Callbacks register_btlc1000_callbacks ( ) Start Advertising process start_advertisement() Register PrimaryIncluded service in case of GATT Server while(true) Write application task

                                          8 Add the ble_event_task function call in the project main loop to handle the different incomingevents from ATBTLC1000while(true)ble_event_task()

                                          9 Press button ltF7gt to compile the project and verify that no build error appear in the AtmelStudio output window

                                          ATBTLC1000Establishing Connection with Central Device

                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 28

                                          Figure 3-10 Atmel Studio Output Window

                                          10 Click ldquo rdquo to save the project ltCtrl+Sgt

                                          11 Click ldquo rdquo to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt and checkcorrect initialization of the ATBTLC1000

                                          12 Open the Microchip SmartConnect application on Androidtrade or iOS device13 Press the ltStart Scangt button and pair peripherals by selecting them in the device list (pass key

                                          123456)Note 

                                          1 Pairing event handling is carried out by ble_managerc Refer toble_pair_key_request_handler() for code implementation The default pass key of123456 is also fixed inside this function This can be changed here

                                          Figure 3-11 Console Log Window

                                          Note  After peripheral pairing no services information are displayed in Microchip SmartConnectapplication as no service is currently defined and started on peripheral side

                                          ATBTLC1000Establishing Connection with Central Device

                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 29

                                          4 SettingHandling of Pre-Defined ServiceThe management of services are done in the GATT layer of the ATBTLC1000 ROM coded Bluetooth LowEnergy Stack The GATT transactions are based on high-level nested objects called Profiles Servicesand Characteristics stored in SRAM memory of ATBTLC1000 device This assignment adds the pre-defined service of information service from ASF library

                                          Figure 4-1 ATBTLC1000 GATT Layers

                                          bull ProfilesProfiles are not available in the Bluetooth Low Energy peripheral they are simply a pre-definedcollection of services that have been compiled by either the Bluetooth SIG (adopted GATT basedprofile) or by the application developer (custom profiles) For example the Heart Rate Profilecombines the Heart Rate Service and the Device Information Service

                                          Note  The complete list of officially adopted GATT-based profiles is available on the BluetoothDeveloper Portal

                                          bull ServicesA service is a collection of data and associated behaviors which accomplish a particular function orfeature of a device or portions of a device A service may reference other primary or secondaryservices andor a set of characteristics that make up the service Each service distinguishes itselffrom other services by means of a unique numeric ID called as UUID which can be either 16-bit(for officially adopted Bluetooth Low Energy Services) or 128-bit (for custom services)

                                          Note  A full list of officially adopted services and their UUID are seen on the Bluetooth DeveloperPortal

                                          bull CharacteristicsA characteristic is the lowest level concept in GATT transactions It contains a single data point withdifferent attributes such as notify read or write capabilities Similar to Services each characteristiccan be distinguished by a SIG-defined adopted UUID (16-bit) or custom (128-bit) UUID This UUIDensures interoperability across Bluetooth Low Energy devices The characteristics are important tointeract with in a Bluetooth Low Energy network In addition to standard UUID the custom UUID isused in case of specific application When characteristics with custom UUID are used in a devicethen it will be interoperable only with those devices that support these characteristics with customUUID

                                          ATBTLC1000SettingHandling of Pre-Defined Service

                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 30

                                          In this assignment the following steps are added to the Host MCU application to set up and handle adevice information service within the ATBTLC1000 module The following steps are added to the startupproject

                                          bull Adding device info service component from ASFbull Configuring and loading the service

                                          Figure 4-2 Device Information Service

                                          41 Adding Device Info Service Component from ASF Wizard to ProjectTo use the ldquoofficially adopted GATT-based profilesrdquo from SIG ASF provides Bluetooth Low Energy servicecomponents including init functions that pre-define services in Host memory

                                          Note  Before starting this assignment be sure to follow the steps mentioned in 2 Creating the Projectand Initializing and 3 Establishing Connection with Central Device

                                          1 Click ASF gt ASF Wizard2 Search for ldquoBLE-Device Information Servicesrdquo and then click Add

                                          ATBTLC1000SettingHandling of Pre-Defined Service

                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 31

                                          Figure 4-3 Available Modules

                                          3 Now ldquoBLE-Device Information Servicesrdquo (component) appears in ldquoSelected ModulesrdquoFigure 4-4 Selected Modules

                                          4 Click Apply to add the component to the projectFigure 4-5 Adding the Modules to Project

                                          5 The ldquoDevice Information Servicerdquo component is added to the project and is confirmed bydevice_information folder added in Solution Explorer

                                          ATBTLC1000SettingHandling of Pre-Defined Service

                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 32

                                          Figure 4-6 Device Information Service Added to Project

                                          42 Configuring and Loading Device Information ServiceThe ATBTLC1000 Host driver provides a set of GATT functions that allows storing and updating theservices in ATBTLC1000 memories

                                          Prototype at_ble_status_t at_ble_primary_service_define(at_ble_uuid_t uuidat_ble_handle_t service_handleat_ble_included_service_t included_service_listuint16_t included_service_countat_ble_characteristic_t charactristic_listuint16_t charactristic_count)

                                          Description Defines a new primary service along with its included services and characteristics inATBTLC1000

                                          Parameters

                                          bull Uuid [In] ndash primary service UUIDbull service_handle [Out] ndash Service handle is returned herebull included_service_list [In] ndash an array of included service referencesbull included_service_count [In] ndash number of elements in included_service_listbull charactristic_list [InOut] ndash an array of characteristics included in the service this array

                                          is updated with respective characteristics handlesbull charactristic_count[In] ndash number of elements in charactristic_list

                                          Return Execution Status

                                          This function requires an argument as GATT description structure of the service that is implemented Thepreviously added Device Info service component provides Bluetooth Low Energy service middlewareincluding the init functions that predefine the services See below ldquodis_init_servicerdquo from device infoBLE service (device_infohc)

                                          Prototype ndash void dis_init_service(dis_gatt_service_handler_t device_info_serv)Description ndash Initialize the device information service handler in the host MCU memory

                                          Parameters ndash

                                          ATBTLC1000SettingHandling of Pre-Defined Service

                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 33

                                          bull device_info_serv [Inout] pointer to device info GATT description handler to beupdated

                                          Return None

                                          Here is a picture of GATT device info service descriptor definition in Host memory

                                          device_info_serv-gtserv_handle = 0device_info_serv-gtserv_uuidtype = AT_BLE_UUID_16device_info_serv-gtserv_uuiduuid[0] = (uint8_t) DIS_SERVICE_UUIDdevice_info_serv-gtserv_uuiduuid[1] = (uint8_t) (DIS_SERVICE_UUID gtgt 8)Characteristic Info for Manufacturer Name Stringdevice_info_serv-gtserv_chars[0]char_val_handle = 0 handle stored here device_info_serv-gtserv_chars[0]uuidtype = AT_BLE_UUID_16device_info_serv-gtserv_chars[0]uuiduuid[0] = (uint8_t) IS_CHAR_MANUFACTURER_NAME_UUID UUID Manufacturer Name String device_info_serv-gtserv_chars[0]uuiduuid[1] = (uint8_t) (DIS_CHAR_MANUFACTURER_NAME_UUID gtgt 8) UUID Manufacturer Name String device_info_serv-gtserv_chars[0]properties = AT_BLE_CHAR_READ Properties memcpy(char_valuemanufacturer_nameDEFAULT_MANUFACTURER_NAMEDIS_CHAR_MANUFACTURER_NAME_INIT_LEN)device_info_serv-gtserv_chars[0]init_value = char_valuemanufacturer_namedevice_info_serv-gtserv_chars[0]value_init_len = DIS_CHAR_MANUFACTURER_NAME_INIT_LENdevice_info_serv-gtserv_chars[0]value_max_len = DIS_CHAR_MANUFACTURER_NAME_MAX_LENif BLE_PAIR_ENABLEdevice_info_serv-gtserv_chars[0]value_permissions = AT_BLE_ATTR_READABLE_REQ_AUTHN_NO_AUTHR permissions elsedevice_info_serv-gtserv_chars[0]value_permissions = AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR permissions endifdevice_info_serv-gtserv_chars[0]user_desc = NULL user defined name device_info_serv-gtserv_chars[0]user_desc_len = 0device_info_serv-gtserv_chars[0]user_desc_max_len = 0device_info_serv-gtserv_chars[0]user_desc_permissions = AT_BLE_ATTR_NO_PERMISSIONS user description permissionsdevice_info_serv-gtserv_chars[0]client_config_permissions = AT_BLE_ATTR_NO_PERMISSIONS client config permissionsdevice_info_serm hdsv-gtserv_chars[0]server_config_permissions = AT_BLE_ATTR_NO_PERMISSIONS server config permissionsdevice_info_serv-gtserv_chars[0]user_desc_handle = 0 user desc handlesdevice_info_serv-gtserv_chars[0]client_config_handle = 0 client config handlesdevice_info_serv-gtserv_chars[0]server_config_handle = 0 server config handlesdevice_info_serv-gtserv_chars[0]presentation_format = NULL presentation format

                                          Note  In case of custom service the above definition initialization must be taken care of by thedeveloper

                                          421 Procedure to Configure and Load Device Info Service1 Include device info service header file (device_infoh) at the beginning of

                                          startup_templatec fileinclude ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehinclude device_infoh

                                          2 Define a device info service handler as global in startup_templatec file Serviceshandlers dis_gatt_service_handler_t dis_service_handler

                                          ATBTLC1000SettingHandling of Pre-Defined Service

                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 34

                                          3 Add dis_init_service and at_ble_primary_service_define functions as called abovethe advertisement start in main routine Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service)dis_init_service (ampdis_service_handler) Define the primary service in the GATT server database if ((dis_primary_service_define (ampdis_service_handler)) = AT_BLE_SUCCESS)printf(Device Information Service definition failed) Start Advertising process start_advertisement()

                                          4 Click to save the project ltCtrl+Sgt and compile the project by pressing button ltF7gt5 Verify that no build error appears in Atmel Studio output window

                                          Figure 4-7 Atmel Studio Output Window

                                          6 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt7 Open ldquoMicrochip SmartConnectrdquo application on Android or iOS device8 Press ltStart Scangt button and connect to peripheral

                                          Note  The device name is a characteristic and contains the name of the device This device namecan be read by the central device to know the name of the device in order to differentiate thedevices This is being set using at_ble_device_name_set()API The device name is set bydefault when ble_device_init is called and the value is pre-defined using BLE_DEVICE_NAMEThe device name can also be sent as part of advertisement payload to be same as the oneconfigured in at_ble_adv_data_set() API It is the responsibility of users to keep the devicename set in advertisement payload the same as that configured inat_ble_device_name_set()

                                          9 The Service must now be visible after pairing with peripheral under Microchip SmartConnectapplication

                                          ATBTLC1000SettingHandling of Pre-Defined Service

                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 35

                                          Figure 4-8 Service List in Microchip SmartConnect Application

                                          Note  If the pairing of ATBTLC1000 with Microchip Smart connect is not successful then removethe pairing information from mobile by selecting ldquoForget Devicerdquo from the mobile settings Thereason for this is that the mobile app stores the previous pairing information but the ATBTLC1000device lost the previous pairing information due to RESET since it was stored on temporary storage(RAM)

                                          10 The serial terminal must display the following log output windowFigure 4-9 Console Log Window

                                          ATBTLC1000SettingHandling of Pre-Defined Service

                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 36

                                          5 Setting up and Handling Custom ServiceThe previous assignment describes the handling of Bluetooth Low Energy SIG defined device infoservice which is the predefined service available in ASF component This assignment describes thecustom service So the service initialization needs to be implemented In the context of customizedenvironment service the following service description is pushed in ATBTLC1000 memory

                                          Figure 5-1 Custom Service

                                          Custom Environment Service Description

                                          bull UUID type ndash Custom UUID (128-bit)bull UUID ndash 1bc5d5a5-0200-a687-e511-3639c1ba5af0

                                          Characteristic 0 (Temperature)

                                          bull User Description ndash Temperaturebull UUID type ndash Custom UUID (128-bit)bull UUID ndash 1bc5d5a5-0200-a687-e511-3639d8ba5af0bull Properties ndash Read Notifybull Value permission ndash No authorization requiredbull Client config permission ndash No permissionbull Server config permission ndash No permission

                                          Note  In this definition UUIDs are generated randomly Custom servicescharacteristics are free to useany 128-bit UUID less than the base UUID There is no reserved space for vendors to use 16-bit or 32-bitUUIDs

                                          With this definition any temperature change is notified to the central The notify mechanism allows thecentral to know when the data changes When notify property of the Client Characteristic ConfigurationDescriptor is enabled by the central and the device writes the new value then this updated value isautomatically sent to the central through a notification The central is not required to send readcharacteristic commands explicitly to the peripheral (GATT server)

                                          To setup and handle the custom environment service in ATBTLC1000 module the following steps areadded to the Host MCU application

                                          bull Configure and load the custom servicebull Update Temperature characteristic and notify to the central devicebull Receive and handle notification from the Host device

                                          ATBTLC1000Setting up and Handling Custom Service

                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 37

                                          Figure 5-2 Custom Service Flowchart

                                          51 Configuring and Loading the Custom Environment ServiceThe ATBTLC1000 Host driver provides the following set of GATT functions that allows it to push andupdate the service descriptions in the ATBTLC1000 SRAM memory

                                          Note  Before starting this assignment be sure to follow the steps mentioned in 2 Creating the Projectand Initializing and 3 Establishing Connection with Central Device

                                          Prototype ndashat_ble_status_t at_ble_primary_service_define(at_ble_uuid_t uuidat_ble_handle_t service_handleat_ble_included_service_t included_service_listuint16_t included_service_countat_ble_characteristic_t charactristic_listuint16_t charactristic_count)

                                          Description ndash Defines a new primary service along with its included services and characteristics inATBTLC1000 module

                                          Parameters

                                          bull Uuid [In] ndash primary service UUIDbull service_handle [Out] ndash service handle is returned herebull included_service_list [In] ndash array of included service referencesbull included_service_count [In] ndash number of elements in included_service_listbull charactristic_list [InOut] ndash an array of characteristics included in the service this array

                                          is update with respective characteristics handlesbull charactristic_count[In] ndash number of elements in charactristic_list

                                          ATBTLC1000Setting up and Handling Custom Service

                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 38

                                          Return ndash Execution Status

                                          bull Characteristics ndashndash Characteristics definition is done through specific array of following

                                          ldquoat_ble_characteristic_trdquo structure instancestypedef structat_ble_handle_t char_val_handle Handler (returned during service initialisation)at_ble_uuid_t uuid Characteristic UUID (type and value)at_ble_char_properties_t propertiesCharac Properties (read write notify)uint8_t init_value initial valueuint16_t value_init_len initial value lengthuint16_t value_max_len value max lengthat_ble_attr_permissions_t value_permissions access authorization and authenticationuint8_t user_desc User descriptionuint16_t user_desc_len User description lengthuint16_t user_desc_max_len User description max lengthat_ble_char_presentation_t presentation_format Presentation formatat_ble_attr_permissions_t user_desc_permissions User description permissionat_ble_attr_permissions_t client_config_permissions client permissionat_ble_attr_permissions_t server_config_permissions server permissionat_ble_handle_t user_desc_handle description handlerat_ble_handle_t client_config_handle Client config handlerat_ble_handle_t server_config_handle Server config handler at_ble_characteristic_t

                                          511 Procedure to Configure and Load Custom Environment Service1 Define the following service UUID and characteristic UUID in startup_templatec file

                                          define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

                                          2 Define the following environment service handler and characteristics variable as global instartup_templatec file Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

                                          3 Add the following service initialization function custom_environment_service_init instartup_templatecvoid custom_environment_service_init(void) at_ble_uuid_t environment_service_uuiduint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUIDuint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperatureenvironment_service_characs[0]user_desc_len = 10environment_service_characs[0]user_desc_max_len = 10environment_service_characs[0]uuidtype = AT_BLE_UUID_128memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16)environment_service_characs[0]properties = AT_BLE_CHAR_READ |AT_BLE_CHAR_NOTIFYenvironment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature valueenvironment_service_characs[0]value_permissions =(AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuidampenvironment_service_handlerNULL0environment_service_characs1)=AT_BLE_SUCCESS)printf(n Assignment 41 Failed to Initialize custom environment service)

                                          ATBTLC1000Setting up and Handling Custom Service

                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 39

                                          elseprintf(n Assignment 41 Initialize custom environment service)

                                          4 Declare and implement the following GATT event callback functioncustom_char_changed_app_event in startup_templatec file If a client (central) enablesnotifications for a server the server (peripheral) receives an AT_BLE_CHARACTERISTIC_CHANGEDevent and this event callback is called Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

                                          5 Declare and implement the following custom_notification_confirmation_handlerfunction in startup_templatec file Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param)at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )paramif (event_param-gtstatus == AT_BLE_SUCCESS)printf(n Assignment 41Notification Successfully sent over the air) else printf(n Assignment 41Sending Notification over the air failed)return AT_BLE_SUCCESS

                                          6 Declare the following GATT server callback structure in startup_templatec file Thisassignment uses two GATT callbacksstatic const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handlercharacteristic_changed = custom_char_changed_app_event

                                          7 Add the following register_gatt_server_callbacks function in startup_templatec toregister GATT server callback for notification confirmation event Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks)ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACKBLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle)if (ble_status = true)printf(nError when Registering ATBTLC1000 callbacks)

                                          8 Add custom_environment_service_init and register_gatt_server_callbacksfunction calls prior to start advertisement in the application main routine to initialize custom serviceand to register the GATT server callbacksint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()

                                          ATBTLC1000Setting up and Handling Custom Service

                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 40

                                          endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks() Custom service init custom_environment_service_init ( ) Register Gatt server callbacks register_gatt_server_callbacks ( ) Start Advertising process start_advertisement()while(true)ble_event_task()

                                          9 Click to save the project ltCtrl+Sgt

                                          10 Compile the project by pressing button ltF7gt11 Verify that no build error appears in the Atmel Studio output window

                                          Figure 5-3 Atmel Studio Output Window

                                          12 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt13 Open the ldquoMicrochip SmartConnectrdquo application on Android or iOS device14 Connect and pair to the peripheral (pass key 123456)15 Custom service must now be visible after pairing with peripheral under Microchip SmartConnect

                                          application

                                          ATBTLC1000Setting up and Handling Custom Service

                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 41

                                          Figure 5-4 Service List in Microchip SmartConnect Application

                                          Note  Custom service is displayed as unknown service in the above figure as this service is not aSIG-defined service

                                          Figure 5-5 General Information

                                          16 Serial terminal client must display the following Log output

                                          ATBTLC1000Setting up and Handling Custom Service

                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 42

                                          Figure 5-6 Log Output Window

                                          52 Updating the Temperature CharacteristicIn the previous assignment the custom Temperature characteristic is defined with a notify attribute Thistype of attribute requires notification to be sent to central when a new characteristic value is availableThe update of any ldquonotifyrdquo characteristic value is based on following interaction between the Host MCUand the ATBTLC1000Figure 5-7 Characteristic Notification

                                          521 Setting a Characteristic Value ( at_ble_characteristic_value_set)Prototype ndashat_ble_status_t at_ble_characteristic_value_setat_ble_handle_t handleuint8_t valueuint16_t len)

                                          Description ndash Sets a characteristic value in ATBTLC1000 memory

                                          Parameters ndash

                                          ATBTLC1000Setting up and Handling Custom Service

                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 43

                                          bull handle [inout] ndash Pointer to Characteristic handle to be changedbull value [in] ndash New valuebull len [in] ndash Value length in bytes

                                          Return ndash Execution Status

                                          522 Sending a Notification (at_ble_notification_send)Prototype ndashat_ble_status_t at_ble_notification_send(at_ble_handle_t conn_handleat_ble_handle_t attr_handle)

                                          Description ndash Sends a Notification

                                          Parameters ndash

                                          bull conn_handle[in] ndash handle of the connection to be notifiedbull attr_handle [in] ndash handle of the attribute originating the notification

                                          Return ndash Execution Status

                                          523 Sending Temperature Information Once in Every 10 Seconds to Central1 Modify the following ldquotimer_callback_fnrdquo callback function from the startup_templatec

                                          filestatic void timer_callback_fn(void)timer_flag = true

                                          2 hw_timer_init()in main routine of startup_templatec initializes the hardware timer3 If a client (Central) enables the notifications for a server the server (Peripheral) receives an

                                          AT_BLE_CHARACTERISTIC_CHANGED event callback then start the periodic 10 second timer forsending the notification Add the following code in previously definedcustom_char_changed_app_event function Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))timer_flag = falsehw_timer_start(10)printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

                                          4 Declare the following Temperature_value global variable in startup_templatec staticuint8_t Temperature_value = 25 as static

                                          5 Add the following send_temperature_notification function in startup_templatec tosend temperature every 10 seconds Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++

                                          ATBTLC1000Setting up and Handling Custom Service

                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 44

                                          if(Temperature_value gt 75)Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set(environment_service_characs[0]char_val_handle(uint8_t )ampTemperature_valuesizeof(Temperature_value))ble_status = at_ble_notification_send(0environment_service_characs[0]char_val_handle)if(ble_status = AT_BLE_SUCCESS)printf(fail to send temperature update notification )

                                          6 Add the following code in main routine to send temperature data every 10 secondswhile (1) ble_event_task()if(connected_flag == true ampamp timer_flag == truetimer_flag = falsesend_temperature_notification()

                                          7 Click to save the project ltCtrl+Sgt

                                          8 Compile the project by pressing the button ltF7gt9 Verify that no build error appears in Atmel Studio output window

                                          Figure 5-8 Atmel Studio Output Window

                                          10 Click to program the project binary on the L21 Xplained XSTK11 Open ldquoMicrochip SmartConnectrdquo Application on Android or iOS device12 Connect and pair to the peripheral (pass key 123456)13 Click NOTIFY to start the notification14 Temperature information in HEX values must be displayed in Microchip SmartConnect application

                                          ATBTLC1000Setting up and Handling Custom Service

                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 45

                                          Figure 5-9 Notification Window

                                          15 Serial terminal must display the following log outputFigure 5-10 Log Output Window

                                          ATBTLC1000Setting up and Handling Custom Service

                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 46

                                          6 Appendix A Software Solution - Pre-Defined SvcThe following is the code implementation for handling of pre-defined service done in 4 SettingHandlingof Pre-Defined Service

                                          - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehinclude device_infoh

                                          volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false Services handlers dis_gatt_service_handler_t dis_service_handler

                                          static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

                                          void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                                          Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                                          Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                                          static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                                          Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void) Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks)

                                          ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 47

                                          ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                          timer callback function static void timer_callback_fn(void) Add timer callback functionality here

                                          void button_cb(void) Add button callback functionality here

                                          int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                                          Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                                          DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks()

                                          Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service) dis_init_service(ampdis_service_handler) Define the primary service in the GATT server database if((dis_primary_service_define(ampdis_service_handler)) = AT_BLE_SUCCESS) printf(Device Information Service definition failed)

                                          Start Advertising process start_advertisement() while(true) ble_event_task()

                                          ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 48

                                          7 Appendix B Software Solution - Custom ServiceThe following is the code implementation for handling of pre-defined service done in 5 Setting up andHandling Custom Service

                                          - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templateh

                                          volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false

                                          static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

                                          define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0

                                          define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

                                          Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

                                          void custom_environment_service_init(void) at_ble_uuid_t environment_service_uuid uint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUID uint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128 memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperature environment_service_characs[0]user_desc_len = 10 environment_service_characs[0]user_desc_max_len = 10 environment_service_characs[0]uuidtype = AT_BLE_UUID_128 memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16) environment_service_characs[0]properties = AT_BLE_CHAR_READ | AT_BLE_CHAR_NOTIFY environment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature value environment_service_characs[0]value_permissions = (AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuid ampenvironment_service_handlerNULL0 environment_service_characs1)=AT_BLE_SUCCESS) printf(n Assignment 41 Failed to Initialize custom environment service) else printf(n Assignment 41 Initialize custom environment service)

                                          Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param) at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )param if (event_param-gtstatus == AT_BLE_SUCCESS) printf(n Assignment 41Notification Successfully sent over the air)

                                          ATBTLC1000Appendix B Software Solution - Custom Service

                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 49

                                          else printf(n Assignment 41Sending Notification over the air failed) return AT_BLE_SUCCESS

                                          static at_ble_status_t custom_char_changed_app_event(void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle -gt char_new_value[0])) timer_flag = false hw_timer_start(10) printf(n Assignment 41Characteristic changed event) return AT_BLE_SUCCESS

                                          static const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handler characteristic_changed = custom_char_changed_app_event

                                          Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                          void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                                          Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                                          Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                                          static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                                          Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void)

                                          ATBTLC1000Appendix B Software Solution - Custom Service

                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 50

                                          Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                          timer callback function static void timer_callback_fn(void) Add timer callback functionality here timer_flag = true

                                          void button_cb(void) Add button callback functionality here

                                          static uint8_t Temperature_value = 25

                                          Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++ if(Temperature_value gt 75) Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set( environment_service_characs[0]char_val_handle (uint8_t )ampTemperature_value sizeof(Temperature_value)) ble_status = at_ble_notification_send(0 environment_service_characs[0]char_val_handle) if(ble_status = AT_BLE_SUCCESS) printf(fail to send temperature update notification )

                                          int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                                          Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                                          DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register Gap ATBTLC1000 Callbacks register_btlc1000_callbacks()

                                          Custom service init custom_environment_service_init()

                                          ATBTLC1000Appendix B Software Solution - Custom Service

                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 51

                                          Register Gatt server callback register_gatt_server_callbacks()

                                          Start Advertising process start_advertisement() while(true) ble_event_task() if(connected_flag == true ampamp timer_flag == true) timer_flag = false send_temperature_notification()

                                          ATBTLC1000Appendix B Software Solution - Custom Service

                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 52

                                          8 Document Revision HistoryRev B - 42018

                                          Section Changes

                                          Document Revised contents to match various Bluetooth Low Energy standard versions

                                          Rev A - 122017

                                          Section Changes

                                          Document Initial release

                                          ATBTLC1000Document Revision History

                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 53

                                          The Microchip Web Site

                                          Microchip provides online support via our web site at httpwwwmicrochipcom This web site is used asa means to make files and information easily available to customers Accessible by using your favoriteInternet browser the web site contains the following information

                                          bull Product Support ndash Data sheets and errata application notes and sample programs designresources userrsquos guides and hardware support documents latest software releases and archivedsoftware

                                          bull General Technical Support ndash Frequently Asked Questions (FAQ) technical support requestsonline discussion groups Microchip consultant program member listing

                                          bull Business of Microchip ndash Product selector and ordering guides latest Microchip press releaseslisting of seminars and events listings of Microchip sales offices distributors and factoryrepresentatives

                                          Customer Change Notification Service

                                          Microchiprsquos customer notification service helps keep customers current on Microchip productsSubscribers will receive e-mail notification whenever there are changes updates revisions or erratarelated to a specified product family or development tool of interest

                                          To register access the Microchip web site at httpwwwmicrochipcom Under ldquoSupportrdquo click onldquoCustomer Change Notificationrdquo and follow the registration instructions

                                          Customer Support

                                          Users of Microchip products can receive assistance through several channels

                                          bull Distributor or Representativebull Local Sales Officebull Field Application Engineer (FAE)bull Technical Support

                                          Customers should contact their distributor representative or Field Application Engineer (FAE) for supportLocal sales offices are also available to help customers A listing of sales offices and locations is includedin the back of this document

                                          Technical support is available through the web site at httpwwwmicrochipcomsupport

                                          Microchip Devices Code Protection Feature

                                          Note the following details of the code protection feature on Microchip devices

                                          bull Microchip products meet the specification contained in their particular Microchip Data Sheetbull Microchip believes that its family of products is one of the most secure families of its kind on the

                                          market today when used in the intended manner and under normal conditionsbull There are dishonest and possibly illegal methods used to breach the code protection feature All of

                                          these methods to our knowledge require using the Microchip products in a manner outside theoperating specifications contained in Microchiprsquos Data Sheets Most likely the person doing so isengaged in theft of intellectual property

                                          bull Microchip is willing to work with the customer who is concerned about the integrity of their code

                                          ATBTLC1000

                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 54

                                          bull Neither Microchip nor any other semiconductor manufacturer can guarantee the security of theircode Code protection does not mean that we are guaranteeing the product as ldquounbreakablerdquo

                                          Code protection is constantly evolving We at Microchip are committed to continuously improving thecode protection features of our products Attempts to break Microchiprsquos code protection feature may be aviolation of the Digital Millennium Copyright Act If such acts allow unauthorized access to your softwareor other copyrighted work you may have a right to sue for relief under that Act

                                          Legal Notice

                                          Information contained in this publication regarding device applications and the like is provided only foryour convenience and may be superseded by updates It is your responsibility to ensure that yourapplication meets with your specifications MICROCHIP MAKES NO REPRESENTATIONS ORWARRANTIES OF ANY KIND WHETHER EXPRESS OR IMPLIED WRITTEN OR ORAL STATUTORYOR OTHERWISE RELATED TO THE INFORMATION INCLUDING BUT NOT LIMITED TO ITSCONDITION QUALITY PERFORMANCE MERCHANTABILITY OR FITNESS FOR PURPOSEMicrochip disclaims all liability arising from this information and its use Use of Microchip devices in lifesupport andor safety applications is entirely at the buyerrsquos risk and the buyer agrees to defendindemnify and hold harmless Microchip from any and all damages claims suits or expenses resultingfrom such use No licenses are conveyed implicitly or otherwise under any Microchip intellectualproperty rights unless otherwise stated

                                          Trademarks

                                          The Microchip name and logo the Microchip logo AnyRate AVR AVR logo AVR Freaks BeaconThingsBitCloud CryptoMemory CryptoRF dsPIC FlashFlex flexPWR Heldo JukeBlox KeeLoq KeeLoq logoKleer LANCheck LINK MD maXStylus maXTouch MediaLB megaAVR MOST MOST logo MPLABOptoLyzer PIC picoPower PICSTART PIC32 logo Prochip Designer QTouch RightTouch SAM-BASpyNIC SST SST Logo SuperFlash tinyAVR UNIO and XMEGA are registered trademarks ofMicrochip Technology Incorporated in the USA and other countries

                                          ClockWorks The Embedded Control Solutions Company EtherSynch Hyper Speed Control HyperLightLoad IntelliMOS mTouch Precision Edge and Quiet-Wire are registered trademarks of MicrochipTechnology Incorporated in the USA

                                          Adjacent Key Suppression AKS Analog-for-the-Digital Age Any Capacitor AnyIn AnyOut BodyComchipKIT chipKIT logo CodeGuard CryptoAuthentication CryptoCompanion CryptoControllerdsPICDEM dsPICDEMnet Dynamic Average Matching DAM ECAN EtherGREEN In-Circuit SerialProgramming ICSP Inter-Chip Connectivity JitterBlocker KleerNet KleerNet logo Mindi MiWimotorBench MPASM MPF MPLAB Certified logo MPLIB MPLINK MultiTRAK NetDetach OmniscientCode Generation PICDEM PICDEMnet PICkit PICtail PureSilicon QMatrix RightTouch logo REALICE Ripple Blocker SAM-ICE Serial Quad IO SMART-IS SQI SuperSwitcher SuperSwitcher II TotalEndurance TSHARC USBCheck VariSense ViewSpan WiperLock Wireless DNA and ZENA aretrademarks of Microchip Technology Incorporated in the USA and other countries

                                          SQTP is a service mark of Microchip Technology Incorporated in the USA

                                          Silicon Storage Technology is a registered trademark of Microchip Technology Inc in other countries

                                          GestIC is a registered trademark of Microchip Technology Germany II GmbH amp Co KG a subsidiary ofMicrochip Technology Inc in other countries

                                          All other trademarks mentioned herein are property of their respective companies

                                          ATBTLC1000

                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 55

                                          copy 2018 Microchip Technology Incorporated Printed in the USA All Rights Reserved

                                          ISBN 978-1-5224-2921-0

                                          Quality Management System Certified by DNV

                                          ISOTS 16949Microchip received ISOTS-169492009 certification for its worldwide headquarters design and waferfabrication facilities in Chandler and Tempe Arizona Gresham Oregon and design centers in Californiaand India The Companyrsquos quality system processes and procedures are for its PICreg MCUs and dsPICreg

                                          DSCs KEELOQreg code hopping devices Serial EEPROMs microperipherals nonvolatile memory andanalog products In addition Microchiprsquos quality system for the design and manufacture of developmentsystems is ISO 90012000 certified

                                          ATBTLC1000

                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 56

                                          AMERICAS ASIAPACIFIC ASIAPACIFIC EUROPECorporate Office2355 West Chandler BlvdChandler AZ 85224-6199Tel 480-792-7200Fax 480-792-7277Technical SupporthttpwwwmicrochipcomsupportWeb AddresswwwmicrochipcomAtlantaDuluth GATel 678-957-9614Fax 678-957-1455Austin TXTel 512-257-3370BostonWestborough MATel 774-760-0087Fax 774-760-0088ChicagoItasca ILTel 630-285-0071Fax 630-285-0075DallasAddison TXTel 972-818-7423Fax 972-818-2924DetroitNovi MITel 248-848-4000Houston TXTel 281-894-5983IndianapolisNoblesville INTel 317-773-8323Fax 317-773-5453Tel 317-536-2380Los AngelesMission Viejo CATel 949-462-9523Fax 949-462-9608Tel 951-273-7800Raleigh NCTel 919-844-7510New York NYTel 631-435-6000San Jose CATel 408-735-9110Tel 408-436-4270Canada - TorontoTel 905-695-1980Fax 905-695-2078

                                          Australia - SydneyTel 61-2-9868-6733China - BeijingTel 86-10-8569-7000China - ChengduTel 86-28-8665-5511China - ChongqingTel 86-23-8980-9588China - DongguanTel 86-769-8702-9880China - GuangzhouTel 86-20-8755-8029China - HangzhouTel 86-571-8792-8115China - Hong Kong SARTel 852-2943-5100China - NanjingTel 86-25-8473-2460China - QingdaoTel 86-532-8502-7355China - ShanghaiTel 86-21-3326-8000China - ShenyangTel 86-24-2334-2829China - ShenzhenTel 86-755-8864-2200China - SuzhouTel 86-186-6233-1526China - WuhanTel 86-27-5980-5300China - XianTel 86-29-8833-7252China - XiamenTel 86-592-2388138China - ZhuhaiTel 86-756-3210040

                                          India - BangaloreTel 91-80-3090-4444India - New DelhiTel 91-11-4160-8631India - PuneTel 91-20-4121-0141Japan - OsakaTel 81-6-6152-7160Japan - TokyoTel 81-3-6880- 3770Korea - DaeguTel 82-53-744-4301Korea - SeoulTel 82-2-554-7200Malaysia - Kuala LumpurTel 60-3-7651-7906Malaysia - PenangTel 60-4-227-8870Philippines - ManilaTel 63-2-634-9065SingaporeTel 65-6334-8870Taiwan - Hsin ChuTel 886-3-577-8366Taiwan - KaohsiungTel 886-7-213-7830Taiwan - TaipeiTel 886-2-2508-8600Thailand - BangkokTel 66-2-694-1351Vietnam - Ho Chi MinhTel 84-28-5448-2100

                                          Austria - WelsTel 43-7242-2244-39Fax 43-7242-2244-393Denmark - CopenhagenTel 45-4450-2828Fax 45-4485-2829Finland - EspooTel 358-9-4520-820France - ParisTel 33-1-69-53-63-20Fax 33-1-69-30-90-79Germany - GarchingTel 49-8931-9700Germany - HaanTel 49-2129-3766400Germany - HeilbronnTel 49-7131-67-3636Germany - KarlsruheTel 49-721-625370Germany - MunichTel 49-89-627-144-0Fax 49-89-627-144-44Germany - RosenheimTel 49-8031-354-560Israel - RarsquoananaTel 972-9-744-7705Italy - MilanTel 39-0331-742611Fax 39-0331-466781Italy - PadovaTel 39-049-7625286Netherlands - DrunenTel 31-416-690399Fax 31-416-690340Norway - TrondheimTel 47-7289-7561Poland - WarsawTel 48-22-3325737Romania - BucharestTel 40-21-407-87-50Spain - MadridTel 34-91-708-08-90Fax 34-91-708-08-91Sweden - GothenbergTel 46-31-704-60-40Sweden - StockholmTel 46-8-5090-4654UK - WokinghamTel 44-118-921-5800Fax 44-118-921-5820

                                          Worldwide Sales and Service

                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 57

                                          • Introduction
                                          • Table of Contents
                                          • 1 Getting Started
                                            • 11 Software Prerequisites
                                              • 111 Installation Steps of Atmel Studio 7
                                                • 12 Software Setup
                                                  • 121 Installation of Microchip SmartConnect application on a Mobile device
                                                    • 13 ATBTLC1000 Embedded Firmware
                                                    • 14 ATBTLC1000 Host Software API
                                                    • 15 Hardware Prerequisites
                                                      • 151 SMARTtrade SAM L21 Xplained Pro
                                                      • 152 ATBTLC1000ZR Xplained Pro Extension board
                                                        • 16 Hardware Setup
                                                          • 2 Creating the Project and Initializing
                                                            • 21 Creating Project from ASF
                                                            • 22 Configuring ASF for ATBTLC1000-ZR
                                                            • 23 Compiling and Testing the Project
                                                              • 3 Establishing Connection with Central Device
                                                                • 31 Configuring and Starting the Advertisement Process
                                                                  • 311 Flags (AD Type 0x00)
                                                                  • 312 Available Service UUID (AD Types 0x02 to 0x07)
                                                                  • 313 Device Name (AD Types 0x08 to 0x09)
                                                                    • 3131 Setting the Advertisement Payload (ble_advertisement_data_set)
                                                                    • 3132 Starting the Advertisement Process (at_ble_adv_start)
                                                                      • 314 Advertisement Process
                                                                        • 3141 Starting the Advertisement Process
                                                                            • 32 Managing GAP events
                                                                              • 321 Handling of Connected and Disconnected GAP Events
                                                                                  • 4 SettingHandling of Pre-Defined Service
                                                                                    • 41 Adding Device Info Service Component from ASF Wizard to Project
                                                                                    • 42 Configuring and Loading Device Information Service
                                                                                      • 421 Procedure to Configure and Load Device Info Service
                                                                                          • 5 Setting up and Handling Custom Service
                                                                                            • 51 Configuring and Loading the Custom Environment Service
                                                                                              • 511 Procedure to Configure and Load Custom Environment Service
                                                                                                • 52 Updating the Temperature Characteristic
                                                                                                  • 521 Setting a Characteristic Value ( at_ble_characteristic_value_set)
                                                                                                  • 522 Sending a Notification (at_ble_notification_send)
                                                                                                  • 523 Sending Temperature Information Once in Every 10 Seconds to Central
                                                                                                      • 6 Appendix A Software Solution - Pre-Defined Svc
                                                                                                      • 7 Appendix B Software Solution - Custom Service
                                                                                                      • 8 Document Revision History
                                                                                                      • The Microchip Web Site
                                                                                                      • Customer Change Notification Service
                                                                                                      • Customer Support
                                                                                                      • Microchip Devices Code Protection Feature
                                                                                                      • Legal Notice
                                                                                                      • Trademarks
                                                                                                      • Quality Management System Certified by DNV
                                                                                                      • Worldwide Sales and Service

                                            3131 Setting the Advertisement Payload (ble_advertisement_data_set)Prototype ndashat_ble_status_t at_ble_adv_data_set (uint8_t const const adv_datauint8_t adv_data_lenuint8_t const const scan_resp_datauint8_t scan_response_data_len)

                                            Description ndash Set clear or update the advertisement and scan response data

                                            Parameters ndash

                                            bull adv_data ndash Raw data to be placed in advertisement packetbull adv_data_len ndash Data length for adv_data Max size 28 bytes (3 bytes are reserved to set

                                            advertising AD type flags based on the selected Advertising mode and the user is not required toconfigure AD type flags in the advertisement payload)

                                            bull scan_resp_data ndash Raw data to be placed in the scan response packet If NULL no changes aremade to the current scan response packet data

                                            bull scan_response_data_len ndash Data length for scan_resp_data Max size 31 bytes

                                            Return ndash Execution Status

                                            This function requires a parameter raw adv_data to be sent to central Following is an example of itsdefinition

                                            static uint8_t adv_data[] = 0x11 AD1 length = 170x03 AD1 Type = Complete list of 128-bit UUIDs0x1b0xc50xd50xa50x020x000xa60x87 AD1 = UUID MSBs0xe50x110x360x390xc00xba0x5a0xf00x0A AD2 Length = 100x09 AD2 Type = Complete local NamelsquoMrsquorsquoyrsquorsquo_rsquorsquoDrsquorsquoErsquorsquoVrsquo AD2 = ldquoMy_DEVrdquo

                                            3132 Starting the Advertisement Process (at_ble_adv_start)Prototype ndashat_ble_status_t at_ble_adv_start (at_ble_adv_type_t typeat_ble_adv_mode_t modeat_ble_addr_t peer_addrat_ble_filter_type_t filtereduint16_t intervaluint16_t timeoutbool disable_randomness)

                                            Description ndash Start advertisement process

                                            Parameters ndash

                                            bull type ndash Advertising type to be used can bendash AT_BLE_ADV_TYPE_UNDIRECTEDndash AT_BLE_ADV_TYPE_DIRECTEDndash AT_BLE_ADV_TYPE_SCANNABLE_UNDIRECTEDndash AT_BLE_ADV_TYPE_NONCONN_UNDIRECTEDndash AT_BLE_ADV_TYPE_DIRECTED_LDCndash AT_BLE_ADV_TYPE_SCAN_RESPONSE

                                            bull mode ndash Advertising mode to be used can be

                                            ATBTLC1000Establishing Connection with Central Device

                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 22

                                            ndash AT_BLE_ADV_NON_DISCOVERABLEndash AT_BLE_ADV_GEN_DISCOVERABLEndash AT_BLE_ADV_LIM_DISCOVERABLEndash AT_BLE_ADV_BROADCASTER_MODE

                                            bull peer_addr ndash Specify peer address when advertising type is AT_BLE_ADV_TYPE_DIRECTEDbull filtered ndash

                                            ndash AT_BLE_ADV_FP_ANY ndash Allow scan and connection requests from anyonendash AT_BLE_ADV_FP_FILTER_SCANREQ ndash Allow scan request from White List devices onlyndash AT_BLE_ADV_FP_FILTER_CONNREQ ndash Allow connection request from White List devices

                                            onlyndash AT_BLE_ADV_FP_FILTER_BOTH ndash Allow scan and connection requests from White List

                                            devices onlybull interval ndash Advertisement interval (in 0625 ms units)bull timeout ndash Advertising timeout between 0x0001 and 0x028F in scale of seconds This parameter

                                            must be set to 0 if type equals AT_BLE_ADV_TYPE_DIRECTEDbull disable_randomness ndash When disabled advertisements are performed at the exact interval

                                            without adding random 10 ms tempo

                                            Return ndash Execution Status

                                            314 Advertisement ProcessIn this assignment the advertisement process is performed in the following configuration

                                            bull Undirected (Type AT_BLE_ADV_TYPE_UNDIRECTED)bull Discoverable (Mode AT_BLE_ADV_GEN_DISCOVERABLE)bull No peer Address (peer_addr = NULL)bull No filtering (filtered = AT_BLE_ADV_FP_ANY)bull Advertisement interval 1s (interval = 1600)bull Maximum timeout (timeout 655)bull Randomness enabled (disable_randomness = FALSE)

                                            3141 Starting the Advertisement Process1 Open startup_templatec file2 Declare the following ble_status global variable in startup_templatec as volatile

                                            include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehvolatile at_ble_status_t ble_status

                                            3 Declare the following adv_data global variable in startup_templatec as staticstatic uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD)0x09 AD2 Type = Complete local Name

                                            ATBTLC1000Establishing Connection with Central Device

                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 23

                                            My_SENS AD2 = ldquoMy_SENSrdquo

                                            Note 1 The name of the device is to be changed (AD2 field)2 According to the new name AD2 length must be adapted to new AD2 content

                                            4 Add the following start_advertisement function in startup_templatec prototype for thefunction void start_advertisement (void) also this can be added to avoid warningsvoid start_advertisement (void)printf(n Assignment 21 Start Advertisement)Set advertisement datable_status = at_ble_adv_data_set(adv_datasizeof(adv_data)NULL0)Start Advertisementble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550)if(ble_status = AT_BLE_SUCCESS)printf(n Failed to start advertisement)

                                            5 Start the advertisement process by adding the following highlighted code to the application mainroutineint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Start Advertising process start_advertisement() Register PrimaryIncluded service in case of GATT Server while(true) Write application task

                                            6 Click to save the project ltCtrl+Sgt

                                            7 Click button to compile the project ltF7gt8 Verify that no build error appears in Atmel Studio output window

                                            Figure 3-7 Atmel Studio Output Window

                                            ATBTLC1000Establishing Connection with Central Device

                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 24

                                            9 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt10 Open Microchip SmartConnect Application on Android or iOS device and tap START SCAN button

                                            Note  The device must appear in Microchip SmartConnect Application

                                            Figure 3-8 Microchip SmartConnect Application

                                            11 Terminal must display the following Log outputFigure 3-9 Log Output Window

                                            32 Managing GAP eventsThe management of the Bluetooth connection at the host MCU level is done through reception andhandling of events reported by the ATBTLC1000 These events are generated by ATBTLC1000 GAPGATT and L2CAP layers to notify the host about the ongoing Bluetooth interaction with other devices inits vicinity

                                            ATBTLC1000Establishing Connection with Central Device

                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 25

                                            To manage events coming from the ATBTLC1000 module the host driver must provide able_mgr_events_callback_handler function that allows registration of application callback functionto be executed on each event reported by the ATBTLC1000 module

                                            Prototype ndashbool ble_mgr_events_callback_handler(ble_mgr_event_cb_t event_cb_typeble_mgr_event_t event_typeconst voidble_event_handler)

                                            Description ndash Used by ProfileServiceApplication to register the Bluetooth Low Energy eventsrsquocallbacks

                                            Parameters ndash

                                            event_cb_type ndash types of actions to perform on callbacks can be either

                                            REGISTER_CALL_BACK or

                                            UNREGISTER_CALL_BACKevent_type ndash Any one of the event types can be used

                                            BLE_GAP_EVENT_TYPEBLE_GATT_CLIENT_EVENT_TYPEBLE_GATT_SERVER_EVENT_TYPEBLE_L2CAP_EVENT_TYPEBLE_GATT_HTPT_EVENT_TYPEBLE_DTM_EVENT_TYPEBLE_CUSTOM_EVENT_TYPEble_event_handler ndash pointer to handler list

                                            Structure ble_gap_event_cb_t defines the GAP callbacks Similarly structuresble_gatt_client_event_cb_t and ble_gatt_server_event_cb_t define the callbacks of GATTevents

                                            typedef struct ble_gap_event_cb BLE Undefined events received from ATBTLC1000 which is not handled in Libraryble_event_callback_t undefined BLE scan information contains the peer device scan information Refer ref at_ble_scan_info_tble_event_callback_t scan_info Once the BLE scan timeout or scan stop triggers the scan report event Refer ref at_ble_scan_report_tble_event_callback_t scan_report Advertisement complete event Refer ref at_ble_adv_cmp_evt_tble_event_callback_t advt_cmp Advertisement report in case of advertisement stopped due to advertisement timeout Refer ref at_ble_adv_report_tble_event_callback_t adv_report BLE device own random address changed event Refer ref at_ble_rand_addr_changed_tble_event_callback_t rand_addr_changed BLE connected event device connected to peer device Refer ref at_ble_connected_tble_event_callback_t connected BLE disconnected event device disconnected from peer device Refer ref at_ble_disconnected_tble_event_callback_t disconnected Connection parameter update done on peer device and own device Refer ref at_ble_conn_param_update_done_t

                                            ATBTLC1000Establishing Connection with Central Device

                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 26

                                            ble_event_callback_t conn_parameter_update_done Connection parameter update request from peer device Refer ref at_ble_conn_param_update_request_tble_event_callback_t conn_param_update_request Pair complete event as part of end of pairing process Refer ref at_ble_pair_done_tble_event_callback_t pair_done Pair request event from Central device Refer ref at_ble_pair_request_tble_event_callback_t pair_request Slave security request received from peer Peripheral device Refer ref at_ble_slave_sec_request_tble_event_callback_t slave_sec_request Pair Key request event from Peer central device Refer ref at_ble_pair_key_request_tble_event_callback_t pair_key_request encryption request comes from the peer device Needs to supply the bonding information which is stored earlier ref at_ble_encryption_request_tble_event_callback_t encryption_request encryption status changed event received from SMP once the encryption is started ref at_ble_encryption_status_changed_tble_event_callback_t encryption_status_changed Event triggered once the Resolve random address is resolved using supplied IRKs ref at_ble_resolv_rand_addr_status_tble_event_callback_t resolv_rand_addr_status Event is triggered once the connection signature information indication received ref at_ble_sign_counter_tble_event_callback_t sign_counters_ind Peer attribute information indication received Event ref at_ble_peer_att_info_ind_tble_event_callback_t peer_att_info_ind Peer device channel map received indication ref at_ble_channel_map_tble_event_callback_t con_channel_map_indble_gap_event_cb_t

                                            Note  Callback definition is application-specific If the application layer requires a specific event callbackthen the specific member of the structure is to be assigned with the address of the callback function

                                            In this assignment two callback functions on Connected and Disconnected GAP events are usedThis allows the application to restart the advertising process on Disconnect manage connectioninformation and startstop of sensor data update

                                            321 Handling of Connected and Disconnected GAP Events1 Open the startup_templatec file2 Define the following software flags as global variables in startup_templatec file volatile

                                            bool timer_flag = false and volatile bool connected_flag = false3 Declare and implement the following ble_connected_cb function in the

                                            startup_templatec file Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param)printf(n Assignment 22 Application connected )connected_flag = trueALL_UNUSED(param)return AT_BLE_SUCCESS

                                            4 Declare and implement the following ble_disconnected_cb function instartup_templatec file Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param)printf(n Assignment 22 Application disconnected )connected_flag = falsestart_advertisement()ALL_UNUSED(param)return AT_BLE_SUCCESS

                                            ATBTLC1000Establishing Connection with Central Device

                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 27

                                            5 Declare the following static GAP callback structure in ldquostartup_templatecrdquo filestatic const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTEDdisconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                                            6 Add the following register_btlc1000_callbacks function in startup_templatec Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void) Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks)ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACKBLE_GAP_EVENT_TYPEampapp_gap_handle)if (ble_status = true)printf(nError when Registering ATBTLC1000 callbacks)

                                            7 Add the register_btlc1000_callbacks function call prior to start advertisement in theapplication main routineint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Gap Callbacks register_btlc1000_callbacks ( ) Start Advertising process start_advertisement() Register PrimaryIncluded service in case of GATT Server while(true) Write application task

                                            8 Add the ble_event_task function call in the project main loop to handle the different incomingevents from ATBTLC1000while(true)ble_event_task()

                                            9 Press button ltF7gt to compile the project and verify that no build error appear in the AtmelStudio output window

                                            ATBTLC1000Establishing Connection with Central Device

                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 28

                                            Figure 3-10 Atmel Studio Output Window

                                            10 Click ldquo rdquo to save the project ltCtrl+Sgt

                                            11 Click ldquo rdquo to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt and checkcorrect initialization of the ATBTLC1000

                                            12 Open the Microchip SmartConnect application on Androidtrade or iOS device13 Press the ltStart Scangt button and pair peripherals by selecting them in the device list (pass key

                                            123456)Note 

                                            1 Pairing event handling is carried out by ble_managerc Refer toble_pair_key_request_handler() for code implementation The default pass key of123456 is also fixed inside this function This can be changed here

                                            Figure 3-11 Console Log Window

                                            Note  After peripheral pairing no services information are displayed in Microchip SmartConnectapplication as no service is currently defined and started on peripheral side

                                            ATBTLC1000Establishing Connection with Central Device

                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 29

                                            4 SettingHandling of Pre-Defined ServiceThe management of services are done in the GATT layer of the ATBTLC1000 ROM coded Bluetooth LowEnergy Stack The GATT transactions are based on high-level nested objects called Profiles Servicesand Characteristics stored in SRAM memory of ATBTLC1000 device This assignment adds the pre-defined service of information service from ASF library

                                            Figure 4-1 ATBTLC1000 GATT Layers

                                            bull ProfilesProfiles are not available in the Bluetooth Low Energy peripheral they are simply a pre-definedcollection of services that have been compiled by either the Bluetooth SIG (adopted GATT basedprofile) or by the application developer (custom profiles) For example the Heart Rate Profilecombines the Heart Rate Service and the Device Information Service

                                            Note  The complete list of officially adopted GATT-based profiles is available on the BluetoothDeveloper Portal

                                            bull ServicesA service is a collection of data and associated behaviors which accomplish a particular function orfeature of a device or portions of a device A service may reference other primary or secondaryservices andor a set of characteristics that make up the service Each service distinguishes itselffrom other services by means of a unique numeric ID called as UUID which can be either 16-bit(for officially adopted Bluetooth Low Energy Services) or 128-bit (for custom services)

                                            Note  A full list of officially adopted services and their UUID are seen on the Bluetooth DeveloperPortal

                                            bull CharacteristicsA characteristic is the lowest level concept in GATT transactions It contains a single data point withdifferent attributes such as notify read or write capabilities Similar to Services each characteristiccan be distinguished by a SIG-defined adopted UUID (16-bit) or custom (128-bit) UUID This UUIDensures interoperability across Bluetooth Low Energy devices The characteristics are important tointeract with in a Bluetooth Low Energy network In addition to standard UUID the custom UUID isused in case of specific application When characteristics with custom UUID are used in a devicethen it will be interoperable only with those devices that support these characteristics with customUUID

                                            ATBTLC1000SettingHandling of Pre-Defined Service

                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 30

                                            In this assignment the following steps are added to the Host MCU application to set up and handle adevice information service within the ATBTLC1000 module The following steps are added to the startupproject

                                            bull Adding device info service component from ASFbull Configuring and loading the service

                                            Figure 4-2 Device Information Service

                                            41 Adding Device Info Service Component from ASF Wizard to ProjectTo use the ldquoofficially adopted GATT-based profilesrdquo from SIG ASF provides Bluetooth Low Energy servicecomponents including init functions that pre-define services in Host memory

                                            Note  Before starting this assignment be sure to follow the steps mentioned in 2 Creating the Projectand Initializing and 3 Establishing Connection with Central Device

                                            1 Click ASF gt ASF Wizard2 Search for ldquoBLE-Device Information Servicesrdquo and then click Add

                                            ATBTLC1000SettingHandling of Pre-Defined Service

                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 31

                                            Figure 4-3 Available Modules

                                            3 Now ldquoBLE-Device Information Servicesrdquo (component) appears in ldquoSelected ModulesrdquoFigure 4-4 Selected Modules

                                            4 Click Apply to add the component to the projectFigure 4-5 Adding the Modules to Project

                                            5 The ldquoDevice Information Servicerdquo component is added to the project and is confirmed bydevice_information folder added in Solution Explorer

                                            ATBTLC1000SettingHandling of Pre-Defined Service

                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 32

                                            Figure 4-6 Device Information Service Added to Project

                                            42 Configuring and Loading Device Information ServiceThe ATBTLC1000 Host driver provides a set of GATT functions that allows storing and updating theservices in ATBTLC1000 memories

                                            Prototype at_ble_status_t at_ble_primary_service_define(at_ble_uuid_t uuidat_ble_handle_t service_handleat_ble_included_service_t included_service_listuint16_t included_service_countat_ble_characteristic_t charactristic_listuint16_t charactristic_count)

                                            Description Defines a new primary service along with its included services and characteristics inATBTLC1000

                                            Parameters

                                            bull Uuid [In] ndash primary service UUIDbull service_handle [Out] ndash Service handle is returned herebull included_service_list [In] ndash an array of included service referencesbull included_service_count [In] ndash number of elements in included_service_listbull charactristic_list [InOut] ndash an array of characteristics included in the service this array

                                            is updated with respective characteristics handlesbull charactristic_count[In] ndash number of elements in charactristic_list

                                            Return Execution Status

                                            This function requires an argument as GATT description structure of the service that is implemented Thepreviously added Device Info service component provides Bluetooth Low Energy service middlewareincluding the init functions that predefine the services See below ldquodis_init_servicerdquo from device infoBLE service (device_infohc)

                                            Prototype ndash void dis_init_service(dis_gatt_service_handler_t device_info_serv)Description ndash Initialize the device information service handler in the host MCU memory

                                            Parameters ndash

                                            ATBTLC1000SettingHandling of Pre-Defined Service

                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 33

                                            bull device_info_serv [Inout] pointer to device info GATT description handler to beupdated

                                            Return None

                                            Here is a picture of GATT device info service descriptor definition in Host memory

                                            device_info_serv-gtserv_handle = 0device_info_serv-gtserv_uuidtype = AT_BLE_UUID_16device_info_serv-gtserv_uuiduuid[0] = (uint8_t) DIS_SERVICE_UUIDdevice_info_serv-gtserv_uuiduuid[1] = (uint8_t) (DIS_SERVICE_UUID gtgt 8)Characteristic Info for Manufacturer Name Stringdevice_info_serv-gtserv_chars[0]char_val_handle = 0 handle stored here device_info_serv-gtserv_chars[0]uuidtype = AT_BLE_UUID_16device_info_serv-gtserv_chars[0]uuiduuid[0] = (uint8_t) IS_CHAR_MANUFACTURER_NAME_UUID UUID Manufacturer Name String device_info_serv-gtserv_chars[0]uuiduuid[1] = (uint8_t) (DIS_CHAR_MANUFACTURER_NAME_UUID gtgt 8) UUID Manufacturer Name String device_info_serv-gtserv_chars[0]properties = AT_BLE_CHAR_READ Properties memcpy(char_valuemanufacturer_nameDEFAULT_MANUFACTURER_NAMEDIS_CHAR_MANUFACTURER_NAME_INIT_LEN)device_info_serv-gtserv_chars[0]init_value = char_valuemanufacturer_namedevice_info_serv-gtserv_chars[0]value_init_len = DIS_CHAR_MANUFACTURER_NAME_INIT_LENdevice_info_serv-gtserv_chars[0]value_max_len = DIS_CHAR_MANUFACTURER_NAME_MAX_LENif BLE_PAIR_ENABLEdevice_info_serv-gtserv_chars[0]value_permissions = AT_BLE_ATTR_READABLE_REQ_AUTHN_NO_AUTHR permissions elsedevice_info_serv-gtserv_chars[0]value_permissions = AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR permissions endifdevice_info_serv-gtserv_chars[0]user_desc = NULL user defined name device_info_serv-gtserv_chars[0]user_desc_len = 0device_info_serv-gtserv_chars[0]user_desc_max_len = 0device_info_serv-gtserv_chars[0]user_desc_permissions = AT_BLE_ATTR_NO_PERMISSIONS user description permissionsdevice_info_serv-gtserv_chars[0]client_config_permissions = AT_BLE_ATTR_NO_PERMISSIONS client config permissionsdevice_info_serm hdsv-gtserv_chars[0]server_config_permissions = AT_BLE_ATTR_NO_PERMISSIONS server config permissionsdevice_info_serv-gtserv_chars[0]user_desc_handle = 0 user desc handlesdevice_info_serv-gtserv_chars[0]client_config_handle = 0 client config handlesdevice_info_serv-gtserv_chars[0]server_config_handle = 0 server config handlesdevice_info_serv-gtserv_chars[0]presentation_format = NULL presentation format

                                            Note  In case of custom service the above definition initialization must be taken care of by thedeveloper

                                            421 Procedure to Configure and Load Device Info Service1 Include device info service header file (device_infoh) at the beginning of

                                            startup_templatec fileinclude ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehinclude device_infoh

                                            2 Define a device info service handler as global in startup_templatec file Serviceshandlers dis_gatt_service_handler_t dis_service_handler

                                            ATBTLC1000SettingHandling of Pre-Defined Service

                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 34

                                            3 Add dis_init_service and at_ble_primary_service_define functions as called abovethe advertisement start in main routine Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service)dis_init_service (ampdis_service_handler) Define the primary service in the GATT server database if ((dis_primary_service_define (ampdis_service_handler)) = AT_BLE_SUCCESS)printf(Device Information Service definition failed) Start Advertising process start_advertisement()

                                            4 Click to save the project ltCtrl+Sgt and compile the project by pressing button ltF7gt5 Verify that no build error appears in Atmel Studio output window

                                            Figure 4-7 Atmel Studio Output Window

                                            6 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt7 Open ldquoMicrochip SmartConnectrdquo application on Android or iOS device8 Press ltStart Scangt button and connect to peripheral

                                            Note  The device name is a characteristic and contains the name of the device This device namecan be read by the central device to know the name of the device in order to differentiate thedevices This is being set using at_ble_device_name_set()API The device name is set bydefault when ble_device_init is called and the value is pre-defined using BLE_DEVICE_NAMEThe device name can also be sent as part of advertisement payload to be same as the oneconfigured in at_ble_adv_data_set() API It is the responsibility of users to keep the devicename set in advertisement payload the same as that configured inat_ble_device_name_set()

                                            9 The Service must now be visible after pairing with peripheral under Microchip SmartConnectapplication

                                            ATBTLC1000SettingHandling of Pre-Defined Service

                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 35

                                            Figure 4-8 Service List in Microchip SmartConnect Application

                                            Note  If the pairing of ATBTLC1000 with Microchip Smart connect is not successful then removethe pairing information from mobile by selecting ldquoForget Devicerdquo from the mobile settings Thereason for this is that the mobile app stores the previous pairing information but the ATBTLC1000device lost the previous pairing information due to RESET since it was stored on temporary storage(RAM)

                                            10 The serial terminal must display the following log output windowFigure 4-9 Console Log Window

                                            ATBTLC1000SettingHandling of Pre-Defined Service

                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 36

                                            5 Setting up and Handling Custom ServiceThe previous assignment describes the handling of Bluetooth Low Energy SIG defined device infoservice which is the predefined service available in ASF component This assignment describes thecustom service So the service initialization needs to be implemented In the context of customizedenvironment service the following service description is pushed in ATBTLC1000 memory

                                            Figure 5-1 Custom Service

                                            Custom Environment Service Description

                                            bull UUID type ndash Custom UUID (128-bit)bull UUID ndash 1bc5d5a5-0200-a687-e511-3639c1ba5af0

                                            Characteristic 0 (Temperature)

                                            bull User Description ndash Temperaturebull UUID type ndash Custom UUID (128-bit)bull UUID ndash 1bc5d5a5-0200-a687-e511-3639d8ba5af0bull Properties ndash Read Notifybull Value permission ndash No authorization requiredbull Client config permission ndash No permissionbull Server config permission ndash No permission

                                            Note  In this definition UUIDs are generated randomly Custom servicescharacteristics are free to useany 128-bit UUID less than the base UUID There is no reserved space for vendors to use 16-bit or 32-bitUUIDs

                                            With this definition any temperature change is notified to the central The notify mechanism allows thecentral to know when the data changes When notify property of the Client Characteristic ConfigurationDescriptor is enabled by the central and the device writes the new value then this updated value isautomatically sent to the central through a notification The central is not required to send readcharacteristic commands explicitly to the peripheral (GATT server)

                                            To setup and handle the custom environment service in ATBTLC1000 module the following steps areadded to the Host MCU application

                                            bull Configure and load the custom servicebull Update Temperature characteristic and notify to the central devicebull Receive and handle notification from the Host device

                                            ATBTLC1000Setting up and Handling Custom Service

                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 37

                                            Figure 5-2 Custom Service Flowchart

                                            51 Configuring and Loading the Custom Environment ServiceThe ATBTLC1000 Host driver provides the following set of GATT functions that allows it to push andupdate the service descriptions in the ATBTLC1000 SRAM memory

                                            Note  Before starting this assignment be sure to follow the steps mentioned in 2 Creating the Projectand Initializing and 3 Establishing Connection with Central Device

                                            Prototype ndashat_ble_status_t at_ble_primary_service_define(at_ble_uuid_t uuidat_ble_handle_t service_handleat_ble_included_service_t included_service_listuint16_t included_service_countat_ble_characteristic_t charactristic_listuint16_t charactristic_count)

                                            Description ndash Defines a new primary service along with its included services and characteristics inATBTLC1000 module

                                            Parameters

                                            bull Uuid [In] ndash primary service UUIDbull service_handle [Out] ndash service handle is returned herebull included_service_list [In] ndash array of included service referencesbull included_service_count [In] ndash number of elements in included_service_listbull charactristic_list [InOut] ndash an array of characteristics included in the service this array

                                            is update with respective characteristics handlesbull charactristic_count[In] ndash number of elements in charactristic_list

                                            ATBTLC1000Setting up and Handling Custom Service

                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 38

                                            Return ndash Execution Status

                                            bull Characteristics ndashndash Characteristics definition is done through specific array of following

                                            ldquoat_ble_characteristic_trdquo structure instancestypedef structat_ble_handle_t char_val_handle Handler (returned during service initialisation)at_ble_uuid_t uuid Characteristic UUID (type and value)at_ble_char_properties_t propertiesCharac Properties (read write notify)uint8_t init_value initial valueuint16_t value_init_len initial value lengthuint16_t value_max_len value max lengthat_ble_attr_permissions_t value_permissions access authorization and authenticationuint8_t user_desc User descriptionuint16_t user_desc_len User description lengthuint16_t user_desc_max_len User description max lengthat_ble_char_presentation_t presentation_format Presentation formatat_ble_attr_permissions_t user_desc_permissions User description permissionat_ble_attr_permissions_t client_config_permissions client permissionat_ble_attr_permissions_t server_config_permissions server permissionat_ble_handle_t user_desc_handle description handlerat_ble_handle_t client_config_handle Client config handlerat_ble_handle_t server_config_handle Server config handler at_ble_characteristic_t

                                            511 Procedure to Configure and Load Custom Environment Service1 Define the following service UUID and characteristic UUID in startup_templatec file

                                            define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

                                            2 Define the following environment service handler and characteristics variable as global instartup_templatec file Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

                                            3 Add the following service initialization function custom_environment_service_init instartup_templatecvoid custom_environment_service_init(void) at_ble_uuid_t environment_service_uuiduint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUIDuint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperatureenvironment_service_characs[0]user_desc_len = 10environment_service_characs[0]user_desc_max_len = 10environment_service_characs[0]uuidtype = AT_BLE_UUID_128memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16)environment_service_characs[0]properties = AT_BLE_CHAR_READ |AT_BLE_CHAR_NOTIFYenvironment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature valueenvironment_service_characs[0]value_permissions =(AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuidampenvironment_service_handlerNULL0environment_service_characs1)=AT_BLE_SUCCESS)printf(n Assignment 41 Failed to Initialize custom environment service)

                                            ATBTLC1000Setting up and Handling Custom Service

                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 39

                                            elseprintf(n Assignment 41 Initialize custom environment service)

                                            4 Declare and implement the following GATT event callback functioncustom_char_changed_app_event in startup_templatec file If a client (central) enablesnotifications for a server the server (peripheral) receives an AT_BLE_CHARACTERISTIC_CHANGEDevent and this event callback is called Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

                                            5 Declare and implement the following custom_notification_confirmation_handlerfunction in startup_templatec file Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param)at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )paramif (event_param-gtstatus == AT_BLE_SUCCESS)printf(n Assignment 41Notification Successfully sent over the air) else printf(n Assignment 41Sending Notification over the air failed)return AT_BLE_SUCCESS

                                            6 Declare the following GATT server callback structure in startup_templatec file Thisassignment uses two GATT callbacksstatic const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handlercharacteristic_changed = custom_char_changed_app_event

                                            7 Add the following register_gatt_server_callbacks function in startup_templatec toregister GATT server callback for notification confirmation event Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks)ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACKBLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle)if (ble_status = true)printf(nError when Registering ATBTLC1000 callbacks)

                                            8 Add custom_environment_service_init and register_gatt_server_callbacksfunction calls prior to start advertisement in the application main routine to initialize custom serviceand to register the GATT server callbacksint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()

                                            ATBTLC1000Setting up and Handling Custom Service

                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 40

                                            endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks() Custom service init custom_environment_service_init ( ) Register Gatt server callbacks register_gatt_server_callbacks ( ) Start Advertising process start_advertisement()while(true)ble_event_task()

                                            9 Click to save the project ltCtrl+Sgt

                                            10 Compile the project by pressing button ltF7gt11 Verify that no build error appears in the Atmel Studio output window

                                            Figure 5-3 Atmel Studio Output Window

                                            12 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt13 Open the ldquoMicrochip SmartConnectrdquo application on Android or iOS device14 Connect and pair to the peripheral (pass key 123456)15 Custom service must now be visible after pairing with peripheral under Microchip SmartConnect

                                            application

                                            ATBTLC1000Setting up and Handling Custom Service

                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 41

                                            Figure 5-4 Service List in Microchip SmartConnect Application

                                            Note  Custom service is displayed as unknown service in the above figure as this service is not aSIG-defined service

                                            Figure 5-5 General Information

                                            16 Serial terminal client must display the following Log output

                                            ATBTLC1000Setting up and Handling Custom Service

                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 42

                                            Figure 5-6 Log Output Window

                                            52 Updating the Temperature CharacteristicIn the previous assignment the custom Temperature characteristic is defined with a notify attribute Thistype of attribute requires notification to be sent to central when a new characteristic value is availableThe update of any ldquonotifyrdquo characteristic value is based on following interaction between the Host MCUand the ATBTLC1000Figure 5-7 Characteristic Notification

                                            521 Setting a Characteristic Value ( at_ble_characteristic_value_set)Prototype ndashat_ble_status_t at_ble_characteristic_value_setat_ble_handle_t handleuint8_t valueuint16_t len)

                                            Description ndash Sets a characteristic value in ATBTLC1000 memory

                                            Parameters ndash

                                            ATBTLC1000Setting up and Handling Custom Service

                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 43

                                            bull handle [inout] ndash Pointer to Characteristic handle to be changedbull value [in] ndash New valuebull len [in] ndash Value length in bytes

                                            Return ndash Execution Status

                                            522 Sending a Notification (at_ble_notification_send)Prototype ndashat_ble_status_t at_ble_notification_send(at_ble_handle_t conn_handleat_ble_handle_t attr_handle)

                                            Description ndash Sends a Notification

                                            Parameters ndash

                                            bull conn_handle[in] ndash handle of the connection to be notifiedbull attr_handle [in] ndash handle of the attribute originating the notification

                                            Return ndash Execution Status

                                            523 Sending Temperature Information Once in Every 10 Seconds to Central1 Modify the following ldquotimer_callback_fnrdquo callback function from the startup_templatec

                                            filestatic void timer_callback_fn(void)timer_flag = true

                                            2 hw_timer_init()in main routine of startup_templatec initializes the hardware timer3 If a client (Central) enables the notifications for a server the server (Peripheral) receives an

                                            AT_BLE_CHARACTERISTIC_CHANGED event callback then start the periodic 10 second timer forsending the notification Add the following code in previously definedcustom_char_changed_app_event function Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))timer_flag = falsehw_timer_start(10)printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

                                            4 Declare the following Temperature_value global variable in startup_templatec staticuint8_t Temperature_value = 25 as static

                                            5 Add the following send_temperature_notification function in startup_templatec tosend temperature every 10 seconds Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++

                                            ATBTLC1000Setting up and Handling Custom Service

                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 44

                                            if(Temperature_value gt 75)Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set(environment_service_characs[0]char_val_handle(uint8_t )ampTemperature_valuesizeof(Temperature_value))ble_status = at_ble_notification_send(0environment_service_characs[0]char_val_handle)if(ble_status = AT_BLE_SUCCESS)printf(fail to send temperature update notification )

                                            6 Add the following code in main routine to send temperature data every 10 secondswhile (1) ble_event_task()if(connected_flag == true ampamp timer_flag == truetimer_flag = falsesend_temperature_notification()

                                            7 Click to save the project ltCtrl+Sgt

                                            8 Compile the project by pressing the button ltF7gt9 Verify that no build error appears in Atmel Studio output window

                                            Figure 5-8 Atmel Studio Output Window

                                            10 Click to program the project binary on the L21 Xplained XSTK11 Open ldquoMicrochip SmartConnectrdquo Application on Android or iOS device12 Connect and pair to the peripheral (pass key 123456)13 Click NOTIFY to start the notification14 Temperature information in HEX values must be displayed in Microchip SmartConnect application

                                            ATBTLC1000Setting up and Handling Custom Service

                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 45

                                            Figure 5-9 Notification Window

                                            15 Serial terminal must display the following log outputFigure 5-10 Log Output Window

                                            ATBTLC1000Setting up and Handling Custom Service

                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 46

                                            6 Appendix A Software Solution - Pre-Defined SvcThe following is the code implementation for handling of pre-defined service done in 4 SettingHandlingof Pre-Defined Service

                                            - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehinclude device_infoh

                                            volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false Services handlers dis_gatt_service_handler_t dis_service_handler

                                            static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

                                            void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                                            Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                                            Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                                            static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                                            Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void) Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks)

                                            ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 47

                                            ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                            timer callback function static void timer_callback_fn(void) Add timer callback functionality here

                                            void button_cb(void) Add button callback functionality here

                                            int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                                            Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                                            DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks()

                                            Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service) dis_init_service(ampdis_service_handler) Define the primary service in the GATT server database if((dis_primary_service_define(ampdis_service_handler)) = AT_BLE_SUCCESS) printf(Device Information Service definition failed)

                                            Start Advertising process start_advertisement() while(true) ble_event_task()

                                            ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 48

                                            7 Appendix B Software Solution - Custom ServiceThe following is the code implementation for handling of pre-defined service done in 5 Setting up andHandling Custom Service

                                            - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templateh

                                            volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false

                                            static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

                                            define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0

                                            define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

                                            Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

                                            void custom_environment_service_init(void) at_ble_uuid_t environment_service_uuid uint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUID uint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128 memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperature environment_service_characs[0]user_desc_len = 10 environment_service_characs[0]user_desc_max_len = 10 environment_service_characs[0]uuidtype = AT_BLE_UUID_128 memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16) environment_service_characs[0]properties = AT_BLE_CHAR_READ | AT_BLE_CHAR_NOTIFY environment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature value environment_service_characs[0]value_permissions = (AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuid ampenvironment_service_handlerNULL0 environment_service_characs1)=AT_BLE_SUCCESS) printf(n Assignment 41 Failed to Initialize custom environment service) else printf(n Assignment 41 Initialize custom environment service)

                                            Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param) at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )param if (event_param-gtstatus == AT_BLE_SUCCESS) printf(n Assignment 41Notification Successfully sent over the air)

                                            ATBTLC1000Appendix B Software Solution - Custom Service

                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 49

                                            else printf(n Assignment 41Sending Notification over the air failed) return AT_BLE_SUCCESS

                                            static at_ble_status_t custom_char_changed_app_event(void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle -gt char_new_value[0])) timer_flag = false hw_timer_start(10) printf(n Assignment 41Characteristic changed event) return AT_BLE_SUCCESS

                                            static const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handler characteristic_changed = custom_char_changed_app_event

                                            Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                            void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                                            Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                                            Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                                            static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                                            Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void)

                                            ATBTLC1000Appendix B Software Solution - Custom Service

                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 50

                                            Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                            timer callback function static void timer_callback_fn(void) Add timer callback functionality here timer_flag = true

                                            void button_cb(void) Add button callback functionality here

                                            static uint8_t Temperature_value = 25

                                            Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++ if(Temperature_value gt 75) Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set( environment_service_characs[0]char_val_handle (uint8_t )ampTemperature_value sizeof(Temperature_value)) ble_status = at_ble_notification_send(0 environment_service_characs[0]char_val_handle) if(ble_status = AT_BLE_SUCCESS) printf(fail to send temperature update notification )

                                            int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                                            Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                                            DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register Gap ATBTLC1000 Callbacks register_btlc1000_callbacks()

                                            Custom service init custom_environment_service_init()

                                            ATBTLC1000Appendix B Software Solution - Custom Service

                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 51

                                            Register Gatt server callback register_gatt_server_callbacks()

                                            Start Advertising process start_advertisement() while(true) ble_event_task() if(connected_flag == true ampamp timer_flag == true) timer_flag = false send_temperature_notification()

                                            ATBTLC1000Appendix B Software Solution - Custom Service

                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 52

                                            8 Document Revision HistoryRev B - 42018

                                            Section Changes

                                            Document Revised contents to match various Bluetooth Low Energy standard versions

                                            Rev A - 122017

                                            Section Changes

                                            Document Initial release

                                            ATBTLC1000Document Revision History

                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 53

                                            The Microchip Web Site

                                            Microchip provides online support via our web site at httpwwwmicrochipcom This web site is used asa means to make files and information easily available to customers Accessible by using your favoriteInternet browser the web site contains the following information

                                            bull Product Support ndash Data sheets and errata application notes and sample programs designresources userrsquos guides and hardware support documents latest software releases and archivedsoftware

                                            bull General Technical Support ndash Frequently Asked Questions (FAQ) technical support requestsonline discussion groups Microchip consultant program member listing

                                            bull Business of Microchip ndash Product selector and ordering guides latest Microchip press releaseslisting of seminars and events listings of Microchip sales offices distributors and factoryrepresentatives

                                            Customer Change Notification Service

                                            Microchiprsquos customer notification service helps keep customers current on Microchip productsSubscribers will receive e-mail notification whenever there are changes updates revisions or erratarelated to a specified product family or development tool of interest

                                            To register access the Microchip web site at httpwwwmicrochipcom Under ldquoSupportrdquo click onldquoCustomer Change Notificationrdquo and follow the registration instructions

                                            Customer Support

                                            Users of Microchip products can receive assistance through several channels

                                            bull Distributor or Representativebull Local Sales Officebull Field Application Engineer (FAE)bull Technical Support

                                            Customers should contact their distributor representative or Field Application Engineer (FAE) for supportLocal sales offices are also available to help customers A listing of sales offices and locations is includedin the back of this document

                                            Technical support is available through the web site at httpwwwmicrochipcomsupport

                                            Microchip Devices Code Protection Feature

                                            Note the following details of the code protection feature on Microchip devices

                                            bull Microchip products meet the specification contained in their particular Microchip Data Sheetbull Microchip believes that its family of products is one of the most secure families of its kind on the

                                            market today when used in the intended manner and under normal conditionsbull There are dishonest and possibly illegal methods used to breach the code protection feature All of

                                            these methods to our knowledge require using the Microchip products in a manner outside theoperating specifications contained in Microchiprsquos Data Sheets Most likely the person doing so isengaged in theft of intellectual property

                                            bull Microchip is willing to work with the customer who is concerned about the integrity of their code

                                            ATBTLC1000

                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 54

                                            bull Neither Microchip nor any other semiconductor manufacturer can guarantee the security of theircode Code protection does not mean that we are guaranteeing the product as ldquounbreakablerdquo

                                            Code protection is constantly evolving We at Microchip are committed to continuously improving thecode protection features of our products Attempts to break Microchiprsquos code protection feature may be aviolation of the Digital Millennium Copyright Act If such acts allow unauthorized access to your softwareor other copyrighted work you may have a right to sue for relief under that Act

                                            Legal Notice

                                            Information contained in this publication regarding device applications and the like is provided only foryour convenience and may be superseded by updates It is your responsibility to ensure that yourapplication meets with your specifications MICROCHIP MAKES NO REPRESENTATIONS ORWARRANTIES OF ANY KIND WHETHER EXPRESS OR IMPLIED WRITTEN OR ORAL STATUTORYOR OTHERWISE RELATED TO THE INFORMATION INCLUDING BUT NOT LIMITED TO ITSCONDITION QUALITY PERFORMANCE MERCHANTABILITY OR FITNESS FOR PURPOSEMicrochip disclaims all liability arising from this information and its use Use of Microchip devices in lifesupport andor safety applications is entirely at the buyerrsquos risk and the buyer agrees to defendindemnify and hold harmless Microchip from any and all damages claims suits or expenses resultingfrom such use No licenses are conveyed implicitly or otherwise under any Microchip intellectualproperty rights unless otherwise stated

                                            Trademarks

                                            The Microchip name and logo the Microchip logo AnyRate AVR AVR logo AVR Freaks BeaconThingsBitCloud CryptoMemory CryptoRF dsPIC FlashFlex flexPWR Heldo JukeBlox KeeLoq KeeLoq logoKleer LANCheck LINK MD maXStylus maXTouch MediaLB megaAVR MOST MOST logo MPLABOptoLyzer PIC picoPower PICSTART PIC32 logo Prochip Designer QTouch RightTouch SAM-BASpyNIC SST SST Logo SuperFlash tinyAVR UNIO and XMEGA are registered trademarks ofMicrochip Technology Incorporated in the USA and other countries

                                            ClockWorks The Embedded Control Solutions Company EtherSynch Hyper Speed Control HyperLightLoad IntelliMOS mTouch Precision Edge and Quiet-Wire are registered trademarks of MicrochipTechnology Incorporated in the USA

                                            Adjacent Key Suppression AKS Analog-for-the-Digital Age Any Capacitor AnyIn AnyOut BodyComchipKIT chipKIT logo CodeGuard CryptoAuthentication CryptoCompanion CryptoControllerdsPICDEM dsPICDEMnet Dynamic Average Matching DAM ECAN EtherGREEN In-Circuit SerialProgramming ICSP Inter-Chip Connectivity JitterBlocker KleerNet KleerNet logo Mindi MiWimotorBench MPASM MPF MPLAB Certified logo MPLIB MPLINK MultiTRAK NetDetach OmniscientCode Generation PICDEM PICDEMnet PICkit PICtail PureSilicon QMatrix RightTouch logo REALICE Ripple Blocker SAM-ICE Serial Quad IO SMART-IS SQI SuperSwitcher SuperSwitcher II TotalEndurance TSHARC USBCheck VariSense ViewSpan WiperLock Wireless DNA and ZENA aretrademarks of Microchip Technology Incorporated in the USA and other countries

                                            SQTP is a service mark of Microchip Technology Incorporated in the USA

                                            Silicon Storage Technology is a registered trademark of Microchip Technology Inc in other countries

                                            GestIC is a registered trademark of Microchip Technology Germany II GmbH amp Co KG a subsidiary ofMicrochip Technology Inc in other countries

                                            All other trademarks mentioned herein are property of their respective companies

                                            ATBTLC1000

                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 55

                                            copy 2018 Microchip Technology Incorporated Printed in the USA All Rights Reserved

                                            ISBN 978-1-5224-2921-0

                                            Quality Management System Certified by DNV

                                            ISOTS 16949Microchip received ISOTS-169492009 certification for its worldwide headquarters design and waferfabrication facilities in Chandler and Tempe Arizona Gresham Oregon and design centers in Californiaand India The Companyrsquos quality system processes and procedures are for its PICreg MCUs and dsPICreg

                                            DSCs KEELOQreg code hopping devices Serial EEPROMs microperipherals nonvolatile memory andanalog products In addition Microchiprsquos quality system for the design and manufacture of developmentsystems is ISO 90012000 certified

                                            ATBTLC1000

                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 56

                                            AMERICAS ASIAPACIFIC ASIAPACIFIC EUROPECorporate Office2355 West Chandler BlvdChandler AZ 85224-6199Tel 480-792-7200Fax 480-792-7277Technical SupporthttpwwwmicrochipcomsupportWeb AddresswwwmicrochipcomAtlantaDuluth GATel 678-957-9614Fax 678-957-1455Austin TXTel 512-257-3370BostonWestborough MATel 774-760-0087Fax 774-760-0088ChicagoItasca ILTel 630-285-0071Fax 630-285-0075DallasAddison TXTel 972-818-7423Fax 972-818-2924DetroitNovi MITel 248-848-4000Houston TXTel 281-894-5983IndianapolisNoblesville INTel 317-773-8323Fax 317-773-5453Tel 317-536-2380Los AngelesMission Viejo CATel 949-462-9523Fax 949-462-9608Tel 951-273-7800Raleigh NCTel 919-844-7510New York NYTel 631-435-6000San Jose CATel 408-735-9110Tel 408-436-4270Canada - TorontoTel 905-695-1980Fax 905-695-2078

                                            Australia - SydneyTel 61-2-9868-6733China - BeijingTel 86-10-8569-7000China - ChengduTel 86-28-8665-5511China - ChongqingTel 86-23-8980-9588China - DongguanTel 86-769-8702-9880China - GuangzhouTel 86-20-8755-8029China - HangzhouTel 86-571-8792-8115China - Hong Kong SARTel 852-2943-5100China - NanjingTel 86-25-8473-2460China - QingdaoTel 86-532-8502-7355China - ShanghaiTel 86-21-3326-8000China - ShenyangTel 86-24-2334-2829China - ShenzhenTel 86-755-8864-2200China - SuzhouTel 86-186-6233-1526China - WuhanTel 86-27-5980-5300China - XianTel 86-29-8833-7252China - XiamenTel 86-592-2388138China - ZhuhaiTel 86-756-3210040

                                            India - BangaloreTel 91-80-3090-4444India - New DelhiTel 91-11-4160-8631India - PuneTel 91-20-4121-0141Japan - OsakaTel 81-6-6152-7160Japan - TokyoTel 81-3-6880- 3770Korea - DaeguTel 82-53-744-4301Korea - SeoulTel 82-2-554-7200Malaysia - Kuala LumpurTel 60-3-7651-7906Malaysia - PenangTel 60-4-227-8870Philippines - ManilaTel 63-2-634-9065SingaporeTel 65-6334-8870Taiwan - Hsin ChuTel 886-3-577-8366Taiwan - KaohsiungTel 886-7-213-7830Taiwan - TaipeiTel 886-2-2508-8600Thailand - BangkokTel 66-2-694-1351Vietnam - Ho Chi MinhTel 84-28-5448-2100

                                            Austria - WelsTel 43-7242-2244-39Fax 43-7242-2244-393Denmark - CopenhagenTel 45-4450-2828Fax 45-4485-2829Finland - EspooTel 358-9-4520-820France - ParisTel 33-1-69-53-63-20Fax 33-1-69-30-90-79Germany - GarchingTel 49-8931-9700Germany - HaanTel 49-2129-3766400Germany - HeilbronnTel 49-7131-67-3636Germany - KarlsruheTel 49-721-625370Germany - MunichTel 49-89-627-144-0Fax 49-89-627-144-44Germany - RosenheimTel 49-8031-354-560Israel - RarsquoananaTel 972-9-744-7705Italy - MilanTel 39-0331-742611Fax 39-0331-466781Italy - PadovaTel 39-049-7625286Netherlands - DrunenTel 31-416-690399Fax 31-416-690340Norway - TrondheimTel 47-7289-7561Poland - WarsawTel 48-22-3325737Romania - BucharestTel 40-21-407-87-50Spain - MadridTel 34-91-708-08-90Fax 34-91-708-08-91Sweden - GothenbergTel 46-31-704-60-40Sweden - StockholmTel 46-8-5090-4654UK - WokinghamTel 44-118-921-5800Fax 44-118-921-5820

                                            Worldwide Sales and Service

                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 57

                                            • Introduction
                                            • Table of Contents
                                            • 1 Getting Started
                                              • 11 Software Prerequisites
                                                • 111 Installation Steps of Atmel Studio 7
                                                  • 12 Software Setup
                                                    • 121 Installation of Microchip SmartConnect application on a Mobile device
                                                      • 13 ATBTLC1000 Embedded Firmware
                                                      • 14 ATBTLC1000 Host Software API
                                                      • 15 Hardware Prerequisites
                                                        • 151 SMARTtrade SAM L21 Xplained Pro
                                                        • 152 ATBTLC1000ZR Xplained Pro Extension board
                                                          • 16 Hardware Setup
                                                            • 2 Creating the Project and Initializing
                                                              • 21 Creating Project from ASF
                                                              • 22 Configuring ASF for ATBTLC1000-ZR
                                                              • 23 Compiling and Testing the Project
                                                                • 3 Establishing Connection with Central Device
                                                                  • 31 Configuring and Starting the Advertisement Process
                                                                    • 311 Flags (AD Type 0x00)
                                                                    • 312 Available Service UUID (AD Types 0x02 to 0x07)
                                                                    • 313 Device Name (AD Types 0x08 to 0x09)
                                                                      • 3131 Setting the Advertisement Payload (ble_advertisement_data_set)
                                                                      • 3132 Starting the Advertisement Process (at_ble_adv_start)
                                                                        • 314 Advertisement Process
                                                                          • 3141 Starting the Advertisement Process
                                                                              • 32 Managing GAP events
                                                                                • 321 Handling of Connected and Disconnected GAP Events
                                                                                    • 4 SettingHandling of Pre-Defined Service
                                                                                      • 41 Adding Device Info Service Component from ASF Wizard to Project
                                                                                      • 42 Configuring and Loading Device Information Service
                                                                                        • 421 Procedure to Configure and Load Device Info Service
                                                                                            • 5 Setting up and Handling Custom Service
                                                                                              • 51 Configuring and Loading the Custom Environment Service
                                                                                                • 511 Procedure to Configure and Load Custom Environment Service
                                                                                                  • 52 Updating the Temperature Characteristic
                                                                                                    • 521 Setting a Characteristic Value ( at_ble_characteristic_value_set)
                                                                                                    • 522 Sending a Notification (at_ble_notification_send)
                                                                                                    • 523 Sending Temperature Information Once in Every 10 Seconds to Central
                                                                                                        • 6 Appendix A Software Solution - Pre-Defined Svc
                                                                                                        • 7 Appendix B Software Solution - Custom Service
                                                                                                        • 8 Document Revision History
                                                                                                        • The Microchip Web Site
                                                                                                        • Customer Change Notification Service
                                                                                                        • Customer Support
                                                                                                        • Microchip Devices Code Protection Feature
                                                                                                        • Legal Notice
                                                                                                        • Trademarks
                                                                                                        • Quality Management System Certified by DNV
                                                                                                        • Worldwide Sales and Service

                                              ndash AT_BLE_ADV_NON_DISCOVERABLEndash AT_BLE_ADV_GEN_DISCOVERABLEndash AT_BLE_ADV_LIM_DISCOVERABLEndash AT_BLE_ADV_BROADCASTER_MODE

                                              bull peer_addr ndash Specify peer address when advertising type is AT_BLE_ADV_TYPE_DIRECTEDbull filtered ndash

                                              ndash AT_BLE_ADV_FP_ANY ndash Allow scan and connection requests from anyonendash AT_BLE_ADV_FP_FILTER_SCANREQ ndash Allow scan request from White List devices onlyndash AT_BLE_ADV_FP_FILTER_CONNREQ ndash Allow connection request from White List devices

                                              onlyndash AT_BLE_ADV_FP_FILTER_BOTH ndash Allow scan and connection requests from White List

                                              devices onlybull interval ndash Advertisement interval (in 0625 ms units)bull timeout ndash Advertising timeout between 0x0001 and 0x028F in scale of seconds This parameter

                                              must be set to 0 if type equals AT_BLE_ADV_TYPE_DIRECTEDbull disable_randomness ndash When disabled advertisements are performed at the exact interval

                                              without adding random 10 ms tempo

                                              Return ndash Execution Status

                                              314 Advertisement ProcessIn this assignment the advertisement process is performed in the following configuration

                                              bull Undirected (Type AT_BLE_ADV_TYPE_UNDIRECTED)bull Discoverable (Mode AT_BLE_ADV_GEN_DISCOVERABLE)bull No peer Address (peer_addr = NULL)bull No filtering (filtered = AT_BLE_ADV_FP_ANY)bull Advertisement interval 1s (interval = 1600)bull Maximum timeout (timeout 655)bull Randomness enabled (disable_randomness = FALSE)

                                              3141 Starting the Advertisement Process1 Open startup_templatec file2 Declare the following ble_status global variable in startup_templatec as volatile

                                              include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehvolatile at_ble_status_t ble_status

                                              3 Declare the following adv_data global variable in startup_templatec as staticstatic uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD)0x09 AD2 Type = Complete local Name

                                              ATBTLC1000Establishing Connection with Central Device

                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 23

                                              My_SENS AD2 = ldquoMy_SENSrdquo

                                              Note 1 The name of the device is to be changed (AD2 field)2 According to the new name AD2 length must be adapted to new AD2 content

                                              4 Add the following start_advertisement function in startup_templatec prototype for thefunction void start_advertisement (void) also this can be added to avoid warningsvoid start_advertisement (void)printf(n Assignment 21 Start Advertisement)Set advertisement datable_status = at_ble_adv_data_set(adv_datasizeof(adv_data)NULL0)Start Advertisementble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550)if(ble_status = AT_BLE_SUCCESS)printf(n Failed to start advertisement)

                                              5 Start the advertisement process by adding the following highlighted code to the application mainroutineint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Start Advertising process start_advertisement() Register PrimaryIncluded service in case of GATT Server while(true) Write application task

                                              6 Click to save the project ltCtrl+Sgt

                                              7 Click button to compile the project ltF7gt8 Verify that no build error appears in Atmel Studio output window

                                              Figure 3-7 Atmel Studio Output Window

                                              ATBTLC1000Establishing Connection with Central Device

                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 24

                                              9 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt10 Open Microchip SmartConnect Application on Android or iOS device and tap START SCAN button

                                              Note  The device must appear in Microchip SmartConnect Application

                                              Figure 3-8 Microchip SmartConnect Application

                                              11 Terminal must display the following Log outputFigure 3-9 Log Output Window

                                              32 Managing GAP eventsThe management of the Bluetooth connection at the host MCU level is done through reception andhandling of events reported by the ATBTLC1000 These events are generated by ATBTLC1000 GAPGATT and L2CAP layers to notify the host about the ongoing Bluetooth interaction with other devices inits vicinity

                                              ATBTLC1000Establishing Connection with Central Device

                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 25

                                              To manage events coming from the ATBTLC1000 module the host driver must provide able_mgr_events_callback_handler function that allows registration of application callback functionto be executed on each event reported by the ATBTLC1000 module

                                              Prototype ndashbool ble_mgr_events_callback_handler(ble_mgr_event_cb_t event_cb_typeble_mgr_event_t event_typeconst voidble_event_handler)

                                              Description ndash Used by ProfileServiceApplication to register the Bluetooth Low Energy eventsrsquocallbacks

                                              Parameters ndash

                                              event_cb_type ndash types of actions to perform on callbacks can be either

                                              REGISTER_CALL_BACK or

                                              UNREGISTER_CALL_BACKevent_type ndash Any one of the event types can be used

                                              BLE_GAP_EVENT_TYPEBLE_GATT_CLIENT_EVENT_TYPEBLE_GATT_SERVER_EVENT_TYPEBLE_L2CAP_EVENT_TYPEBLE_GATT_HTPT_EVENT_TYPEBLE_DTM_EVENT_TYPEBLE_CUSTOM_EVENT_TYPEble_event_handler ndash pointer to handler list

                                              Structure ble_gap_event_cb_t defines the GAP callbacks Similarly structuresble_gatt_client_event_cb_t and ble_gatt_server_event_cb_t define the callbacks of GATTevents

                                              typedef struct ble_gap_event_cb BLE Undefined events received from ATBTLC1000 which is not handled in Libraryble_event_callback_t undefined BLE scan information contains the peer device scan information Refer ref at_ble_scan_info_tble_event_callback_t scan_info Once the BLE scan timeout or scan stop triggers the scan report event Refer ref at_ble_scan_report_tble_event_callback_t scan_report Advertisement complete event Refer ref at_ble_adv_cmp_evt_tble_event_callback_t advt_cmp Advertisement report in case of advertisement stopped due to advertisement timeout Refer ref at_ble_adv_report_tble_event_callback_t adv_report BLE device own random address changed event Refer ref at_ble_rand_addr_changed_tble_event_callback_t rand_addr_changed BLE connected event device connected to peer device Refer ref at_ble_connected_tble_event_callback_t connected BLE disconnected event device disconnected from peer device Refer ref at_ble_disconnected_tble_event_callback_t disconnected Connection parameter update done on peer device and own device Refer ref at_ble_conn_param_update_done_t

                                              ATBTLC1000Establishing Connection with Central Device

                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 26

                                              ble_event_callback_t conn_parameter_update_done Connection parameter update request from peer device Refer ref at_ble_conn_param_update_request_tble_event_callback_t conn_param_update_request Pair complete event as part of end of pairing process Refer ref at_ble_pair_done_tble_event_callback_t pair_done Pair request event from Central device Refer ref at_ble_pair_request_tble_event_callback_t pair_request Slave security request received from peer Peripheral device Refer ref at_ble_slave_sec_request_tble_event_callback_t slave_sec_request Pair Key request event from Peer central device Refer ref at_ble_pair_key_request_tble_event_callback_t pair_key_request encryption request comes from the peer device Needs to supply the bonding information which is stored earlier ref at_ble_encryption_request_tble_event_callback_t encryption_request encryption status changed event received from SMP once the encryption is started ref at_ble_encryption_status_changed_tble_event_callback_t encryption_status_changed Event triggered once the Resolve random address is resolved using supplied IRKs ref at_ble_resolv_rand_addr_status_tble_event_callback_t resolv_rand_addr_status Event is triggered once the connection signature information indication received ref at_ble_sign_counter_tble_event_callback_t sign_counters_ind Peer attribute information indication received Event ref at_ble_peer_att_info_ind_tble_event_callback_t peer_att_info_ind Peer device channel map received indication ref at_ble_channel_map_tble_event_callback_t con_channel_map_indble_gap_event_cb_t

                                              Note  Callback definition is application-specific If the application layer requires a specific event callbackthen the specific member of the structure is to be assigned with the address of the callback function

                                              In this assignment two callback functions on Connected and Disconnected GAP events are usedThis allows the application to restart the advertising process on Disconnect manage connectioninformation and startstop of sensor data update

                                              321 Handling of Connected and Disconnected GAP Events1 Open the startup_templatec file2 Define the following software flags as global variables in startup_templatec file volatile

                                              bool timer_flag = false and volatile bool connected_flag = false3 Declare and implement the following ble_connected_cb function in the

                                              startup_templatec file Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param)printf(n Assignment 22 Application connected )connected_flag = trueALL_UNUSED(param)return AT_BLE_SUCCESS

                                              4 Declare and implement the following ble_disconnected_cb function instartup_templatec file Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param)printf(n Assignment 22 Application disconnected )connected_flag = falsestart_advertisement()ALL_UNUSED(param)return AT_BLE_SUCCESS

                                              ATBTLC1000Establishing Connection with Central Device

                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 27

                                              5 Declare the following static GAP callback structure in ldquostartup_templatecrdquo filestatic const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTEDdisconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                                              6 Add the following register_btlc1000_callbacks function in startup_templatec Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void) Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks)ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACKBLE_GAP_EVENT_TYPEampapp_gap_handle)if (ble_status = true)printf(nError when Registering ATBTLC1000 callbacks)

                                              7 Add the register_btlc1000_callbacks function call prior to start advertisement in theapplication main routineint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Gap Callbacks register_btlc1000_callbacks ( ) Start Advertising process start_advertisement() Register PrimaryIncluded service in case of GATT Server while(true) Write application task

                                              8 Add the ble_event_task function call in the project main loop to handle the different incomingevents from ATBTLC1000while(true)ble_event_task()

                                              9 Press button ltF7gt to compile the project and verify that no build error appear in the AtmelStudio output window

                                              ATBTLC1000Establishing Connection with Central Device

                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 28

                                              Figure 3-10 Atmel Studio Output Window

                                              10 Click ldquo rdquo to save the project ltCtrl+Sgt

                                              11 Click ldquo rdquo to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt and checkcorrect initialization of the ATBTLC1000

                                              12 Open the Microchip SmartConnect application on Androidtrade or iOS device13 Press the ltStart Scangt button and pair peripherals by selecting them in the device list (pass key

                                              123456)Note 

                                              1 Pairing event handling is carried out by ble_managerc Refer toble_pair_key_request_handler() for code implementation The default pass key of123456 is also fixed inside this function This can be changed here

                                              Figure 3-11 Console Log Window

                                              Note  After peripheral pairing no services information are displayed in Microchip SmartConnectapplication as no service is currently defined and started on peripheral side

                                              ATBTLC1000Establishing Connection with Central Device

                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 29

                                              4 SettingHandling of Pre-Defined ServiceThe management of services are done in the GATT layer of the ATBTLC1000 ROM coded Bluetooth LowEnergy Stack The GATT transactions are based on high-level nested objects called Profiles Servicesand Characteristics stored in SRAM memory of ATBTLC1000 device This assignment adds the pre-defined service of information service from ASF library

                                              Figure 4-1 ATBTLC1000 GATT Layers

                                              bull ProfilesProfiles are not available in the Bluetooth Low Energy peripheral they are simply a pre-definedcollection of services that have been compiled by either the Bluetooth SIG (adopted GATT basedprofile) or by the application developer (custom profiles) For example the Heart Rate Profilecombines the Heart Rate Service and the Device Information Service

                                              Note  The complete list of officially adopted GATT-based profiles is available on the BluetoothDeveloper Portal

                                              bull ServicesA service is a collection of data and associated behaviors which accomplish a particular function orfeature of a device or portions of a device A service may reference other primary or secondaryservices andor a set of characteristics that make up the service Each service distinguishes itselffrom other services by means of a unique numeric ID called as UUID which can be either 16-bit(for officially adopted Bluetooth Low Energy Services) or 128-bit (for custom services)

                                              Note  A full list of officially adopted services and their UUID are seen on the Bluetooth DeveloperPortal

                                              bull CharacteristicsA characteristic is the lowest level concept in GATT transactions It contains a single data point withdifferent attributes such as notify read or write capabilities Similar to Services each characteristiccan be distinguished by a SIG-defined adopted UUID (16-bit) or custom (128-bit) UUID This UUIDensures interoperability across Bluetooth Low Energy devices The characteristics are important tointeract with in a Bluetooth Low Energy network In addition to standard UUID the custom UUID isused in case of specific application When characteristics with custom UUID are used in a devicethen it will be interoperable only with those devices that support these characteristics with customUUID

                                              ATBTLC1000SettingHandling of Pre-Defined Service

                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 30

                                              In this assignment the following steps are added to the Host MCU application to set up and handle adevice information service within the ATBTLC1000 module The following steps are added to the startupproject

                                              bull Adding device info service component from ASFbull Configuring and loading the service

                                              Figure 4-2 Device Information Service

                                              41 Adding Device Info Service Component from ASF Wizard to ProjectTo use the ldquoofficially adopted GATT-based profilesrdquo from SIG ASF provides Bluetooth Low Energy servicecomponents including init functions that pre-define services in Host memory

                                              Note  Before starting this assignment be sure to follow the steps mentioned in 2 Creating the Projectand Initializing and 3 Establishing Connection with Central Device

                                              1 Click ASF gt ASF Wizard2 Search for ldquoBLE-Device Information Servicesrdquo and then click Add

                                              ATBTLC1000SettingHandling of Pre-Defined Service

                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 31

                                              Figure 4-3 Available Modules

                                              3 Now ldquoBLE-Device Information Servicesrdquo (component) appears in ldquoSelected ModulesrdquoFigure 4-4 Selected Modules

                                              4 Click Apply to add the component to the projectFigure 4-5 Adding the Modules to Project

                                              5 The ldquoDevice Information Servicerdquo component is added to the project and is confirmed bydevice_information folder added in Solution Explorer

                                              ATBTLC1000SettingHandling of Pre-Defined Service

                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 32

                                              Figure 4-6 Device Information Service Added to Project

                                              42 Configuring and Loading Device Information ServiceThe ATBTLC1000 Host driver provides a set of GATT functions that allows storing and updating theservices in ATBTLC1000 memories

                                              Prototype at_ble_status_t at_ble_primary_service_define(at_ble_uuid_t uuidat_ble_handle_t service_handleat_ble_included_service_t included_service_listuint16_t included_service_countat_ble_characteristic_t charactristic_listuint16_t charactristic_count)

                                              Description Defines a new primary service along with its included services and characteristics inATBTLC1000

                                              Parameters

                                              bull Uuid [In] ndash primary service UUIDbull service_handle [Out] ndash Service handle is returned herebull included_service_list [In] ndash an array of included service referencesbull included_service_count [In] ndash number of elements in included_service_listbull charactristic_list [InOut] ndash an array of characteristics included in the service this array

                                              is updated with respective characteristics handlesbull charactristic_count[In] ndash number of elements in charactristic_list

                                              Return Execution Status

                                              This function requires an argument as GATT description structure of the service that is implemented Thepreviously added Device Info service component provides Bluetooth Low Energy service middlewareincluding the init functions that predefine the services See below ldquodis_init_servicerdquo from device infoBLE service (device_infohc)

                                              Prototype ndash void dis_init_service(dis_gatt_service_handler_t device_info_serv)Description ndash Initialize the device information service handler in the host MCU memory

                                              Parameters ndash

                                              ATBTLC1000SettingHandling of Pre-Defined Service

                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 33

                                              bull device_info_serv [Inout] pointer to device info GATT description handler to beupdated

                                              Return None

                                              Here is a picture of GATT device info service descriptor definition in Host memory

                                              device_info_serv-gtserv_handle = 0device_info_serv-gtserv_uuidtype = AT_BLE_UUID_16device_info_serv-gtserv_uuiduuid[0] = (uint8_t) DIS_SERVICE_UUIDdevice_info_serv-gtserv_uuiduuid[1] = (uint8_t) (DIS_SERVICE_UUID gtgt 8)Characteristic Info for Manufacturer Name Stringdevice_info_serv-gtserv_chars[0]char_val_handle = 0 handle stored here device_info_serv-gtserv_chars[0]uuidtype = AT_BLE_UUID_16device_info_serv-gtserv_chars[0]uuiduuid[0] = (uint8_t) IS_CHAR_MANUFACTURER_NAME_UUID UUID Manufacturer Name String device_info_serv-gtserv_chars[0]uuiduuid[1] = (uint8_t) (DIS_CHAR_MANUFACTURER_NAME_UUID gtgt 8) UUID Manufacturer Name String device_info_serv-gtserv_chars[0]properties = AT_BLE_CHAR_READ Properties memcpy(char_valuemanufacturer_nameDEFAULT_MANUFACTURER_NAMEDIS_CHAR_MANUFACTURER_NAME_INIT_LEN)device_info_serv-gtserv_chars[0]init_value = char_valuemanufacturer_namedevice_info_serv-gtserv_chars[0]value_init_len = DIS_CHAR_MANUFACTURER_NAME_INIT_LENdevice_info_serv-gtserv_chars[0]value_max_len = DIS_CHAR_MANUFACTURER_NAME_MAX_LENif BLE_PAIR_ENABLEdevice_info_serv-gtserv_chars[0]value_permissions = AT_BLE_ATTR_READABLE_REQ_AUTHN_NO_AUTHR permissions elsedevice_info_serv-gtserv_chars[0]value_permissions = AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR permissions endifdevice_info_serv-gtserv_chars[0]user_desc = NULL user defined name device_info_serv-gtserv_chars[0]user_desc_len = 0device_info_serv-gtserv_chars[0]user_desc_max_len = 0device_info_serv-gtserv_chars[0]user_desc_permissions = AT_BLE_ATTR_NO_PERMISSIONS user description permissionsdevice_info_serv-gtserv_chars[0]client_config_permissions = AT_BLE_ATTR_NO_PERMISSIONS client config permissionsdevice_info_serm hdsv-gtserv_chars[0]server_config_permissions = AT_BLE_ATTR_NO_PERMISSIONS server config permissionsdevice_info_serv-gtserv_chars[0]user_desc_handle = 0 user desc handlesdevice_info_serv-gtserv_chars[0]client_config_handle = 0 client config handlesdevice_info_serv-gtserv_chars[0]server_config_handle = 0 server config handlesdevice_info_serv-gtserv_chars[0]presentation_format = NULL presentation format

                                              Note  In case of custom service the above definition initialization must be taken care of by thedeveloper

                                              421 Procedure to Configure and Load Device Info Service1 Include device info service header file (device_infoh) at the beginning of

                                              startup_templatec fileinclude ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehinclude device_infoh

                                              2 Define a device info service handler as global in startup_templatec file Serviceshandlers dis_gatt_service_handler_t dis_service_handler

                                              ATBTLC1000SettingHandling of Pre-Defined Service

                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 34

                                              3 Add dis_init_service and at_ble_primary_service_define functions as called abovethe advertisement start in main routine Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service)dis_init_service (ampdis_service_handler) Define the primary service in the GATT server database if ((dis_primary_service_define (ampdis_service_handler)) = AT_BLE_SUCCESS)printf(Device Information Service definition failed) Start Advertising process start_advertisement()

                                              4 Click to save the project ltCtrl+Sgt and compile the project by pressing button ltF7gt5 Verify that no build error appears in Atmel Studio output window

                                              Figure 4-7 Atmel Studio Output Window

                                              6 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt7 Open ldquoMicrochip SmartConnectrdquo application on Android or iOS device8 Press ltStart Scangt button and connect to peripheral

                                              Note  The device name is a characteristic and contains the name of the device This device namecan be read by the central device to know the name of the device in order to differentiate thedevices This is being set using at_ble_device_name_set()API The device name is set bydefault when ble_device_init is called and the value is pre-defined using BLE_DEVICE_NAMEThe device name can also be sent as part of advertisement payload to be same as the oneconfigured in at_ble_adv_data_set() API It is the responsibility of users to keep the devicename set in advertisement payload the same as that configured inat_ble_device_name_set()

                                              9 The Service must now be visible after pairing with peripheral under Microchip SmartConnectapplication

                                              ATBTLC1000SettingHandling of Pre-Defined Service

                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 35

                                              Figure 4-8 Service List in Microchip SmartConnect Application

                                              Note  If the pairing of ATBTLC1000 with Microchip Smart connect is not successful then removethe pairing information from mobile by selecting ldquoForget Devicerdquo from the mobile settings Thereason for this is that the mobile app stores the previous pairing information but the ATBTLC1000device lost the previous pairing information due to RESET since it was stored on temporary storage(RAM)

                                              10 The serial terminal must display the following log output windowFigure 4-9 Console Log Window

                                              ATBTLC1000SettingHandling of Pre-Defined Service

                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 36

                                              5 Setting up and Handling Custom ServiceThe previous assignment describes the handling of Bluetooth Low Energy SIG defined device infoservice which is the predefined service available in ASF component This assignment describes thecustom service So the service initialization needs to be implemented In the context of customizedenvironment service the following service description is pushed in ATBTLC1000 memory

                                              Figure 5-1 Custom Service

                                              Custom Environment Service Description

                                              bull UUID type ndash Custom UUID (128-bit)bull UUID ndash 1bc5d5a5-0200-a687-e511-3639c1ba5af0

                                              Characteristic 0 (Temperature)

                                              bull User Description ndash Temperaturebull UUID type ndash Custom UUID (128-bit)bull UUID ndash 1bc5d5a5-0200-a687-e511-3639d8ba5af0bull Properties ndash Read Notifybull Value permission ndash No authorization requiredbull Client config permission ndash No permissionbull Server config permission ndash No permission

                                              Note  In this definition UUIDs are generated randomly Custom servicescharacteristics are free to useany 128-bit UUID less than the base UUID There is no reserved space for vendors to use 16-bit or 32-bitUUIDs

                                              With this definition any temperature change is notified to the central The notify mechanism allows thecentral to know when the data changes When notify property of the Client Characteristic ConfigurationDescriptor is enabled by the central and the device writes the new value then this updated value isautomatically sent to the central through a notification The central is not required to send readcharacteristic commands explicitly to the peripheral (GATT server)

                                              To setup and handle the custom environment service in ATBTLC1000 module the following steps areadded to the Host MCU application

                                              bull Configure and load the custom servicebull Update Temperature characteristic and notify to the central devicebull Receive and handle notification from the Host device

                                              ATBTLC1000Setting up and Handling Custom Service

                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 37

                                              Figure 5-2 Custom Service Flowchart

                                              51 Configuring and Loading the Custom Environment ServiceThe ATBTLC1000 Host driver provides the following set of GATT functions that allows it to push andupdate the service descriptions in the ATBTLC1000 SRAM memory

                                              Note  Before starting this assignment be sure to follow the steps mentioned in 2 Creating the Projectand Initializing and 3 Establishing Connection with Central Device

                                              Prototype ndashat_ble_status_t at_ble_primary_service_define(at_ble_uuid_t uuidat_ble_handle_t service_handleat_ble_included_service_t included_service_listuint16_t included_service_countat_ble_characteristic_t charactristic_listuint16_t charactristic_count)

                                              Description ndash Defines a new primary service along with its included services and characteristics inATBTLC1000 module

                                              Parameters

                                              bull Uuid [In] ndash primary service UUIDbull service_handle [Out] ndash service handle is returned herebull included_service_list [In] ndash array of included service referencesbull included_service_count [In] ndash number of elements in included_service_listbull charactristic_list [InOut] ndash an array of characteristics included in the service this array

                                              is update with respective characteristics handlesbull charactristic_count[In] ndash number of elements in charactristic_list

                                              ATBTLC1000Setting up and Handling Custom Service

                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 38

                                              Return ndash Execution Status

                                              bull Characteristics ndashndash Characteristics definition is done through specific array of following

                                              ldquoat_ble_characteristic_trdquo structure instancestypedef structat_ble_handle_t char_val_handle Handler (returned during service initialisation)at_ble_uuid_t uuid Characteristic UUID (type and value)at_ble_char_properties_t propertiesCharac Properties (read write notify)uint8_t init_value initial valueuint16_t value_init_len initial value lengthuint16_t value_max_len value max lengthat_ble_attr_permissions_t value_permissions access authorization and authenticationuint8_t user_desc User descriptionuint16_t user_desc_len User description lengthuint16_t user_desc_max_len User description max lengthat_ble_char_presentation_t presentation_format Presentation formatat_ble_attr_permissions_t user_desc_permissions User description permissionat_ble_attr_permissions_t client_config_permissions client permissionat_ble_attr_permissions_t server_config_permissions server permissionat_ble_handle_t user_desc_handle description handlerat_ble_handle_t client_config_handle Client config handlerat_ble_handle_t server_config_handle Server config handler at_ble_characteristic_t

                                              511 Procedure to Configure and Load Custom Environment Service1 Define the following service UUID and characteristic UUID in startup_templatec file

                                              define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

                                              2 Define the following environment service handler and characteristics variable as global instartup_templatec file Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

                                              3 Add the following service initialization function custom_environment_service_init instartup_templatecvoid custom_environment_service_init(void) at_ble_uuid_t environment_service_uuiduint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUIDuint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperatureenvironment_service_characs[0]user_desc_len = 10environment_service_characs[0]user_desc_max_len = 10environment_service_characs[0]uuidtype = AT_BLE_UUID_128memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16)environment_service_characs[0]properties = AT_BLE_CHAR_READ |AT_BLE_CHAR_NOTIFYenvironment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature valueenvironment_service_characs[0]value_permissions =(AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuidampenvironment_service_handlerNULL0environment_service_characs1)=AT_BLE_SUCCESS)printf(n Assignment 41 Failed to Initialize custom environment service)

                                              ATBTLC1000Setting up and Handling Custom Service

                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 39

                                              elseprintf(n Assignment 41 Initialize custom environment service)

                                              4 Declare and implement the following GATT event callback functioncustom_char_changed_app_event in startup_templatec file If a client (central) enablesnotifications for a server the server (peripheral) receives an AT_BLE_CHARACTERISTIC_CHANGEDevent and this event callback is called Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

                                              5 Declare and implement the following custom_notification_confirmation_handlerfunction in startup_templatec file Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param)at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )paramif (event_param-gtstatus == AT_BLE_SUCCESS)printf(n Assignment 41Notification Successfully sent over the air) else printf(n Assignment 41Sending Notification over the air failed)return AT_BLE_SUCCESS

                                              6 Declare the following GATT server callback structure in startup_templatec file Thisassignment uses two GATT callbacksstatic const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handlercharacteristic_changed = custom_char_changed_app_event

                                              7 Add the following register_gatt_server_callbacks function in startup_templatec toregister GATT server callback for notification confirmation event Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks)ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACKBLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle)if (ble_status = true)printf(nError when Registering ATBTLC1000 callbacks)

                                              8 Add custom_environment_service_init and register_gatt_server_callbacksfunction calls prior to start advertisement in the application main routine to initialize custom serviceand to register the GATT server callbacksint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()

                                              ATBTLC1000Setting up and Handling Custom Service

                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 40

                                              endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks() Custom service init custom_environment_service_init ( ) Register Gatt server callbacks register_gatt_server_callbacks ( ) Start Advertising process start_advertisement()while(true)ble_event_task()

                                              9 Click to save the project ltCtrl+Sgt

                                              10 Compile the project by pressing button ltF7gt11 Verify that no build error appears in the Atmel Studio output window

                                              Figure 5-3 Atmel Studio Output Window

                                              12 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt13 Open the ldquoMicrochip SmartConnectrdquo application on Android or iOS device14 Connect and pair to the peripheral (pass key 123456)15 Custom service must now be visible after pairing with peripheral under Microchip SmartConnect

                                              application

                                              ATBTLC1000Setting up and Handling Custom Service

                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 41

                                              Figure 5-4 Service List in Microchip SmartConnect Application

                                              Note  Custom service is displayed as unknown service in the above figure as this service is not aSIG-defined service

                                              Figure 5-5 General Information

                                              16 Serial terminal client must display the following Log output

                                              ATBTLC1000Setting up and Handling Custom Service

                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 42

                                              Figure 5-6 Log Output Window

                                              52 Updating the Temperature CharacteristicIn the previous assignment the custom Temperature characteristic is defined with a notify attribute Thistype of attribute requires notification to be sent to central when a new characteristic value is availableThe update of any ldquonotifyrdquo characteristic value is based on following interaction between the Host MCUand the ATBTLC1000Figure 5-7 Characteristic Notification

                                              521 Setting a Characteristic Value ( at_ble_characteristic_value_set)Prototype ndashat_ble_status_t at_ble_characteristic_value_setat_ble_handle_t handleuint8_t valueuint16_t len)

                                              Description ndash Sets a characteristic value in ATBTLC1000 memory

                                              Parameters ndash

                                              ATBTLC1000Setting up and Handling Custom Service

                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 43

                                              bull handle [inout] ndash Pointer to Characteristic handle to be changedbull value [in] ndash New valuebull len [in] ndash Value length in bytes

                                              Return ndash Execution Status

                                              522 Sending a Notification (at_ble_notification_send)Prototype ndashat_ble_status_t at_ble_notification_send(at_ble_handle_t conn_handleat_ble_handle_t attr_handle)

                                              Description ndash Sends a Notification

                                              Parameters ndash

                                              bull conn_handle[in] ndash handle of the connection to be notifiedbull attr_handle [in] ndash handle of the attribute originating the notification

                                              Return ndash Execution Status

                                              523 Sending Temperature Information Once in Every 10 Seconds to Central1 Modify the following ldquotimer_callback_fnrdquo callback function from the startup_templatec

                                              filestatic void timer_callback_fn(void)timer_flag = true

                                              2 hw_timer_init()in main routine of startup_templatec initializes the hardware timer3 If a client (Central) enables the notifications for a server the server (Peripheral) receives an

                                              AT_BLE_CHARACTERISTIC_CHANGED event callback then start the periodic 10 second timer forsending the notification Add the following code in previously definedcustom_char_changed_app_event function Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))timer_flag = falsehw_timer_start(10)printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

                                              4 Declare the following Temperature_value global variable in startup_templatec staticuint8_t Temperature_value = 25 as static

                                              5 Add the following send_temperature_notification function in startup_templatec tosend temperature every 10 seconds Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++

                                              ATBTLC1000Setting up and Handling Custom Service

                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 44

                                              if(Temperature_value gt 75)Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set(environment_service_characs[0]char_val_handle(uint8_t )ampTemperature_valuesizeof(Temperature_value))ble_status = at_ble_notification_send(0environment_service_characs[0]char_val_handle)if(ble_status = AT_BLE_SUCCESS)printf(fail to send temperature update notification )

                                              6 Add the following code in main routine to send temperature data every 10 secondswhile (1) ble_event_task()if(connected_flag == true ampamp timer_flag == truetimer_flag = falsesend_temperature_notification()

                                              7 Click to save the project ltCtrl+Sgt

                                              8 Compile the project by pressing the button ltF7gt9 Verify that no build error appears in Atmel Studio output window

                                              Figure 5-8 Atmel Studio Output Window

                                              10 Click to program the project binary on the L21 Xplained XSTK11 Open ldquoMicrochip SmartConnectrdquo Application on Android or iOS device12 Connect and pair to the peripheral (pass key 123456)13 Click NOTIFY to start the notification14 Temperature information in HEX values must be displayed in Microchip SmartConnect application

                                              ATBTLC1000Setting up and Handling Custom Service

                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 45

                                              Figure 5-9 Notification Window

                                              15 Serial terminal must display the following log outputFigure 5-10 Log Output Window

                                              ATBTLC1000Setting up and Handling Custom Service

                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 46

                                              6 Appendix A Software Solution - Pre-Defined SvcThe following is the code implementation for handling of pre-defined service done in 4 SettingHandlingof Pre-Defined Service

                                              - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehinclude device_infoh

                                              volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false Services handlers dis_gatt_service_handler_t dis_service_handler

                                              static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

                                              void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                                              Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                                              Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                                              static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                                              Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void) Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks)

                                              ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 47

                                              ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                              timer callback function static void timer_callback_fn(void) Add timer callback functionality here

                                              void button_cb(void) Add button callback functionality here

                                              int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                                              Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                                              DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks()

                                              Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service) dis_init_service(ampdis_service_handler) Define the primary service in the GATT server database if((dis_primary_service_define(ampdis_service_handler)) = AT_BLE_SUCCESS) printf(Device Information Service definition failed)

                                              Start Advertising process start_advertisement() while(true) ble_event_task()

                                              ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 48

                                              7 Appendix B Software Solution - Custom ServiceThe following is the code implementation for handling of pre-defined service done in 5 Setting up andHandling Custom Service

                                              - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templateh

                                              volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false

                                              static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

                                              define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0

                                              define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

                                              Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

                                              void custom_environment_service_init(void) at_ble_uuid_t environment_service_uuid uint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUID uint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128 memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperature environment_service_characs[0]user_desc_len = 10 environment_service_characs[0]user_desc_max_len = 10 environment_service_characs[0]uuidtype = AT_BLE_UUID_128 memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16) environment_service_characs[0]properties = AT_BLE_CHAR_READ | AT_BLE_CHAR_NOTIFY environment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature value environment_service_characs[0]value_permissions = (AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuid ampenvironment_service_handlerNULL0 environment_service_characs1)=AT_BLE_SUCCESS) printf(n Assignment 41 Failed to Initialize custom environment service) else printf(n Assignment 41 Initialize custom environment service)

                                              Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param) at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )param if (event_param-gtstatus == AT_BLE_SUCCESS) printf(n Assignment 41Notification Successfully sent over the air)

                                              ATBTLC1000Appendix B Software Solution - Custom Service

                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 49

                                              else printf(n Assignment 41Sending Notification over the air failed) return AT_BLE_SUCCESS

                                              static at_ble_status_t custom_char_changed_app_event(void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle -gt char_new_value[0])) timer_flag = false hw_timer_start(10) printf(n Assignment 41Characteristic changed event) return AT_BLE_SUCCESS

                                              static const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handler characteristic_changed = custom_char_changed_app_event

                                              Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                              void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                                              Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                                              Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                                              static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                                              Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void)

                                              ATBTLC1000Appendix B Software Solution - Custom Service

                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 50

                                              Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                              timer callback function static void timer_callback_fn(void) Add timer callback functionality here timer_flag = true

                                              void button_cb(void) Add button callback functionality here

                                              static uint8_t Temperature_value = 25

                                              Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++ if(Temperature_value gt 75) Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set( environment_service_characs[0]char_val_handle (uint8_t )ampTemperature_value sizeof(Temperature_value)) ble_status = at_ble_notification_send(0 environment_service_characs[0]char_val_handle) if(ble_status = AT_BLE_SUCCESS) printf(fail to send temperature update notification )

                                              int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                                              Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                                              DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register Gap ATBTLC1000 Callbacks register_btlc1000_callbacks()

                                              Custom service init custom_environment_service_init()

                                              ATBTLC1000Appendix B Software Solution - Custom Service

                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 51

                                              Register Gatt server callback register_gatt_server_callbacks()

                                              Start Advertising process start_advertisement() while(true) ble_event_task() if(connected_flag == true ampamp timer_flag == true) timer_flag = false send_temperature_notification()

                                              ATBTLC1000Appendix B Software Solution - Custom Service

                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 52

                                              8 Document Revision HistoryRev B - 42018

                                              Section Changes

                                              Document Revised contents to match various Bluetooth Low Energy standard versions

                                              Rev A - 122017

                                              Section Changes

                                              Document Initial release

                                              ATBTLC1000Document Revision History

                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 53

                                              The Microchip Web Site

                                              Microchip provides online support via our web site at httpwwwmicrochipcom This web site is used asa means to make files and information easily available to customers Accessible by using your favoriteInternet browser the web site contains the following information

                                              bull Product Support ndash Data sheets and errata application notes and sample programs designresources userrsquos guides and hardware support documents latest software releases and archivedsoftware

                                              bull General Technical Support ndash Frequently Asked Questions (FAQ) technical support requestsonline discussion groups Microchip consultant program member listing

                                              bull Business of Microchip ndash Product selector and ordering guides latest Microchip press releaseslisting of seminars and events listings of Microchip sales offices distributors and factoryrepresentatives

                                              Customer Change Notification Service

                                              Microchiprsquos customer notification service helps keep customers current on Microchip productsSubscribers will receive e-mail notification whenever there are changes updates revisions or erratarelated to a specified product family or development tool of interest

                                              To register access the Microchip web site at httpwwwmicrochipcom Under ldquoSupportrdquo click onldquoCustomer Change Notificationrdquo and follow the registration instructions

                                              Customer Support

                                              Users of Microchip products can receive assistance through several channels

                                              bull Distributor or Representativebull Local Sales Officebull Field Application Engineer (FAE)bull Technical Support

                                              Customers should contact their distributor representative or Field Application Engineer (FAE) for supportLocal sales offices are also available to help customers A listing of sales offices and locations is includedin the back of this document

                                              Technical support is available through the web site at httpwwwmicrochipcomsupport

                                              Microchip Devices Code Protection Feature

                                              Note the following details of the code protection feature on Microchip devices

                                              bull Microchip products meet the specification contained in their particular Microchip Data Sheetbull Microchip believes that its family of products is one of the most secure families of its kind on the

                                              market today when used in the intended manner and under normal conditionsbull There are dishonest and possibly illegal methods used to breach the code protection feature All of

                                              these methods to our knowledge require using the Microchip products in a manner outside theoperating specifications contained in Microchiprsquos Data Sheets Most likely the person doing so isengaged in theft of intellectual property

                                              bull Microchip is willing to work with the customer who is concerned about the integrity of their code

                                              ATBTLC1000

                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 54

                                              bull Neither Microchip nor any other semiconductor manufacturer can guarantee the security of theircode Code protection does not mean that we are guaranteeing the product as ldquounbreakablerdquo

                                              Code protection is constantly evolving We at Microchip are committed to continuously improving thecode protection features of our products Attempts to break Microchiprsquos code protection feature may be aviolation of the Digital Millennium Copyright Act If such acts allow unauthorized access to your softwareor other copyrighted work you may have a right to sue for relief under that Act

                                              Legal Notice

                                              Information contained in this publication regarding device applications and the like is provided only foryour convenience and may be superseded by updates It is your responsibility to ensure that yourapplication meets with your specifications MICROCHIP MAKES NO REPRESENTATIONS ORWARRANTIES OF ANY KIND WHETHER EXPRESS OR IMPLIED WRITTEN OR ORAL STATUTORYOR OTHERWISE RELATED TO THE INFORMATION INCLUDING BUT NOT LIMITED TO ITSCONDITION QUALITY PERFORMANCE MERCHANTABILITY OR FITNESS FOR PURPOSEMicrochip disclaims all liability arising from this information and its use Use of Microchip devices in lifesupport andor safety applications is entirely at the buyerrsquos risk and the buyer agrees to defendindemnify and hold harmless Microchip from any and all damages claims suits or expenses resultingfrom such use No licenses are conveyed implicitly or otherwise under any Microchip intellectualproperty rights unless otherwise stated

                                              Trademarks

                                              The Microchip name and logo the Microchip logo AnyRate AVR AVR logo AVR Freaks BeaconThingsBitCloud CryptoMemory CryptoRF dsPIC FlashFlex flexPWR Heldo JukeBlox KeeLoq KeeLoq logoKleer LANCheck LINK MD maXStylus maXTouch MediaLB megaAVR MOST MOST logo MPLABOptoLyzer PIC picoPower PICSTART PIC32 logo Prochip Designer QTouch RightTouch SAM-BASpyNIC SST SST Logo SuperFlash tinyAVR UNIO and XMEGA are registered trademarks ofMicrochip Technology Incorporated in the USA and other countries

                                              ClockWorks The Embedded Control Solutions Company EtherSynch Hyper Speed Control HyperLightLoad IntelliMOS mTouch Precision Edge and Quiet-Wire are registered trademarks of MicrochipTechnology Incorporated in the USA

                                              Adjacent Key Suppression AKS Analog-for-the-Digital Age Any Capacitor AnyIn AnyOut BodyComchipKIT chipKIT logo CodeGuard CryptoAuthentication CryptoCompanion CryptoControllerdsPICDEM dsPICDEMnet Dynamic Average Matching DAM ECAN EtherGREEN In-Circuit SerialProgramming ICSP Inter-Chip Connectivity JitterBlocker KleerNet KleerNet logo Mindi MiWimotorBench MPASM MPF MPLAB Certified logo MPLIB MPLINK MultiTRAK NetDetach OmniscientCode Generation PICDEM PICDEMnet PICkit PICtail PureSilicon QMatrix RightTouch logo REALICE Ripple Blocker SAM-ICE Serial Quad IO SMART-IS SQI SuperSwitcher SuperSwitcher II TotalEndurance TSHARC USBCheck VariSense ViewSpan WiperLock Wireless DNA and ZENA aretrademarks of Microchip Technology Incorporated in the USA and other countries

                                              SQTP is a service mark of Microchip Technology Incorporated in the USA

                                              Silicon Storage Technology is a registered trademark of Microchip Technology Inc in other countries

                                              GestIC is a registered trademark of Microchip Technology Germany II GmbH amp Co KG a subsidiary ofMicrochip Technology Inc in other countries

                                              All other trademarks mentioned herein are property of their respective companies

                                              ATBTLC1000

                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 55

                                              copy 2018 Microchip Technology Incorporated Printed in the USA All Rights Reserved

                                              ISBN 978-1-5224-2921-0

                                              Quality Management System Certified by DNV

                                              ISOTS 16949Microchip received ISOTS-169492009 certification for its worldwide headquarters design and waferfabrication facilities in Chandler and Tempe Arizona Gresham Oregon and design centers in Californiaand India The Companyrsquos quality system processes and procedures are for its PICreg MCUs and dsPICreg

                                              DSCs KEELOQreg code hopping devices Serial EEPROMs microperipherals nonvolatile memory andanalog products In addition Microchiprsquos quality system for the design and manufacture of developmentsystems is ISO 90012000 certified

                                              ATBTLC1000

                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 56

                                              AMERICAS ASIAPACIFIC ASIAPACIFIC EUROPECorporate Office2355 West Chandler BlvdChandler AZ 85224-6199Tel 480-792-7200Fax 480-792-7277Technical SupporthttpwwwmicrochipcomsupportWeb AddresswwwmicrochipcomAtlantaDuluth GATel 678-957-9614Fax 678-957-1455Austin TXTel 512-257-3370BostonWestborough MATel 774-760-0087Fax 774-760-0088ChicagoItasca ILTel 630-285-0071Fax 630-285-0075DallasAddison TXTel 972-818-7423Fax 972-818-2924DetroitNovi MITel 248-848-4000Houston TXTel 281-894-5983IndianapolisNoblesville INTel 317-773-8323Fax 317-773-5453Tel 317-536-2380Los AngelesMission Viejo CATel 949-462-9523Fax 949-462-9608Tel 951-273-7800Raleigh NCTel 919-844-7510New York NYTel 631-435-6000San Jose CATel 408-735-9110Tel 408-436-4270Canada - TorontoTel 905-695-1980Fax 905-695-2078

                                              Australia - SydneyTel 61-2-9868-6733China - BeijingTel 86-10-8569-7000China - ChengduTel 86-28-8665-5511China - ChongqingTel 86-23-8980-9588China - DongguanTel 86-769-8702-9880China - GuangzhouTel 86-20-8755-8029China - HangzhouTel 86-571-8792-8115China - Hong Kong SARTel 852-2943-5100China - NanjingTel 86-25-8473-2460China - QingdaoTel 86-532-8502-7355China - ShanghaiTel 86-21-3326-8000China - ShenyangTel 86-24-2334-2829China - ShenzhenTel 86-755-8864-2200China - SuzhouTel 86-186-6233-1526China - WuhanTel 86-27-5980-5300China - XianTel 86-29-8833-7252China - XiamenTel 86-592-2388138China - ZhuhaiTel 86-756-3210040

                                              India - BangaloreTel 91-80-3090-4444India - New DelhiTel 91-11-4160-8631India - PuneTel 91-20-4121-0141Japan - OsakaTel 81-6-6152-7160Japan - TokyoTel 81-3-6880- 3770Korea - DaeguTel 82-53-744-4301Korea - SeoulTel 82-2-554-7200Malaysia - Kuala LumpurTel 60-3-7651-7906Malaysia - PenangTel 60-4-227-8870Philippines - ManilaTel 63-2-634-9065SingaporeTel 65-6334-8870Taiwan - Hsin ChuTel 886-3-577-8366Taiwan - KaohsiungTel 886-7-213-7830Taiwan - TaipeiTel 886-2-2508-8600Thailand - BangkokTel 66-2-694-1351Vietnam - Ho Chi MinhTel 84-28-5448-2100

                                              Austria - WelsTel 43-7242-2244-39Fax 43-7242-2244-393Denmark - CopenhagenTel 45-4450-2828Fax 45-4485-2829Finland - EspooTel 358-9-4520-820France - ParisTel 33-1-69-53-63-20Fax 33-1-69-30-90-79Germany - GarchingTel 49-8931-9700Germany - HaanTel 49-2129-3766400Germany - HeilbronnTel 49-7131-67-3636Germany - KarlsruheTel 49-721-625370Germany - MunichTel 49-89-627-144-0Fax 49-89-627-144-44Germany - RosenheimTel 49-8031-354-560Israel - RarsquoananaTel 972-9-744-7705Italy - MilanTel 39-0331-742611Fax 39-0331-466781Italy - PadovaTel 39-049-7625286Netherlands - DrunenTel 31-416-690399Fax 31-416-690340Norway - TrondheimTel 47-7289-7561Poland - WarsawTel 48-22-3325737Romania - BucharestTel 40-21-407-87-50Spain - MadridTel 34-91-708-08-90Fax 34-91-708-08-91Sweden - GothenbergTel 46-31-704-60-40Sweden - StockholmTel 46-8-5090-4654UK - WokinghamTel 44-118-921-5800Fax 44-118-921-5820

                                              Worldwide Sales and Service

                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 57

                                              • Introduction
                                              • Table of Contents
                                              • 1 Getting Started
                                                • 11 Software Prerequisites
                                                  • 111 Installation Steps of Atmel Studio 7
                                                    • 12 Software Setup
                                                      • 121 Installation of Microchip SmartConnect application on a Mobile device
                                                        • 13 ATBTLC1000 Embedded Firmware
                                                        • 14 ATBTLC1000 Host Software API
                                                        • 15 Hardware Prerequisites
                                                          • 151 SMARTtrade SAM L21 Xplained Pro
                                                          • 152 ATBTLC1000ZR Xplained Pro Extension board
                                                            • 16 Hardware Setup
                                                              • 2 Creating the Project and Initializing
                                                                • 21 Creating Project from ASF
                                                                • 22 Configuring ASF for ATBTLC1000-ZR
                                                                • 23 Compiling and Testing the Project
                                                                  • 3 Establishing Connection with Central Device
                                                                    • 31 Configuring and Starting the Advertisement Process
                                                                      • 311 Flags (AD Type 0x00)
                                                                      • 312 Available Service UUID (AD Types 0x02 to 0x07)
                                                                      • 313 Device Name (AD Types 0x08 to 0x09)
                                                                        • 3131 Setting the Advertisement Payload (ble_advertisement_data_set)
                                                                        • 3132 Starting the Advertisement Process (at_ble_adv_start)
                                                                          • 314 Advertisement Process
                                                                            • 3141 Starting the Advertisement Process
                                                                                • 32 Managing GAP events
                                                                                  • 321 Handling of Connected and Disconnected GAP Events
                                                                                      • 4 SettingHandling of Pre-Defined Service
                                                                                        • 41 Adding Device Info Service Component from ASF Wizard to Project
                                                                                        • 42 Configuring and Loading Device Information Service
                                                                                          • 421 Procedure to Configure and Load Device Info Service
                                                                                              • 5 Setting up and Handling Custom Service
                                                                                                • 51 Configuring and Loading the Custom Environment Service
                                                                                                  • 511 Procedure to Configure and Load Custom Environment Service
                                                                                                    • 52 Updating the Temperature Characteristic
                                                                                                      • 521 Setting a Characteristic Value ( at_ble_characteristic_value_set)
                                                                                                      • 522 Sending a Notification (at_ble_notification_send)
                                                                                                      • 523 Sending Temperature Information Once in Every 10 Seconds to Central
                                                                                                          • 6 Appendix A Software Solution - Pre-Defined Svc
                                                                                                          • 7 Appendix B Software Solution - Custom Service
                                                                                                          • 8 Document Revision History
                                                                                                          • The Microchip Web Site
                                                                                                          • Customer Change Notification Service
                                                                                                          • Customer Support
                                                                                                          • Microchip Devices Code Protection Feature
                                                                                                          • Legal Notice
                                                                                                          • Trademarks
                                                                                                          • Quality Management System Certified by DNV
                                                                                                          • Worldwide Sales and Service

                                                My_SENS AD2 = ldquoMy_SENSrdquo

                                                Note 1 The name of the device is to be changed (AD2 field)2 According to the new name AD2 length must be adapted to new AD2 content

                                                4 Add the following start_advertisement function in startup_templatec prototype for thefunction void start_advertisement (void) also this can be added to avoid warningsvoid start_advertisement (void)printf(n Assignment 21 Start Advertisement)Set advertisement datable_status = at_ble_adv_data_set(adv_datasizeof(adv_data)NULL0)Start Advertisementble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550)if(ble_status = AT_BLE_SUCCESS)printf(n Failed to start advertisement)

                                                5 Start the advertisement process by adding the following highlighted code to the application mainroutineint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Start Advertising process start_advertisement() Register PrimaryIncluded service in case of GATT Server while(true) Write application task

                                                6 Click to save the project ltCtrl+Sgt

                                                7 Click button to compile the project ltF7gt8 Verify that no build error appears in Atmel Studio output window

                                                Figure 3-7 Atmel Studio Output Window

                                                ATBTLC1000Establishing Connection with Central Device

                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 24

                                                9 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt10 Open Microchip SmartConnect Application on Android or iOS device and tap START SCAN button

                                                Note  The device must appear in Microchip SmartConnect Application

                                                Figure 3-8 Microchip SmartConnect Application

                                                11 Terminal must display the following Log outputFigure 3-9 Log Output Window

                                                32 Managing GAP eventsThe management of the Bluetooth connection at the host MCU level is done through reception andhandling of events reported by the ATBTLC1000 These events are generated by ATBTLC1000 GAPGATT and L2CAP layers to notify the host about the ongoing Bluetooth interaction with other devices inits vicinity

                                                ATBTLC1000Establishing Connection with Central Device

                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 25

                                                To manage events coming from the ATBTLC1000 module the host driver must provide able_mgr_events_callback_handler function that allows registration of application callback functionto be executed on each event reported by the ATBTLC1000 module

                                                Prototype ndashbool ble_mgr_events_callback_handler(ble_mgr_event_cb_t event_cb_typeble_mgr_event_t event_typeconst voidble_event_handler)

                                                Description ndash Used by ProfileServiceApplication to register the Bluetooth Low Energy eventsrsquocallbacks

                                                Parameters ndash

                                                event_cb_type ndash types of actions to perform on callbacks can be either

                                                REGISTER_CALL_BACK or

                                                UNREGISTER_CALL_BACKevent_type ndash Any one of the event types can be used

                                                BLE_GAP_EVENT_TYPEBLE_GATT_CLIENT_EVENT_TYPEBLE_GATT_SERVER_EVENT_TYPEBLE_L2CAP_EVENT_TYPEBLE_GATT_HTPT_EVENT_TYPEBLE_DTM_EVENT_TYPEBLE_CUSTOM_EVENT_TYPEble_event_handler ndash pointer to handler list

                                                Structure ble_gap_event_cb_t defines the GAP callbacks Similarly structuresble_gatt_client_event_cb_t and ble_gatt_server_event_cb_t define the callbacks of GATTevents

                                                typedef struct ble_gap_event_cb BLE Undefined events received from ATBTLC1000 which is not handled in Libraryble_event_callback_t undefined BLE scan information contains the peer device scan information Refer ref at_ble_scan_info_tble_event_callback_t scan_info Once the BLE scan timeout or scan stop triggers the scan report event Refer ref at_ble_scan_report_tble_event_callback_t scan_report Advertisement complete event Refer ref at_ble_adv_cmp_evt_tble_event_callback_t advt_cmp Advertisement report in case of advertisement stopped due to advertisement timeout Refer ref at_ble_adv_report_tble_event_callback_t adv_report BLE device own random address changed event Refer ref at_ble_rand_addr_changed_tble_event_callback_t rand_addr_changed BLE connected event device connected to peer device Refer ref at_ble_connected_tble_event_callback_t connected BLE disconnected event device disconnected from peer device Refer ref at_ble_disconnected_tble_event_callback_t disconnected Connection parameter update done on peer device and own device Refer ref at_ble_conn_param_update_done_t

                                                ATBTLC1000Establishing Connection with Central Device

                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 26

                                                ble_event_callback_t conn_parameter_update_done Connection parameter update request from peer device Refer ref at_ble_conn_param_update_request_tble_event_callback_t conn_param_update_request Pair complete event as part of end of pairing process Refer ref at_ble_pair_done_tble_event_callback_t pair_done Pair request event from Central device Refer ref at_ble_pair_request_tble_event_callback_t pair_request Slave security request received from peer Peripheral device Refer ref at_ble_slave_sec_request_tble_event_callback_t slave_sec_request Pair Key request event from Peer central device Refer ref at_ble_pair_key_request_tble_event_callback_t pair_key_request encryption request comes from the peer device Needs to supply the bonding information which is stored earlier ref at_ble_encryption_request_tble_event_callback_t encryption_request encryption status changed event received from SMP once the encryption is started ref at_ble_encryption_status_changed_tble_event_callback_t encryption_status_changed Event triggered once the Resolve random address is resolved using supplied IRKs ref at_ble_resolv_rand_addr_status_tble_event_callback_t resolv_rand_addr_status Event is triggered once the connection signature information indication received ref at_ble_sign_counter_tble_event_callback_t sign_counters_ind Peer attribute information indication received Event ref at_ble_peer_att_info_ind_tble_event_callback_t peer_att_info_ind Peer device channel map received indication ref at_ble_channel_map_tble_event_callback_t con_channel_map_indble_gap_event_cb_t

                                                Note  Callback definition is application-specific If the application layer requires a specific event callbackthen the specific member of the structure is to be assigned with the address of the callback function

                                                In this assignment two callback functions on Connected and Disconnected GAP events are usedThis allows the application to restart the advertising process on Disconnect manage connectioninformation and startstop of sensor data update

                                                321 Handling of Connected and Disconnected GAP Events1 Open the startup_templatec file2 Define the following software flags as global variables in startup_templatec file volatile

                                                bool timer_flag = false and volatile bool connected_flag = false3 Declare and implement the following ble_connected_cb function in the

                                                startup_templatec file Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param)printf(n Assignment 22 Application connected )connected_flag = trueALL_UNUSED(param)return AT_BLE_SUCCESS

                                                4 Declare and implement the following ble_disconnected_cb function instartup_templatec file Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param)printf(n Assignment 22 Application disconnected )connected_flag = falsestart_advertisement()ALL_UNUSED(param)return AT_BLE_SUCCESS

                                                ATBTLC1000Establishing Connection with Central Device

                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 27

                                                5 Declare the following static GAP callback structure in ldquostartup_templatecrdquo filestatic const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTEDdisconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                                                6 Add the following register_btlc1000_callbacks function in startup_templatec Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void) Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks)ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACKBLE_GAP_EVENT_TYPEampapp_gap_handle)if (ble_status = true)printf(nError when Registering ATBTLC1000 callbacks)

                                                7 Add the register_btlc1000_callbacks function call prior to start advertisement in theapplication main routineint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Gap Callbacks register_btlc1000_callbacks ( ) Start Advertising process start_advertisement() Register PrimaryIncluded service in case of GATT Server while(true) Write application task

                                                8 Add the ble_event_task function call in the project main loop to handle the different incomingevents from ATBTLC1000while(true)ble_event_task()

                                                9 Press button ltF7gt to compile the project and verify that no build error appear in the AtmelStudio output window

                                                ATBTLC1000Establishing Connection with Central Device

                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 28

                                                Figure 3-10 Atmel Studio Output Window

                                                10 Click ldquo rdquo to save the project ltCtrl+Sgt

                                                11 Click ldquo rdquo to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt and checkcorrect initialization of the ATBTLC1000

                                                12 Open the Microchip SmartConnect application on Androidtrade or iOS device13 Press the ltStart Scangt button and pair peripherals by selecting them in the device list (pass key

                                                123456)Note 

                                                1 Pairing event handling is carried out by ble_managerc Refer toble_pair_key_request_handler() for code implementation The default pass key of123456 is also fixed inside this function This can be changed here

                                                Figure 3-11 Console Log Window

                                                Note  After peripheral pairing no services information are displayed in Microchip SmartConnectapplication as no service is currently defined and started on peripheral side

                                                ATBTLC1000Establishing Connection with Central Device

                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 29

                                                4 SettingHandling of Pre-Defined ServiceThe management of services are done in the GATT layer of the ATBTLC1000 ROM coded Bluetooth LowEnergy Stack The GATT transactions are based on high-level nested objects called Profiles Servicesand Characteristics stored in SRAM memory of ATBTLC1000 device This assignment adds the pre-defined service of information service from ASF library

                                                Figure 4-1 ATBTLC1000 GATT Layers

                                                bull ProfilesProfiles are not available in the Bluetooth Low Energy peripheral they are simply a pre-definedcollection of services that have been compiled by either the Bluetooth SIG (adopted GATT basedprofile) or by the application developer (custom profiles) For example the Heart Rate Profilecombines the Heart Rate Service and the Device Information Service

                                                Note  The complete list of officially adopted GATT-based profiles is available on the BluetoothDeveloper Portal

                                                bull ServicesA service is a collection of data and associated behaviors which accomplish a particular function orfeature of a device or portions of a device A service may reference other primary or secondaryservices andor a set of characteristics that make up the service Each service distinguishes itselffrom other services by means of a unique numeric ID called as UUID which can be either 16-bit(for officially adopted Bluetooth Low Energy Services) or 128-bit (for custom services)

                                                Note  A full list of officially adopted services and their UUID are seen on the Bluetooth DeveloperPortal

                                                bull CharacteristicsA characteristic is the lowest level concept in GATT transactions It contains a single data point withdifferent attributes such as notify read or write capabilities Similar to Services each characteristiccan be distinguished by a SIG-defined adopted UUID (16-bit) or custom (128-bit) UUID This UUIDensures interoperability across Bluetooth Low Energy devices The characteristics are important tointeract with in a Bluetooth Low Energy network In addition to standard UUID the custom UUID isused in case of specific application When characteristics with custom UUID are used in a devicethen it will be interoperable only with those devices that support these characteristics with customUUID

                                                ATBTLC1000SettingHandling of Pre-Defined Service

                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 30

                                                In this assignment the following steps are added to the Host MCU application to set up and handle adevice information service within the ATBTLC1000 module The following steps are added to the startupproject

                                                bull Adding device info service component from ASFbull Configuring and loading the service

                                                Figure 4-2 Device Information Service

                                                41 Adding Device Info Service Component from ASF Wizard to ProjectTo use the ldquoofficially adopted GATT-based profilesrdquo from SIG ASF provides Bluetooth Low Energy servicecomponents including init functions that pre-define services in Host memory

                                                Note  Before starting this assignment be sure to follow the steps mentioned in 2 Creating the Projectand Initializing and 3 Establishing Connection with Central Device

                                                1 Click ASF gt ASF Wizard2 Search for ldquoBLE-Device Information Servicesrdquo and then click Add

                                                ATBTLC1000SettingHandling of Pre-Defined Service

                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 31

                                                Figure 4-3 Available Modules

                                                3 Now ldquoBLE-Device Information Servicesrdquo (component) appears in ldquoSelected ModulesrdquoFigure 4-4 Selected Modules

                                                4 Click Apply to add the component to the projectFigure 4-5 Adding the Modules to Project

                                                5 The ldquoDevice Information Servicerdquo component is added to the project and is confirmed bydevice_information folder added in Solution Explorer

                                                ATBTLC1000SettingHandling of Pre-Defined Service

                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 32

                                                Figure 4-6 Device Information Service Added to Project

                                                42 Configuring and Loading Device Information ServiceThe ATBTLC1000 Host driver provides a set of GATT functions that allows storing and updating theservices in ATBTLC1000 memories

                                                Prototype at_ble_status_t at_ble_primary_service_define(at_ble_uuid_t uuidat_ble_handle_t service_handleat_ble_included_service_t included_service_listuint16_t included_service_countat_ble_characteristic_t charactristic_listuint16_t charactristic_count)

                                                Description Defines a new primary service along with its included services and characteristics inATBTLC1000

                                                Parameters

                                                bull Uuid [In] ndash primary service UUIDbull service_handle [Out] ndash Service handle is returned herebull included_service_list [In] ndash an array of included service referencesbull included_service_count [In] ndash number of elements in included_service_listbull charactristic_list [InOut] ndash an array of characteristics included in the service this array

                                                is updated with respective characteristics handlesbull charactristic_count[In] ndash number of elements in charactristic_list

                                                Return Execution Status

                                                This function requires an argument as GATT description structure of the service that is implemented Thepreviously added Device Info service component provides Bluetooth Low Energy service middlewareincluding the init functions that predefine the services See below ldquodis_init_servicerdquo from device infoBLE service (device_infohc)

                                                Prototype ndash void dis_init_service(dis_gatt_service_handler_t device_info_serv)Description ndash Initialize the device information service handler in the host MCU memory

                                                Parameters ndash

                                                ATBTLC1000SettingHandling of Pre-Defined Service

                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 33

                                                bull device_info_serv [Inout] pointer to device info GATT description handler to beupdated

                                                Return None

                                                Here is a picture of GATT device info service descriptor definition in Host memory

                                                device_info_serv-gtserv_handle = 0device_info_serv-gtserv_uuidtype = AT_BLE_UUID_16device_info_serv-gtserv_uuiduuid[0] = (uint8_t) DIS_SERVICE_UUIDdevice_info_serv-gtserv_uuiduuid[1] = (uint8_t) (DIS_SERVICE_UUID gtgt 8)Characteristic Info for Manufacturer Name Stringdevice_info_serv-gtserv_chars[0]char_val_handle = 0 handle stored here device_info_serv-gtserv_chars[0]uuidtype = AT_BLE_UUID_16device_info_serv-gtserv_chars[0]uuiduuid[0] = (uint8_t) IS_CHAR_MANUFACTURER_NAME_UUID UUID Manufacturer Name String device_info_serv-gtserv_chars[0]uuiduuid[1] = (uint8_t) (DIS_CHAR_MANUFACTURER_NAME_UUID gtgt 8) UUID Manufacturer Name String device_info_serv-gtserv_chars[0]properties = AT_BLE_CHAR_READ Properties memcpy(char_valuemanufacturer_nameDEFAULT_MANUFACTURER_NAMEDIS_CHAR_MANUFACTURER_NAME_INIT_LEN)device_info_serv-gtserv_chars[0]init_value = char_valuemanufacturer_namedevice_info_serv-gtserv_chars[0]value_init_len = DIS_CHAR_MANUFACTURER_NAME_INIT_LENdevice_info_serv-gtserv_chars[0]value_max_len = DIS_CHAR_MANUFACTURER_NAME_MAX_LENif BLE_PAIR_ENABLEdevice_info_serv-gtserv_chars[0]value_permissions = AT_BLE_ATTR_READABLE_REQ_AUTHN_NO_AUTHR permissions elsedevice_info_serv-gtserv_chars[0]value_permissions = AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR permissions endifdevice_info_serv-gtserv_chars[0]user_desc = NULL user defined name device_info_serv-gtserv_chars[0]user_desc_len = 0device_info_serv-gtserv_chars[0]user_desc_max_len = 0device_info_serv-gtserv_chars[0]user_desc_permissions = AT_BLE_ATTR_NO_PERMISSIONS user description permissionsdevice_info_serv-gtserv_chars[0]client_config_permissions = AT_BLE_ATTR_NO_PERMISSIONS client config permissionsdevice_info_serm hdsv-gtserv_chars[0]server_config_permissions = AT_BLE_ATTR_NO_PERMISSIONS server config permissionsdevice_info_serv-gtserv_chars[0]user_desc_handle = 0 user desc handlesdevice_info_serv-gtserv_chars[0]client_config_handle = 0 client config handlesdevice_info_serv-gtserv_chars[0]server_config_handle = 0 server config handlesdevice_info_serv-gtserv_chars[0]presentation_format = NULL presentation format

                                                Note  In case of custom service the above definition initialization must be taken care of by thedeveloper

                                                421 Procedure to Configure and Load Device Info Service1 Include device info service header file (device_infoh) at the beginning of

                                                startup_templatec fileinclude ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehinclude device_infoh

                                                2 Define a device info service handler as global in startup_templatec file Serviceshandlers dis_gatt_service_handler_t dis_service_handler

                                                ATBTLC1000SettingHandling of Pre-Defined Service

                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 34

                                                3 Add dis_init_service and at_ble_primary_service_define functions as called abovethe advertisement start in main routine Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service)dis_init_service (ampdis_service_handler) Define the primary service in the GATT server database if ((dis_primary_service_define (ampdis_service_handler)) = AT_BLE_SUCCESS)printf(Device Information Service definition failed) Start Advertising process start_advertisement()

                                                4 Click to save the project ltCtrl+Sgt and compile the project by pressing button ltF7gt5 Verify that no build error appears in Atmel Studio output window

                                                Figure 4-7 Atmel Studio Output Window

                                                6 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt7 Open ldquoMicrochip SmartConnectrdquo application on Android or iOS device8 Press ltStart Scangt button and connect to peripheral

                                                Note  The device name is a characteristic and contains the name of the device This device namecan be read by the central device to know the name of the device in order to differentiate thedevices This is being set using at_ble_device_name_set()API The device name is set bydefault when ble_device_init is called and the value is pre-defined using BLE_DEVICE_NAMEThe device name can also be sent as part of advertisement payload to be same as the oneconfigured in at_ble_adv_data_set() API It is the responsibility of users to keep the devicename set in advertisement payload the same as that configured inat_ble_device_name_set()

                                                9 The Service must now be visible after pairing with peripheral under Microchip SmartConnectapplication

                                                ATBTLC1000SettingHandling of Pre-Defined Service

                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 35

                                                Figure 4-8 Service List in Microchip SmartConnect Application

                                                Note  If the pairing of ATBTLC1000 with Microchip Smart connect is not successful then removethe pairing information from mobile by selecting ldquoForget Devicerdquo from the mobile settings Thereason for this is that the mobile app stores the previous pairing information but the ATBTLC1000device lost the previous pairing information due to RESET since it was stored on temporary storage(RAM)

                                                10 The serial terminal must display the following log output windowFigure 4-9 Console Log Window

                                                ATBTLC1000SettingHandling of Pre-Defined Service

                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 36

                                                5 Setting up and Handling Custom ServiceThe previous assignment describes the handling of Bluetooth Low Energy SIG defined device infoservice which is the predefined service available in ASF component This assignment describes thecustom service So the service initialization needs to be implemented In the context of customizedenvironment service the following service description is pushed in ATBTLC1000 memory

                                                Figure 5-1 Custom Service

                                                Custom Environment Service Description

                                                bull UUID type ndash Custom UUID (128-bit)bull UUID ndash 1bc5d5a5-0200-a687-e511-3639c1ba5af0

                                                Characteristic 0 (Temperature)

                                                bull User Description ndash Temperaturebull UUID type ndash Custom UUID (128-bit)bull UUID ndash 1bc5d5a5-0200-a687-e511-3639d8ba5af0bull Properties ndash Read Notifybull Value permission ndash No authorization requiredbull Client config permission ndash No permissionbull Server config permission ndash No permission

                                                Note  In this definition UUIDs are generated randomly Custom servicescharacteristics are free to useany 128-bit UUID less than the base UUID There is no reserved space for vendors to use 16-bit or 32-bitUUIDs

                                                With this definition any temperature change is notified to the central The notify mechanism allows thecentral to know when the data changes When notify property of the Client Characteristic ConfigurationDescriptor is enabled by the central and the device writes the new value then this updated value isautomatically sent to the central through a notification The central is not required to send readcharacteristic commands explicitly to the peripheral (GATT server)

                                                To setup and handle the custom environment service in ATBTLC1000 module the following steps areadded to the Host MCU application

                                                bull Configure and load the custom servicebull Update Temperature characteristic and notify to the central devicebull Receive and handle notification from the Host device

                                                ATBTLC1000Setting up and Handling Custom Service

                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 37

                                                Figure 5-2 Custom Service Flowchart

                                                51 Configuring and Loading the Custom Environment ServiceThe ATBTLC1000 Host driver provides the following set of GATT functions that allows it to push andupdate the service descriptions in the ATBTLC1000 SRAM memory

                                                Note  Before starting this assignment be sure to follow the steps mentioned in 2 Creating the Projectand Initializing and 3 Establishing Connection with Central Device

                                                Prototype ndashat_ble_status_t at_ble_primary_service_define(at_ble_uuid_t uuidat_ble_handle_t service_handleat_ble_included_service_t included_service_listuint16_t included_service_countat_ble_characteristic_t charactristic_listuint16_t charactristic_count)

                                                Description ndash Defines a new primary service along with its included services and characteristics inATBTLC1000 module

                                                Parameters

                                                bull Uuid [In] ndash primary service UUIDbull service_handle [Out] ndash service handle is returned herebull included_service_list [In] ndash array of included service referencesbull included_service_count [In] ndash number of elements in included_service_listbull charactristic_list [InOut] ndash an array of characteristics included in the service this array

                                                is update with respective characteristics handlesbull charactristic_count[In] ndash number of elements in charactristic_list

                                                ATBTLC1000Setting up and Handling Custom Service

                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 38

                                                Return ndash Execution Status

                                                bull Characteristics ndashndash Characteristics definition is done through specific array of following

                                                ldquoat_ble_characteristic_trdquo structure instancestypedef structat_ble_handle_t char_val_handle Handler (returned during service initialisation)at_ble_uuid_t uuid Characteristic UUID (type and value)at_ble_char_properties_t propertiesCharac Properties (read write notify)uint8_t init_value initial valueuint16_t value_init_len initial value lengthuint16_t value_max_len value max lengthat_ble_attr_permissions_t value_permissions access authorization and authenticationuint8_t user_desc User descriptionuint16_t user_desc_len User description lengthuint16_t user_desc_max_len User description max lengthat_ble_char_presentation_t presentation_format Presentation formatat_ble_attr_permissions_t user_desc_permissions User description permissionat_ble_attr_permissions_t client_config_permissions client permissionat_ble_attr_permissions_t server_config_permissions server permissionat_ble_handle_t user_desc_handle description handlerat_ble_handle_t client_config_handle Client config handlerat_ble_handle_t server_config_handle Server config handler at_ble_characteristic_t

                                                511 Procedure to Configure and Load Custom Environment Service1 Define the following service UUID and characteristic UUID in startup_templatec file

                                                define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

                                                2 Define the following environment service handler and characteristics variable as global instartup_templatec file Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

                                                3 Add the following service initialization function custom_environment_service_init instartup_templatecvoid custom_environment_service_init(void) at_ble_uuid_t environment_service_uuiduint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUIDuint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperatureenvironment_service_characs[0]user_desc_len = 10environment_service_characs[0]user_desc_max_len = 10environment_service_characs[0]uuidtype = AT_BLE_UUID_128memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16)environment_service_characs[0]properties = AT_BLE_CHAR_READ |AT_BLE_CHAR_NOTIFYenvironment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature valueenvironment_service_characs[0]value_permissions =(AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuidampenvironment_service_handlerNULL0environment_service_characs1)=AT_BLE_SUCCESS)printf(n Assignment 41 Failed to Initialize custom environment service)

                                                ATBTLC1000Setting up and Handling Custom Service

                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 39

                                                elseprintf(n Assignment 41 Initialize custom environment service)

                                                4 Declare and implement the following GATT event callback functioncustom_char_changed_app_event in startup_templatec file If a client (central) enablesnotifications for a server the server (peripheral) receives an AT_BLE_CHARACTERISTIC_CHANGEDevent and this event callback is called Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

                                                5 Declare and implement the following custom_notification_confirmation_handlerfunction in startup_templatec file Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param)at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )paramif (event_param-gtstatus == AT_BLE_SUCCESS)printf(n Assignment 41Notification Successfully sent over the air) else printf(n Assignment 41Sending Notification over the air failed)return AT_BLE_SUCCESS

                                                6 Declare the following GATT server callback structure in startup_templatec file Thisassignment uses two GATT callbacksstatic const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handlercharacteristic_changed = custom_char_changed_app_event

                                                7 Add the following register_gatt_server_callbacks function in startup_templatec toregister GATT server callback for notification confirmation event Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks)ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACKBLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle)if (ble_status = true)printf(nError when Registering ATBTLC1000 callbacks)

                                                8 Add custom_environment_service_init and register_gatt_server_callbacksfunction calls prior to start advertisement in the application main routine to initialize custom serviceand to register the GATT server callbacksint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()

                                                ATBTLC1000Setting up and Handling Custom Service

                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 40

                                                endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks() Custom service init custom_environment_service_init ( ) Register Gatt server callbacks register_gatt_server_callbacks ( ) Start Advertising process start_advertisement()while(true)ble_event_task()

                                                9 Click to save the project ltCtrl+Sgt

                                                10 Compile the project by pressing button ltF7gt11 Verify that no build error appears in the Atmel Studio output window

                                                Figure 5-3 Atmel Studio Output Window

                                                12 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt13 Open the ldquoMicrochip SmartConnectrdquo application on Android or iOS device14 Connect and pair to the peripheral (pass key 123456)15 Custom service must now be visible after pairing with peripheral under Microchip SmartConnect

                                                application

                                                ATBTLC1000Setting up and Handling Custom Service

                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 41

                                                Figure 5-4 Service List in Microchip SmartConnect Application

                                                Note  Custom service is displayed as unknown service in the above figure as this service is not aSIG-defined service

                                                Figure 5-5 General Information

                                                16 Serial terminal client must display the following Log output

                                                ATBTLC1000Setting up and Handling Custom Service

                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 42

                                                Figure 5-6 Log Output Window

                                                52 Updating the Temperature CharacteristicIn the previous assignment the custom Temperature characteristic is defined with a notify attribute Thistype of attribute requires notification to be sent to central when a new characteristic value is availableThe update of any ldquonotifyrdquo characteristic value is based on following interaction between the Host MCUand the ATBTLC1000Figure 5-7 Characteristic Notification

                                                521 Setting a Characteristic Value ( at_ble_characteristic_value_set)Prototype ndashat_ble_status_t at_ble_characteristic_value_setat_ble_handle_t handleuint8_t valueuint16_t len)

                                                Description ndash Sets a characteristic value in ATBTLC1000 memory

                                                Parameters ndash

                                                ATBTLC1000Setting up and Handling Custom Service

                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 43

                                                bull handle [inout] ndash Pointer to Characteristic handle to be changedbull value [in] ndash New valuebull len [in] ndash Value length in bytes

                                                Return ndash Execution Status

                                                522 Sending a Notification (at_ble_notification_send)Prototype ndashat_ble_status_t at_ble_notification_send(at_ble_handle_t conn_handleat_ble_handle_t attr_handle)

                                                Description ndash Sends a Notification

                                                Parameters ndash

                                                bull conn_handle[in] ndash handle of the connection to be notifiedbull attr_handle [in] ndash handle of the attribute originating the notification

                                                Return ndash Execution Status

                                                523 Sending Temperature Information Once in Every 10 Seconds to Central1 Modify the following ldquotimer_callback_fnrdquo callback function from the startup_templatec

                                                filestatic void timer_callback_fn(void)timer_flag = true

                                                2 hw_timer_init()in main routine of startup_templatec initializes the hardware timer3 If a client (Central) enables the notifications for a server the server (Peripheral) receives an

                                                AT_BLE_CHARACTERISTIC_CHANGED event callback then start the periodic 10 second timer forsending the notification Add the following code in previously definedcustom_char_changed_app_event function Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))timer_flag = falsehw_timer_start(10)printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

                                                4 Declare the following Temperature_value global variable in startup_templatec staticuint8_t Temperature_value = 25 as static

                                                5 Add the following send_temperature_notification function in startup_templatec tosend temperature every 10 seconds Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++

                                                ATBTLC1000Setting up and Handling Custom Service

                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 44

                                                if(Temperature_value gt 75)Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set(environment_service_characs[0]char_val_handle(uint8_t )ampTemperature_valuesizeof(Temperature_value))ble_status = at_ble_notification_send(0environment_service_characs[0]char_val_handle)if(ble_status = AT_BLE_SUCCESS)printf(fail to send temperature update notification )

                                                6 Add the following code in main routine to send temperature data every 10 secondswhile (1) ble_event_task()if(connected_flag == true ampamp timer_flag == truetimer_flag = falsesend_temperature_notification()

                                                7 Click to save the project ltCtrl+Sgt

                                                8 Compile the project by pressing the button ltF7gt9 Verify that no build error appears in Atmel Studio output window

                                                Figure 5-8 Atmel Studio Output Window

                                                10 Click to program the project binary on the L21 Xplained XSTK11 Open ldquoMicrochip SmartConnectrdquo Application on Android or iOS device12 Connect and pair to the peripheral (pass key 123456)13 Click NOTIFY to start the notification14 Temperature information in HEX values must be displayed in Microchip SmartConnect application

                                                ATBTLC1000Setting up and Handling Custom Service

                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 45

                                                Figure 5-9 Notification Window

                                                15 Serial terminal must display the following log outputFigure 5-10 Log Output Window

                                                ATBTLC1000Setting up and Handling Custom Service

                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 46

                                                6 Appendix A Software Solution - Pre-Defined SvcThe following is the code implementation for handling of pre-defined service done in 4 SettingHandlingof Pre-Defined Service

                                                - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehinclude device_infoh

                                                volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false Services handlers dis_gatt_service_handler_t dis_service_handler

                                                static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

                                                void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                                                Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                                                Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                                                static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                                                Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void) Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks)

                                                ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 47

                                                ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                                timer callback function static void timer_callback_fn(void) Add timer callback functionality here

                                                void button_cb(void) Add button callback functionality here

                                                int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                                                Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                                                DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks()

                                                Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service) dis_init_service(ampdis_service_handler) Define the primary service in the GATT server database if((dis_primary_service_define(ampdis_service_handler)) = AT_BLE_SUCCESS) printf(Device Information Service definition failed)

                                                Start Advertising process start_advertisement() while(true) ble_event_task()

                                                ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 48

                                                7 Appendix B Software Solution - Custom ServiceThe following is the code implementation for handling of pre-defined service done in 5 Setting up andHandling Custom Service

                                                - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templateh

                                                volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false

                                                static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

                                                define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0

                                                define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

                                                Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

                                                void custom_environment_service_init(void) at_ble_uuid_t environment_service_uuid uint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUID uint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128 memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperature environment_service_characs[0]user_desc_len = 10 environment_service_characs[0]user_desc_max_len = 10 environment_service_characs[0]uuidtype = AT_BLE_UUID_128 memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16) environment_service_characs[0]properties = AT_BLE_CHAR_READ | AT_BLE_CHAR_NOTIFY environment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature value environment_service_characs[0]value_permissions = (AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuid ampenvironment_service_handlerNULL0 environment_service_characs1)=AT_BLE_SUCCESS) printf(n Assignment 41 Failed to Initialize custom environment service) else printf(n Assignment 41 Initialize custom environment service)

                                                Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param) at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )param if (event_param-gtstatus == AT_BLE_SUCCESS) printf(n Assignment 41Notification Successfully sent over the air)

                                                ATBTLC1000Appendix B Software Solution - Custom Service

                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 49

                                                else printf(n Assignment 41Sending Notification over the air failed) return AT_BLE_SUCCESS

                                                static at_ble_status_t custom_char_changed_app_event(void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle -gt char_new_value[0])) timer_flag = false hw_timer_start(10) printf(n Assignment 41Characteristic changed event) return AT_BLE_SUCCESS

                                                static const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handler characteristic_changed = custom_char_changed_app_event

                                                Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                                void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                                                Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                                                Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                                                static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                                                Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void)

                                                ATBTLC1000Appendix B Software Solution - Custom Service

                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 50

                                                Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                                timer callback function static void timer_callback_fn(void) Add timer callback functionality here timer_flag = true

                                                void button_cb(void) Add button callback functionality here

                                                static uint8_t Temperature_value = 25

                                                Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++ if(Temperature_value gt 75) Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set( environment_service_characs[0]char_val_handle (uint8_t )ampTemperature_value sizeof(Temperature_value)) ble_status = at_ble_notification_send(0 environment_service_characs[0]char_val_handle) if(ble_status = AT_BLE_SUCCESS) printf(fail to send temperature update notification )

                                                int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                                                Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                                                DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register Gap ATBTLC1000 Callbacks register_btlc1000_callbacks()

                                                Custom service init custom_environment_service_init()

                                                ATBTLC1000Appendix B Software Solution - Custom Service

                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 51

                                                Register Gatt server callback register_gatt_server_callbacks()

                                                Start Advertising process start_advertisement() while(true) ble_event_task() if(connected_flag == true ampamp timer_flag == true) timer_flag = false send_temperature_notification()

                                                ATBTLC1000Appendix B Software Solution - Custom Service

                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 52

                                                8 Document Revision HistoryRev B - 42018

                                                Section Changes

                                                Document Revised contents to match various Bluetooth Low Energy standard versions

                                                Rev A - 122017

                                                Section Changes

                                                Document Initial release

                                                ATBTLC1000Document Revision History

                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 53

                                                The Microchip Web Site

                                                Microchip provides online support via our web site at httpwwwmicrochipcom This web site is used asa means to make files and information easily available to customers Accessible by using your favoriteInternet browser the web site contains the following information

                                                bull Product Support ndash Data sheets and errata application notes and sample programs designresources userrsquos guides and hardware support documents latest software releases and archivedsoftware

                                                bull General Technical Support ndash Frequently Asked Questions (FAQ) technical support requestsonline discussion groups Microchip consultant program member listing

                                                bull Business of Microchip ndash Product selector and ordering guides latest Microchip press releaseslisting of seminars and events listings of Microchip sales offices distributors and factoryrepresentatives

                                                Customer Change Notification Service

                                                Microchiprsquos customer notification service helps keep customers current on Microchip productsSubscribers will receive e-mail notification whenever there are changes updates revisions or erratarelated to a specified product family or development tool of interest

                                                To register access the Microchip web site at httpwwwmicrochipcom Under ldquoSupportrdquo click onldquoCustomer Change Notificationrdquo and follow the registration instructions

                                                Customer Support

                                                Users of Microchip products can receive assistance through several channels

                                                bull Distributor or Representativebull Local Sales Officebull Field Application Engineer (FAE)bull Technical Support

                                                Customers should contact their distributor representative or Field Application Engineer (FAE) for supportLocal sales offices are also available to help customers A listing of sales offices and locations is includedin the back of this document

                                                Technical support is available through the web site at httpwwwmicrochipcomsupport

                                                Microchip Devices Code Protection Feature

                                                Note the following details of the code protection feature on Microchip devices

                                                bull Microchip products meet the specification contained in their particular Microchip Data Sheetbull Microchip believes that its family of products is one of the most secure families of its kind on the

                                                market today when used in the intended manner and under normal conditionsbull There are dishonest and possibly illegal methods used to breach the code protection feature All of

                                                these methods to our knowledge require using the Microchip products in a manner outside theoperating specifications contained in Microchiprsquos Data Sheets Most likely the person doing so isengaged in theft of intellectual property

                                                bull Microchip is willing to work with the customer who is concerned about the integrity of their code

                                                ATBTLC1000

                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 54

                                                bull Neither Microchip nor any other semiconductor manufacturer can guarantee the security of theircode Code protection does not mean that we are guaranteeing the product as ldquounbreakablerdquo

                                                Code protection is constantly evolving We at Microchip are committed to continuously improving thecode protection features of our products Attempts to break Microchiprsquos code protection feature may be aviolation of the Digital Millennium Copyright Act If such acts allow unauthorized access to your softwareor other copyrighted work you may have a right to sue for relief under that Act

                                                Legal Notice

                                                Information contained in this publication regarding device applications and the like is provided only foryour convenience and may be superseded by updates It is your responsibility to ensure that yourapplication meets with your specifications MICROCHIP MAKES NO REPRESENTATIONS ORWARRANTIES OF ANY KIND WHETHER EXPRESS OR IMPLIED WRITTEN OR ORAL STATUTORYOR OTHERWISE RELATED TO THE INFORMATION INCLUDING BUT NOT LIMITED TO ITSCONDITION QUALITY PERFORMANCE MERCHANTABILITY OR FITNESS FOR PURPOSEMicrochip disclaims all liability arising from this information and its use Use of Microchip devices in lifesupport andor safety applications is entirely at the buyerrsquos risk and the buyer agrees to defendindemnify and hold harmless Microchip from any and all damages claims suits or expenses resultingfrom such use No licenses are conveyed implicitly or otherwise under any Microchip intellectualproperty rights unless otherwise stated

                                                Trademarks

                                                The Microchip name and logo the Microchip logo AnyRate AVR AVR logo AVR Freaks BeaconThingsBitCloud CryptoMemory CryptoRF dsPIC FlashFlex flexPWR Heldo JukeBlox KeeLoq KeeLoq logoKleer LANCheck LINK MD maXStylus maXTouch MediaLB megaAVR MOST MOST logo MPLABOptoLyzer PIC picoPower PICSTART PIC32 logo Prochip Designer QTouch RightTouch SAM-BASpyNIC SST SST Logo SuperFlash tinyAVR UNIO and XMEGA are registered trademarks ofMicrochip Technology Incorporated in the USA and other countries

                                                ClockWorks The Embedded Control Solutions Company EtherSynch Hyper Speed Control HyperLightLoad IntelliMOS mTouch Precision Edge and Quiet-Wire are registered trademarks of MicrochipTechnology Incorporated in the USA

                                                Adjacent Key Suppression AKS Analog-for-the-Digital Age Any Capacitor AnyIn AnyOut BodyComchipKIT chipKIT logo CodeGuard CryptoAuthentication CryptoCompanion CryptoControllerdsPICDEM dsPICDEMnet Dynamic Average Matching DAM ECAN EtherGREEN In-Circuit SerialProgramming ICSP Inter-Chip Connectivity JitterBlocker KleerNet KleerNet logo Mindi MiWimotorBench MPASM MPF MPLAB Certified logo MPLIB MPLINK MultiTRAK NetDetach OmniscientCode Generation PICDEM PICDEMnet PICkit PICtail PureSilicon QMatrix RightTouch logo REALICE Ripple Blocker SAM-ICE Serial Quad IO SMART-IS SQI SuperSwitcher SuperSwitcher II TotalEndurance TSHARC USBCheck VariSense ViewSpan WiperLock Wireless DNA and ZENA aretrademarks of Microchip Technology Incorporated in the USA and other countries

                                                SQTP is a service mark of Microchip Technology Incorporated in the USA

                                                Silicon Storage Technology is a registered trademark of Microchip Technology Inc in other countries

                                                GestIC is a registered trademark of Microchip Technology Germany II GmbH amp Co KG a subsidiary ofMicrochip Technology Inc in other countries

                                                All other trademarks mentioned herein are property of their respective companies

                                                ATBTLC1000

                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 55

                                                copy 2018 Microchip Technology Incorporated Printed in the USA All Rights Reserved

                                                ISBN 978-1-5224-2921-0

                                                Quality Management System Certified by DNV

                                                ISOTS 16949Microchip received ISOTS-169492009 certification for its worldwide headquarters design and waferfabrication facilities in Chandler and Tempe Arizona Gresham Oregon and design centers in Californiaand India The Companyrsquos quality system processes and procedures are for its PICreg MCUs and dsPICreg

                                                DSCs KEELOQreg code hopping devices Serial EEPROMs microperipherals nonvolatile memory andanalog products In addition Microchiprsquos quality system for the design and manufacture of developmentsystems is ISO 90012000 certified

                                                ATBTLC1000

                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 56

                                                AMERICAS ASIAPACIFIC ASIAPACIFIC EUROPECorporate Office2355 West Chandler BlvdChandler AZ 85224-6199Tel 480-792-7200Fax 480-792-7277Technical SupporthttpwwwmicrochipcomsupportWeb AddresswwwmicrochipcomAtlantaDuluth GATel 678-957-9614Fax 678-957-1455Austin TXTel 512-257-3370BostonWestborough MATel 774-760-0087Fax 774-760-0088ChicagoItasca ILTel 630-285-0071Fax 630-285-0075DallasAddison TXTel 972-818-7423Fax 972-818-2924DetroitNovi MITel 248-848-4000Houston TXTel 281-894-5983IndianapolisNoblesville INTel 317-773-8323Fax 317-773-5453Tel 317-536-2380Los AngelesMission Viejo CATel 949-462-9523Fax 949-462-9608Tel 951-273-7800Raleigh NCTel 919-844-7510New York NYTel 631-435-6000San Jose CATel 408-735-9110Tel 408-436-4270Canada - TorontoTel 905-695-1980Fax 905-695-2078

                                                Australia - SydneyTel 61-2-9868-6733China - BeijingTel 86-10-8569-7000China - ChengduTel 86-28-8665-5511China - ChongqingTel 86-23-8980-9588China - DongguanTel 86-769-8702-9880China - GuangzhouTel 86-20-8755-8029China - HangzhouTel 86-571-8792-8115China - Hong Kong SARTel 852-2943-5100China - NanjingTel 86-25-8473-2460China - QingdaoTel 86-532-8502-7355China - ShanghaiTel 86-21-3326-8000China - ShenyangTel 86-24-2334-2829China - ShenzhenTel 86-755-8864-2200China - SuzhouTel 86-186-6233-1526China - WuhanTel 86-27-5980-5300China - XianTel 86-29-8833-7252China - XiamenTel 86-592-2388138China - ZhuhaiTel 86-756-3210040

                                                India - BangaloreTel 91-80-3090-4444India - New DelhiTel 91-11-4160-8631India - PuneTel 91-20-4121-0141Japan - OsakaTel 81-6-6152-7160Japan - TokyoTel 81-3-6880- 3770Korea - DaeguTel 82-53-744-4301Korea - SeoulTel 82-2-554-7200Malaysia - Kuala LumpurTel 60-3-7651-7906Malaysia - PenangTel 60-4-227-8870Philippines - ManilaTel 63-2-634-9065SingaporeTel 65-6334-8870Taiwan - Hsin ChuTel 886-3-577-8366Taiwan - KaohsiungTel 886-7-213-7830Taiwan - TaipeiTel 886-2-2508-8600Thailand - BangkokTel 66-2-694-1351Vietnam - Ho Chi MinhTel 84-28-5448-2100

                                                Austria - WelsTel 43-7242-2244-39Fax 43-7242-2244-393Denmark - CopenhagenTel 45-4450-2828Fax 45-4485-2829Finland - EspooTel 358-9-4520-820France - ParisTel 33-1-69-53-63-20Fax 33-1-69-30-90-79Germany - GarchingTel 49-8931-9700Germany - HaanTel 49-2129-3766400Germany - HeilbronnTel 49-7131-67-3636Germany - KarlsruheTel 49-721-625370Germany - MunichTel 49-89-627-144-0Fax 49-89-627-144-44Germany - RosenheimTel 49-8031-354-560Israel - RarsquoananaTel 972-9-744-7705Italy - MilanTel 39-0331-742611Fax 39-0331-466781Italy - PadovaTel 39-049-7625286Netherlands - DrunenTel 31-416-690399Fax 31-416-690340Norway - TrondheimTel 47-7289-7561Poland - WarsawTel 48-22-3325737Romania - BucharestTel 40-21-407-87-50Spain - MadridTel 34-91-708-08-90Fax 34-91-708-08-91Sweden - GothenbergTel 46-31-704-60-40Sweden - StockholmTel 46-8-5090-4654UK - WokinghamTel 44-118-921-5800Fax 44-118-921-5820

                                                Worldwide Sales and Service

                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 57

                                                • Introduction
                                                • Table of Contents
                                                • 1 Getting Started
                                                  • 11 Software Prerequisites
                                                    • 111 Installation Steps of Atmel Studio 7
                                                      • 12 Software Setup
                                                        • 121 Installation of Microchip SmartConnect application on a Mobile device
                                                          • 13 ATBTLC1000 Embedded Firmware
                                                          • 14 ATBTLC1000 Host Software API
                                                          • 15 Hardware Prerequisites
                                                            • 151 SMARTtrade SAM L21 Xplained Pro
                                                            • 152 ATBTLC1000ZR Xplained Pro Extension board
                                                              • 16 Hardware Setup
                                                                • 2 Creating the Project and Initializing
                                                                  • 21 Creating Project from ASF
                                                                  • 22 Configuring ASF for ATBTLC1000-ZR
                                                                  • 23 Compiling and Testing the Project
                                                                    • 3 Establishing Connection with Central Device
                                                                      • 31 Configuring and Starting the Advertisement Process
                                                                        • 311 Flags (AD Type 0x00)
                                                                        • 312 Available Service UUID (AD Types 0x02 to 0x07)
                                                                        • 313 Device Name (AD Types 0x08 to 0x09)
                                                                          • 3131 Setting the Advertisement Payload (ble_advertisement_data_set)
                                                                          • 3132 Starting the Advertisement Process (at_ble_adv_start)
                                                                            • 314 Advertisement Process
                                                                              • 3141 Starting the Advertisement Process
                                                                                  • 32 Managing GAP events
                                                                                    • 321 Handling of Connected and Disconnected GAP Events
                                                                                        • 4 SettingHandling of Pre-Defined Service
                                                                                          • 41 Adding Device Info Service Component from ASF Wizard to Project
                                                                                          • 42 Configuring and Loading Device Information Service
                                                                                            • 421 Procedure to Configure and Load Device Info Service
                                                                                                • 5 Setting up and Handling Custom Service
                                                                                                  • 51 Configuring and Loading the Custom Environment Service
                                                                                                    • 511 Procedure to Configure and Load Custom Environment Service
                                                                                                      • 52 Updating the Temperature Characteristic
                                                                                                        • 521 Setting a Characteristic Value ( at_ble_characteristic_value_set)
                                                                                                        • 522 Sending a Notification (at_ble_notification_send)
                                                                                                        • 523 Sending Temperature Information Once in Every 10 Seconds to Central
                                                                                                            • 6 Appendix A Software Solution - Pre-Defined Svc
                                                                                                            • 7 Appendix B Software Solution - Custom Service
                                                                                                            • 8 Document Revision History
                                                                                                            • The Microchip Web Site
                                                                                                            • Customer Change Notification Service
                                                                                                            • Customer Support
                                                                                                            • Microchip Devices Code Protection Feature
                                                                                                            • Legal Notice
                                                                                                            • Trademarks
                                                                                                            • Quality Management System Certified by DNV
                                                                                                            • Worldwide Sales and Service

                                                  9 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt10 Open Microchip SmartConnect Application on Android or iOS device and tap START SCAN button

                                                  Note  The device must appear in Microchip SmartConnect Application

                                                  Figure 3-8 Microchip SmartConnect Application

                                                  11 Terminal must display the following Log outputFigure 3-9 Log Output Window

                                                  32 Managing GAP eventsThe management of the Bluetooth connection at the host MCU level is done through reception andhandling of events reported by the ATBTLC1000 These events are generated by ATBTLC1000 GAPGATT and L2CAP layers to notify the host about the ongoing Bluetooth interaction with other devices inits vicinity

                                                  ATBTLC1000Establishing Connection with Central Device

                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 25

                                                  To manage events coming from the ATBTLC1000 module the host driver must provide able_mgr_events_callback_handler function that allows registration of application callback functionto be executed on each event reported by the ATBTLC1000 module

                                                  Prototype ndashbool ble_mgr_events_callback_handler(ble_mgr_event_cb_t event_cb_typeble_mgr_event_t event_typeconst voidble_event_handler)

                                                  Description ndash Used by ProfileServiceApplication to register the Bluetooth Low Energy eventsrsquocallbacks

                                                  Parameters ndash

                                                  event_cb_type ndash types of actions to perform on callbacks can be either

                                                  REGISTER_CALL_BACK or

                                                  UNREGISTER_CALL_BACKevent_type ndash Any one of the event types can be used

                                                  BLE_GAP_EVENT_TYPEBLE_GATT_CLIENT_EVENT_TYPEBLE_GATT_SERVER_EVENT_TYPEBLE_L2CAP_EVENT_TYPEBLE_GATT_HTPT_EVENT_TYPEBLE_DTM_EVENT_TYPEBLE_CUSTOM_EVENT_TYPEble_event_handler ndash pointer to handler list

                                                  Structure ble_gap_event_cb_t defines the GAP callbacks Similarly structuresble_gatt_client_event_cb_t and ble_gatt_server_event_cb_t define the callbacks of GATTevents

                                                  typedef struct ble_gap_event_cb BLE Undefined events received from ATBTLC1000 which is not handled in Libraryble_event_callback_t undefined BLE scan information contains the peer device scan information Refer ref at_ble_scan_info_tble_event_callback_t scan_info Once the BLE scan timeout or scan stop triggers the scan report event Refer ref at_ble_scan_report_tble_event_callback_t scan_report Advertisement complete event Refer ref at_ble_adv_cmp_evt_tble_event_callback_t advt_cmp Advertisement report in case of advertisement stopped due to advertisement timeout Refer ref at_ble_adv_report_tble_event_callback_t adv_report BLE device own random address changed event Refer ref at_ble_rand_addr_changed_tble_event_callback_t rand_addr_changed BLE connected event device connected to peer device Refer ref at_ble_connected_tble_event_callback_t connected BLE disconnected event device disconnected from peer device Refer ref at_ble_disconnected_tble_event_callback_t disconnected Connection parameter update done on peer device and own device Refer ref at_ble_conn_param_update_done_t

                                                  ATBTLC1000Establishing Connection with Central Device

                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 26

                                                  ble_event_callback_t conn_parameter_update_done Connection parameter update request from peer device Refer ref at_ble_conn_param_update_request_tble_event_callback_t conn_param_update_request Pair complete event as part of end of pairing process Refer ref at_ble_pair_done_tble_event_callback_t pair_done Pair request event from Central device Refer ref at_ble_pair_request_tble_event_callback_t pair_request Slave security request received from peer Peripheral device Refer ref at_ble_slave_sec_request_tble_event_callback_t slave_sec_request Pair Key request event from Peer central device Refer ref at_ble_pair_key_request_tble_event_callback_t pair_key_request encryption request comes from the peer device Needs to supply the bonding information which is stored earlier ref at_ble_encryption_request_tble_event_callback_t encryption_request encryption status changed event received from SMP once the encryption is started ref at_ble_encryption_status_changed_tble_event_callback_t encryption_status_changed Event triggered once the Resolve random address is resolved using supplied IRKs ref at_ble_resolv_rand_addr_status_tble_event_callback_t resolv_rand_addr_status Event is triggered once the connection signature information indication received ref at_ble_sign_counter_tble_event_callback_t sign_counters_ind Peer attribute information indication received Event ref at_ble_peer_att_info_ind_tble_event_callback_t peer_att_info_ind Peer device channel map received indication ref at_ble_channel_map_tble_event_callback_t con_channel_map_indble_gap_event_cb_t

                                                  Note  Callback definition is application-specific If the application layer requires a specific event callbackthen the specific member of the structure is to be assigned with the address of the callback function

                                                  In this assignment two callback functions on Connected and Disconnected GAP events are usedThis allows the application to restart the advertising process on Disconnect manage connectioninformation and startstop of sensor data update

                                                  321 Handling of Connected and Disconnected GAP Events1 Open the startup_templatec file2 Define the following software flags as global variables in startup_templatec file volatile

                                                  bool timer_flag = false and volatile bool connected_flag = false3 Declare and implement the following ble_connected_cb function in the

                                                  startup_templatec file Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param)printf(n Assignment 22 Application connected )connected_flag = trueALL_UNUSED(param)return AT_BLE_SUCCESS

                                                  4 Declare and implement the following ble_disconnected_cb function instartup_templatec file Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param)printf(n Assignment 22 Application disconnected )connected_flag = falsestart_advertisement()ALL_UNUSED(param)return AT_BLE_SUCCESS

                                                  ATBTLC1000Establishing Connection with Central Device

                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 27

                                                  5 Declare the following static GAP callback structure in ldquostartup_templatecrdquo filestatic const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTEDdisconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                                                  6 Add the following register_btlc1000_callbacks function in startup_templatec Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void) Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks)ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACKBLE_GAP_EVENT_TYPEampapp_gap_handle)if (ble_status = true)printf(nError when Registering ATBTLC1000 callbacks)

                                                  7 Add the register_btlc1000_callbacks function call prior to start advertisement in theapplication main routineint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Gap Callbacks register_btlc1000_callbacks ( ) Start Advertising process start_advertisement() Register PrimaryIncluded service in case of GATT Server while(true) Write application task

                                                  8 Add the ble_event_task function call in the project main loop to handle the different incomingevents from ATBTLC1000while(true)ble_event_task()

                                                  9 Press button ltF7gt to compile the project and verify that no build error appear in the AtmelStudio output window

                                                  ATBTLC1000Establishing Connection with Central Device

                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 28

                                                  Figure 3-10 Atmel Studio Output Window

                                                  10 Click ldquo rdquo to save the project ltCtrl+Sgt

                                                  11 Click ldquo rdquo to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt and checkcorrect initialization of the ATBTLC1000

                                                  12 Open the Microchip SmartConnect application on Androidtrade or iOS device13 Press the ltStart Scangt button and pair peripherals by selecting them in the device list (pass key

                                                  123456)Note 

                                                  1 Pairing event handling is carried out by ble_managerc Refer toble_pair_key_request_handler() for code implementation The default pass key of123456 is also fixed inside this function This can be changed here

                                                  Figure 3-11 Console Log Window

                                                  Note  After peripheral pairing no services information are displayed in Microchip SmartConnectapplication as no service is currently defined and started on peripheral side

                                                  ATBTLC1000Establishing Connection with Central Device

                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 29

                                                  4 SettingHandling of Pre-Defined ServiceThe management of services are done in the GATT layer of the ATBTLC1000 ROM coded Bluetooth LowEnergy Stack The GATT transactions are based on high-level nested objects called Profiles Servicesand Characteristics stored in SRAM memory of ATBTLC1000 device This assignment adds the pre-defined service of information service from ASF library

                                                  Figure 4-1 ATBTLC1000 GATT Layers

                                                  bull ProfilesProfiles are not available in the Bluetooth Low Energy peripheral they are simply a pre-definedcollection of services that have been compiled by either the Bluetooth SIG (adopted GATT basedprofile) or by the application developer (custom profiles) For example the Heart Rate Profilecombines the Heart Rate Service and the Device Information Service

                                                  Note  The complete list of officially adopted GATT-based profiles is available on the BluetoothDeveloper Portal

                                                  bull ServicesA service is a collection of data and associated behaviors which accomplish a particular function orfeature of a device or portions of a device A service may reference other primary or secondaryservices andor a set of characteristics that make up the service Each service distinguishes itselffrom other services by means of a unique numeric ID called as UUID which can be either 16-bit(for officially adopted Bluetooth Low Energy Services) or 128-bit (for custom services)

                                                  Note  A full list of officially adopted services and their UUID are seen on the Bluetooth DeveloperPortal

                                                  bull CharacteristicsA characteristic is the lowest level concept in GATT transactions It contains a single data point withdifferent attributes such as notify read or write capabilities Similar to Services each characteristiccan be distinguished by a SIG-defined adopted UUID (16-bit) or custom (128-bit) UUID This UUIDensures interoperability across Bluetooth Low Energy devices The characteristics are important tointeract with in a Bluetooth Low Energy network In addition to standard UUID the custom UUID isused in case of specific application When characteristics with custom UUID are used in a devicethen it will be interoperable only with those devices that support these characteristics with customUUID

                                                  ATBTLC1000SettingHandling of Pre-Defined Service

                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 30

                                                  In this assignment the following steps are added to the Host MCU application to set up and handle adevice information service within the ATBTLC1000 module The following steps are added to the startupproject

                                                  bull Adding device info service component from ASFbull Configuring and loading the service

                                                  Figure 4-2 Device Information Service

                                                  41 Adding Device Info Service Component from ASF Wizard to ProjectTo use the ldquoofficially adopted GATT-based profilesrdquo from SIG ASF provides Bluetooth Low Energy servicecomponents including init functions that pre-define services in Host memory

                                                  Note  Before starting this assignment be sure to follow the steps mentioned in 2 Creating the Projectand Initializing and 3 Establishing Connection with Central Device

                                                  1 Click ASF gt ASF Wizard2 Search for ldquoBLE-Device Information Servicesrdquo and then click Add

                                                  ATBTLC1000SettingHandling of Pre-Defined Service

                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 31

                                                  Figure 4-3 Available Modules

                                                  3 Now ldquoBLE-Device Information Servicesrdquo (component) appears in ldquoSelected ModulesrdquoFigure 4-4 Selected Modules

                                                  4 Click Apply to add the component to the projectFigure 4-5 Adding the Modules to Project

                                                  5 The ldquoDevice Information Servicerdquo component is added to the project and is confirmed bydevice_information folder added in Solution Explorer

                                                  ATBTLC1000SettingHandling of Pre-Defined Service

                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 32

                                                  Figure 4-6 Device Information Service Added to Project

                                                  42 Configuring and Loading Device Information ServiceThe ATBTLC1000 Host driver provides a set of GATT functions that allows storing and updating theservices in ATBTLC1000 memories

                                                  Prototype at_ble_status_t at_ble_primary_service_define(at_ble_uuid_t uuidat_ble_handle_t service_handleat_ble_included_service_t included_service_listuint16_t included_service_countat_ble_characteristic_t charactristic_listuint16_t charactristic_count)

                                                  Description Defines a new primary service along with its included services and characteristics inATBTLC1000

                                                  Parameters

                                                  bull Uuid [In] ndash primary service UUIDbull service_handle [Out] ndash Service handle is returned herebull included_service_list [In] ndash an array of included service referencesbull included_service_count [In] ndash number of elements in included_service_listbull charactristic_list [InOut] ndash an array of characteristics included in the service this array

                                                  is updated with respective characteristics handlesbull charactristic_count[In] ndash number of elements in charactristic_list

                                                  Return Execution Status

                                                  This function requires an argument as GATT description structure of the service that is implemented Thepreviously added Device Info service component provides Bluetooth Low Energy service middlewareincluding the init functions that predefine the services See below ldquodis_init_servicerdquo from device infoBLE service (device_infohc)

                                                  Prototype ndash void dis_init_service(dis_gatt_service_handler_t device_info_serv)Description ndash Initialize the device information service handler in the host MCU memory

                                                  Parameters ndash

                                                  ATBTLC1000SettingHandling of Pre-Defined Service

                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 33

                                                  bull device_info_serv [Inout] pointer to device info GATT description handler to beupdated

                                                  Return None

                                                  Here is a picture of GATT device info service descriptor definition in Host memory

                                                  device_info_serv-gtserv_handle = 0device_info_serv-gtserv_uuidtype = AT_BLE_UUID_16device_info_serv-gtserv_uuiduuid[0] = (uint8_t) DIS_SERVICE_UUIDdevice_info_serv-gtserv_uuiduuid[1] = (uint8_t) (DIS_SERVICE_UUID gtgt 8)Characteristic Info for Manufacturer Name Stringdevice_info_serv-gtserv_chars[0]char_val_handle = 0 handle stored here device_info_serv-gtserv_chars[0]uuidtype = AT_BLE_UUID_16device_info_serv-gtserv_chars[0]uuiduuid[0] = (uint8_t) IS_CHAR_MANUFACTURER_NAME_UUID UUID Manufacturer Name String device_info_serv-gtserv_chars[0]uuiduuid[1] = (uint8_t) (DIS_CHAR_MANUFACTURER_NAME_UUID gtgt 8) UUID Manufacturer Name String device_info_serv-gtserv_chars[0]properties = AT_BLE_CHAR_READ Properties memcpy(char_valuemanufacturer_nameDEFAULT_MANUFACTURER_NAMEDIS_CHAR_MANUFACTURER_NAME_INIT_LEN)device_info_serv-gtserv_chars[0]init_value = char_valuemanufacturer_namedevice_info_serv-gtserv_chars[0]value_init_len = DIS_CHAR_MANUFACTURER_NAME_INIT_LENdevice_info_serv-gtserv_chars[0]value_max_len = DIS_CHAR_MANUFACTURER_NAME_MAX_LENif BLE_PAIR_ENABLEdevice_info_serv-gtserv_chars[0]value_permissions = AT_BLE_ATTR_READABLE_REQ_AUTHN_NO_AUTHR permissions elsedevice_info_serv-gtserv_chars[0]value_permissions = AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR permissions endifdevice_info_serv-gtserv_chars[0]user_desc = NULL user defined name device_info_serv-gtserv_chars[0]user_desc_len = 0device_info_serv-gtserv_chars[0]user_desc_max_len = 0device_info_serv-gtserv_chars[0]user_desc_permissions = AT_BLE_ATTR_NO_PERMISSIONS user description permissionsdevice_info_serv-gtserv_chars[0]client_config_permissions = AT_BLE_ATTR_NO_PERMISSIONS client config permissionsdevice_info_serm hdsv-gtserv_chars[0]server_config_permissions = AT_BLE_ATTR_NO_PERMISSIONS server config permissionsdevice_info_serv-gtserv_chars[0]user_desc_handle = 0 user desc handlesdevice_info_serv-gtserv_chars[0]client_config_handle = 0 client config handlesdevice_info_serv-gtserv_chars[0]server_config_handle = 0 server config handlesdevice_info_serv-gtserv_chars[0]presentation_format = NULL presentation format

                                                  Note  In case of custom service the above definition initialization must be taken care of by thedeveloper

                                                  421 Procedure to Configure and Load Device Info Service1 Include device info service header file (device_infoh) at the beginning of

                                                  startup_templatec fileinclude ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehinclude device_infoh

                                                  2 Define a device info service handler as global in startup_templatec file Serviceshandlers dis_gatt_service_handler_t dis_service_handler

                                                  ATBTLC1000SettingHandling of Pre-Defined Service

                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 34

                                                  3 Add dis_init_service and at_ble_primary_service_define functions as called abovethe advertisement start in main routine Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service)dis_init_service (ampdis_service_handler) Define the primary service in the GATT server database if ((dis_primary_service_define (ampdis_service_handler)) = AT_BLE_SUCCESS)printf(Device Information Service definition failed) Start Advertising process start_advertisement()

                                                  4 Click to save the project ltCtrl+Sgt and compile the project by pressing button ltF7gt5 Verify that no build error appears in Atmel Studio output window

                                                  Figure 4-7 Atmel Studio Output Window

                                                  6 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt7 Open ldquoMicrochip SmartConnectrdquo application on Android or iOS device8 Press ltStart Scangt button and connect to peripheral

                                                  Note  The device name is a characteristic and contains the name of the device This device namecan be read by the central device to know the name of the device in order to differentiate thedevices This is being set using at_ble_device_name_set()API The device name is set bydefault when ble_device_init is called and the value is pre-defined using BLE_DEVICE_NAMEThe device name can also be sent as part of advertisement payload to be same as the oneconfigured in at_ble_adv_data_set() API It is the responsibility of users to keep the devicename set in advertisement payload the same as that configured inat_ble_device_name_set()

                                                  9 The Service must now be visible after pairing with peripheral under Microchip SmartConnectapplication

                                                  ATBTLC1000SettingHandling of Pre-Defined Service

                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 35

                                                  Figure 4-8 Service List in Microchip SmartConnect Application

                                                  Note  If the pairing of ATBTLC1000 with Microchip Smart connect is not successful then removethe pairing information from mobile by selecting ldquoForget Devicerdquo from the mobile settings Thereason for this is that the mobile app stores the previous pairing information but the ATBTLC1000device lost the previous pairing information due to RESET since it was stored on temporary storage(RAM)

                                                  10 The serial terminal must display the following log output windowFigure 4-9 Console Log Window

                                                  ATBTLC1000SettingHandling of Pre-Defined Service

                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 36

                                                  5 Setting up and Handling Custom ServiceThe previous assignment describes the handling of Bluetooth Low Energy SIG defined device infoservice which is the predefined service available in ASF component This assignment describes thecustom service So the service initialization needs to be implemented In the context of customizedenvironment service the following service description is pushed in ATBTLC1000 memory

                                                  Figure 5-1 Custom Service

                                                  Custom Environment Service Description

                                                  bull UUID type ndash Custom UUID (128-bit)bull UUID ndash 1bc5d5a5-0200-a687-e511-3639c1ba5af0

                                                  Characteristic 0 (Temperature)

                                                  bull User Description ndash Temperaturebull UUID type ndash Custom UUID (128-bit)bull UUID ndash 1bc5d5a5-0200-a687-e511-3639d8ba5af0bull Properties ndash Read Notifybull Value permission ndash No authorization requiredbull Client config permission ndash No permissionbull Server config permission ndash No permission

                                                  Note  In this definition UUIDs are generated randomly Custom servicescharacteristics are free to useany 128-bit UUID less than the base UUID There is no reserved space for vendors to use 16-bit or 32-bitUUIDs

                                                  With this definition any temperature change is notified to the central The notify mechanism allows thecentral to know when the data changes When notify property of the Client Characteristic ConfigurationDescriptor is enabled by the central and the device writes the new value then this updated value isautomatically sent to the central through a notification The central is not required to send readcharacteristic commands explicitly to the peripheral (GATT server)

                                                  To setup and handle the custom environment service in ATBTLC1000 module the following steps areadded to the Host MCU application

                                                  bull Configure and load the custom servicebull Update Temperature characteristic and notify to the central devicebull Receive and handle notification from the Host device

                                                  ATBTLC1000Setting up and Handling Custom Service

                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 37

                                                  Figure 5-2 Custom Service Flowchart

                                                  51 Configuring and Loading the Custom Environment ServiceThe ATBTLC1000 Host driver provides the following set of GATT functions that allows it to push andupdate the service descriptions in the ATBTLC1000 SRAM memory

                                                  Note  Before starting this assignment be sure to follow the steps mentioned in 2 Creating the Projectand Initializing and 3 Establishing Connection with Central Device

                                                  Prototype ndashat_ble_status_t at_ble_primary_service_define(at_ble_uuid_t uuidat_ble_handle_t service_handleat_ble_included_service_t included_service_listuint16_t included_service_countat_ble_characteristic_t charactristic_listuint16_t charactristic_count)

                                                  Description ndash Defines a new primary service along with its included services and characteristics inATBTLC1000 module

                                                  Parameters

                                                  bull Uuid [In] ndash primary service UUIDbull service_handle [Out] ndash service handle is returned herebull included_service_list [In] ndash array of included service referencesbull included_service_count [In] ndash number of elements in included_service_listbull charactristic_list [InOut] ndash an array of characteristics included in the service this array

                                                  is update with respective characteristics handlesbull charactristic_count[In] ndash number of elements in charactristic_list

                                                  ATBTLC1000Setting up and Handling Custom Service

                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 38

                                                  Return ndash Execution Status

                                                  bull Characteristics ndashndash Characteristics definition is done through specific array of following

                                                  ldquoat_ble_characteristic_trdquo structure instancestypedef structat_ble_handle_t char_val_handle Handler (returned during service initialisation)at_ble_uuid_t uuid Characteristic UUID (type and value)at_ble_char_properties_t propertiesCharac Properties (read write notify)uint8_t init_value initial valueuint16_t value_init_len initial value lengthuint16_t value_max_len value max lengthat_ble_attr_permissions_t value_permissions access authorization and authenticationuint8_t user_desc User descriptionuint16_t user_desc_len User description lengthuint16_t user_desc_max_len User description max lengthat_ble_char_presentation_t presentation_format Presentation formatat_ble_attr_permissions_t user_desc_permissions User description permissionat_ble_attr_permissions_t client_config_permissions client permissionat_ble_attr_permissions_t server_config_permissions server permissionat_ble_handle_t user_desc_handle description handlerat_ble_handle_t client_config_handle Client config handlerat_ble_handle_t server_config_handle Server config handler at_ble_characteristic_t

                                                  511 Procedure to Configure and Load Custom Environment Service1 Define the following service UUID and characteristic UUID in startup_templatec file

                                                  define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

                                                  2 Define the following environment service handler and characteristics variable as global instartup_templatec file Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

                                                  3 Add the following service initialization function custom_environment_service_init instartup_templatecvoid custom_environment_service_init(void) at_ble_uuid_t environment_service_uuiduint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUIDuint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperatureenvironment_service_characs[0]user_desc_len = 10environment_service_characs[0]user_desc_max_len = 10environment_service_characs[0]uuidtype = AT_BLE_UUID_128memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16)environment_service_characs[0]properties = AT_BLE_CHAR_READ |AT_BLE_CHAR_NOTIFYenvironment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature valueenvironment_service_characs[0]value_permissions =(AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuidampenvironment_service_handlerNULL0environment_service_characs1)=AT_BLE_SUCCESS)printf(n Assignment 41 Failed to Initialize custom environment service)

                                                  ATBTLC1000Setting up and Handling Custom Service

                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 39

                                                  elseprintf(n Assignment 41 Initialize custom environment service)

                                                  4 Declare and implement the following GATT event callback functioncustom_char_changed_app_event in startup_templatec file If a client (central) enablesnotifications for a server the server (peripheral) receives an AT_BLE_CHARACTERISTIC_CHANGEDevent and this event callback is called Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

                                                  5 Declare and implement the following custom_notification_confirmation_handlerfunction in startup_templatec file Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param)at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )paramif (event_param-gtstatus == AT_BLE_SUCCESS)printf(n Assignment 41Notification Successfully sent over the air) else printf(n Assignment 41Sending Notification over the air failed)return AT_BLE_SUCCESS

                                                  6 Declare the following GATT server callback structure in startup_templatec file Thisassignment uses two GATT callbacksstatic const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handlercharacteristic_changed = custom_char_changed_app_event

                                                  7 Add the following register_gatt_server_callbacks function in startup_templatec toregister GATT server callback for notification confirmation event Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks)ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACKBLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle)if (ble_status = true)printf(nError when Registering ATBTLC1000 callbacks)

                                                  8 Add custom_environment_service_init and register_gatt_server_callbacksfunction calls prior to start advertisement in the application main routine to initialize custom serviceand to register the GATT server callbacksint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()

                                                  ATBTLC1000Setting up and Handling Custom Service

                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 40

                                                  endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks() Custom service init custom_environment_service_init ( ) Register Gatt server callbacks register_gatt_server_callbacks ( ) Start Advertising process start_advertisement()while(true)ble_event_task()

                                                  9 Click to save the project ltCtrl+Sgt

                                                  10 Compile the project by pressing button ltF7gt11 Verify that no build error appears in the Atmel Studio output window

                                                  Figure 5-3 Atmel Studio Output Window

                                                  12 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt13 Open the ldquoMicrochip SmartConnectrdquo application on Android or iOS device14 Connect and pair to the peripheral (pass key 123456)15 Custom service must now be visible after pairing with peripheral under Microchip SmartConnect

                                                  application

                                                  ATBTLC1000Setting up and Handling Custom Service

                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 41

                                                  Figure 5-4 Service List in Microchip SmartConnect Application

                                                  Note  Custom service is displayed as unknown service in the above figure as this service is not aSIG-defined service

                                                  Figure 5-5 General Information

                                                  16 Serial terminal client must display the following Log output

                                                  ATBTLC1000Setting up and Handling Custom Service

                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 42

                                                  Figure 5-6 Log Output Window

                                                  52 Updating the Temperature CharacteristicIn the previous assignment the custom Temperature characteristic is defined with a notify attribute Thistype of attribute requires notification to be sent to central when a new characteristic value is availableThe update of any ldquonotifyrdquo characteristic value is based on following interaction between the Host MCUand the ATBTLC1000Figure 5-7 Characteristic Notification

                                                  521 Setting a Characteristic Value ( at_ble_characteristic_value_set)Prototype ndashat_ble_status_t at_ble_characteristic_value_setat_ble_handle_t handleuint8_t valueuint16_t len)

                                                  Description ndash Sets a characteristic value in ATBTLC1000 memory

                                                  Parameters ndash

                                                  ATBTLC1000Setting up and Handling Custom Service

                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 43

                                                  bull handle [inout] ndash Pointer to Characteristic handle to be changedbull value [in] ndash New valuebull len [in] ndash Value length in bytes

                                                  Return ndash Execution Status

                                                  522 Sending a Notification (at_ble_notification_send)Prototype ndashat_ble_status_t at_ble_notification_send(at_ble_handle_t conn_handleat_ble_handle_t attr_handle)

                                                  Description ndash Sends a Notification

                                                  Parameters ndash

                                                  bull conn_handle[in] ndash handle of the connection to be notifiedbull attr_handle [in] ndash handle of the attribute originating the notification

                                                  Return ndash Execution Status

                                                  523 Sending Temperature Information Once in Every 10 Seconds to Central1 Modify the following ldquotimer_callback_fnrdquo callback function from the startup_templatec

                                                  filestatic void timer_callback_fn(void)timer_flag = true

                                                  2 hw_timer_init()in main routine of startup_templatec initializes the hardware timer3 If a client (Central) enables the notifications for a server the server (Peripheral) receives an

                                                  AT_BLE_CHARACTERISTIC_CHANGED event callback then start the periodic 10 second timer forsending the notification Add the following code in previously definedcustom_char_changed_app_event function Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))timer_flag = falsehw_timer_start(10)printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

                                                  4 Declare the following Temperature_value global variable in startup_templatec staticuint8_t Temperature_value = 25 as static

                                                  5 Add the following send_temperature_notification function in startup_templatec tosend temperature every 10 seconds Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++

                                                  ATBTLC1000Setting up and Handling Custom Service

                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 44

                                                  if(Temperature_value gt 75)Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set(environment_service_characs[0]char_val_handle(uint8_t )ampTemperature_valuesizeof(Temperature_value))ble_status = at_ble_notification_send(0environment_service_characs[0]char_val_handle)if(ble_status = AT_BLE_SUCCESS)printf(fail to send temperature update notification )

                                                  6 Add the following code in main routine to send temperature data every 10 secondswhile (1) ble_event_task()if(connected_flag == true ampamp timer_flag == truetimer_flag = falsesend_temperature_notification()

                                                  7 Click to save the project ltCtrl+Sgt

                                                  8 Compile the project by pressing the button ltF7gt9 Verify that no build error appears in Atmel Studio output window

                                                  Figure 5-8 Atmel Studio Output Window

                                                  10 Click to program the project binary on the L21 Xplained XSTK11 Open ldquoMicrochip SmartConnectrdquo Application on Android or iOS device12 Connect and pair to the peripheral (pass key 123456)13 Click NOTIFY to start the notification14 Temperature information in HEX values must be displayed in Microchip SmartConnect application

                                                  ATBTLC1000Setting up and Handling Custom Service

                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 45

                                                  Figure 5-9 Notification Window

                                                  15 Serial terminal must display the following log outputFigure 5-10 Log Output Window

                                                  ATBTLC1000Setting up and Handling Custom Service

                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 46

                                                  6 Appendix A Software Solution - Pre-Defined SvcThe following is the code implementation for handling of pre-defined service done in 4 SettingHandlingof Pre-Defined Service

                                                  - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehinclude device_infoh

                                                  volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false Services handlers dis_gatt_service_handler_t dis_service_handler

                                                  static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

                                                  void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                                                  Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                                                  Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                                                  static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                                                  Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void) Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks)

                                                  ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 47

                                                  ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                                  timer callback function static void timer_callback_fn(void) Add timer callback functionality here

                                                  void button_cb(void) Add button callback functionality here

                                                  int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                                                  Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                                                  DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks()

                                                  Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service) dis_init_service(ampdis_service_handler) Define the primary service in the GATT server database if((dis_primary_service_define(ampdis_service_handler)) = AT_BLE_SUCCESS) printf(Device Information Service definition failed)

                                                  Start Advertising process start_advertisement() while(true) ble_event_task()

                                                  ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 48

                                                  7 Appendix B Software Solution - Custom ServiceThe following is the code implementation for handling of pre-defined service done in 5 Setting up andHandling Custom Service

                                                  - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templateh

                                                  volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false

                                                  static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

                                                  define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0

                                                  define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

                                                  Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

                                                  void custom_environment_service_init(void) at_ble_uuid_t environment_service_uuid uint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUID uint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128 memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperature environment_service_characs[0]user_desc_len = 10 environment_service_characs[0]user_desc_max_len = 10 environment_service_characs[0]uuidtype = AT_BLE_UUID_128 memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16) environment_service_characs[0]properties = AT_BLE_CHAR_READ | AT_BLE_CHAR_NOTIFY environment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature value environment_service_characs[0]value_permissions = (AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuid ampenvironment_service_handlerNULL0 environment_service_characs1)=AT_BLE_SUCCESS) printf(n Assignment 41 Failed to Initialize custom environment service) else printf(n Assignment 41 Initialize custom environment service)

                                                  Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param) at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )param if (event_param-gtstatus == AT_BLE_SUCCESS) printf(n Assignment 41Notification Successfully sent over the air)

                                                  ATBTLC1000Appendix B Software Solution - Custom Service

                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 49

                                                  else printf(n Assignment 41Sending Notification over the air failed) return AT_BLE_SUCCESS

                                                  static at_ble_status_t custom_char_changed_app_event(void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle -gt char_new_value[0])) timer_flag = false hw_timer_start(10) printf(n Assignment 41Characteristic changed event) return AT_BLE_SUCCESS

                                                  static const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handler characteristic_changed = custom_char_changed_app_event

                                                  Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                                  void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                                                  Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                                                  Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                                                  static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                                                  Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void)

                                                  ATBTLC1000Appendix B Software Solution - Custom Service

                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 50

                                                  Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                                  timer callback function static void timer_callback_fn(void) Add timer callback functionality here timer_flag = true

                                                  void button_cb(void) Add button callback functionality here

                                                  static uint8_t Temperature_value = 25

                                                  Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++ if(Temperature_value gt 75) Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set( environment_service_characs[0]char_val_handle (uint8_t )ampTemperature_value sizeof(Temperature_value)) ble_status = at_ble_notification_send(0 environment_service_characs[0]char_val_handle) if(ble_status = AT_BLE_SUCCESS) printf(fail to send temperature update notification )

                                                  int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                                                  Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                                                  DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register Gap ATBTLC1000 Callbacks register_btlc1000_callbacks()

                                                  Custom service init custom_environment_service_init()

                                                  ATBTLC1000Appendix B Software Solution - Custom Service

                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 51

                                                  Register Gatt server callback register_gatt_server_callbacks()

                                                  Start Advertising process start_advertisement() while(true) ble_event_task() if(connected_flag == true ampamp timer_flag == true) timer_flag = false send_temperature_notification()

                                                  ATBTLC1000Appendix B Software Solution - Custom Service

                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 52

                                                  8 Document Revision HistoryRev B - 42018

                                                  Section Changes

                                                  Document Revised contents to match various Bluetooth Low Energy standard versions

                                                  Rev A - 122017

                                                  Section Changes

                                                  Document Initial release

                                                  ATBTLC1000Document Revision History

                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 53

                                                  The Microchip Web Site

                                                  Microchip provides online support via our web site at httpwwwmicrochipcom This web site is used asa means to make files and information easily available to customers Accessible by using your favoriteInternet browser the web site contains the following information

                                                  bull Product Support ndash Data sheets and errata application notes and sample programs designresources userrsquos guides and hardware support documents latest software releases and archivedsoftware

                                                  bull General Technical Support ndash Frequently Asked Questions (FAQ) technical support requestsonline discussion groups Microchip consultant program member listing

                                                  bull Business of Microchip ndash Product selector and ordering guides latest Microchip press releaseslisting of seminars and events listings of Microchip sales offices distributors and factoryrepresentatives

                                                  Customer Change Notification Service

                                                  Microchiprsquos customer notification service helps keep customers current on Microchip productsSubscribers will receive e-mail notification whenever there are changes updates revisions or erratarelated to a specified product family or development tool of interest

                                                  To register access the Microchip web site at httpwwwmicrochipcom Under ldquoSupportrdquo click onldquoCustomer Change Notificationrdquo and follow the registration instructions

                                                  Customer Support

                                                  Users of Microchip products can receive assistance through several channels

                                                  bull Distributor or Representativebull Local Sales Officebull Field Application Engineer (FAE)bull Technical Support

                                                  Customers should contact their distributor representative or Field Application Engineer (FAE) for supportLocal sales offices are also available to help customers A listing of sales offices and locations is includedin the back of this document

                                                  Technical support is available through the web site at httpwwwmicrochipcomsupport

                                                  Microchip Devices Code Protection Feature

                                                  Note the following details of the code protection feature on Microchip devices

                                                  bull Microchip products meet the specification contained in their particular Microchip Data Sheetbull Microchip believes that its family of products is one of the most secure families of its kind on the

                                                  market today when used in the intended manner and under normal conditionsbull There are dishonest and possibly illegal methods used to breach the code protection feature All of

                                                  these methods to our knowledge require using the Microchip products in a manner outside theoperating specifications contained in Microchiprsquos Data Sheets Most likely the person doing so isengaged in theft of intellectual property

                                                  bull Microchip is willing to work with the customer who is concerned about the integrity of their code

                                                  ATBTLC1000

                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 54

                                                  bull Neither Microchip nor any other semiconductor manufacturer can guarantee the security of theircode Code protection does not mean that we are guaranteeing the product as ldquounbreakablerdquo

                                                  Code protection is constantly evolving We at Microchip are committed to continuously improving thecode protection features of our products Attempts to break Microchiprsquos code protection feature may be aviolation of the Digital Millennium Copyright Act If such acts allow unauthorized access to your softwareor other copyrighted work you may have a right to sue for relief under that Act

                                                  Legal Notice

                                                  Information contained in this publication regarding device applications and the like is provided only foryour convenience and may be superseded by updates It is your responsibility to ensure that yourapplication meets with your specifications MICROCHIP MAKES NO REPRESENTATIONS ORWARRANTIES OF ANY KIND WHETHER EXPRESS OR IMPLIED WRITTEN OR ORAL STATUTORYOR OTHERWISE RELATED TO THE INFORMATION INCLUDING BUT NOT LIMITED TO ITSCONDITION QUALITY PERFORMANCE MERCHANTABILITY OR FITNESS FOR PURPOSEMicrochip disclaims all liability arising from this information and its use Use of Microchip devices in lifesupport andor safety applications is entirely at the buyerrsquos risk and the buyer agrees to defendindemnify and hold harmless Microchip from any and all damages claims suits or expenses resultingfrom such use No licenses are conveyed implicitly or otherwise under any Microchip intellectualproperty rights unless otherwise stated

                                                  Trademarks

                                                  The Microchip name and logo the Microchip logo AnyRate AVR AVR logo AVR Freaks BeaconThingsBitCloud CryptoMemory CryptoRF dsPIC FlashFlex flexPWR Heldo JukeBlox KeeLoq KeeLoq logoKleer LANCheck LINK MD maXStylus maXTouch MediaLB megaAVR MOST MOST logo MPLABOptoLyzer PIC picoPower PICSTART PIC32 logo Prochip Designer QTouch RightTouch SAM-BASpyNIC SST SST Logo SuperFlash tinyAVR UNIO and XMEGA are registered trademarks ofMicrochip Technology Incorporated in the USA and other countries

                                                  ClockWorks The Embedded Control Solutions Company EtherSynch Hyper Speed Control HyperLightLoad IntelliMOS mTouch Precision Edge and Quiet-Wire are registered trademarks of MicrochipTechnology Incorporated in the USA

                                                  Adjacent Key Suppression AKS Analog-for-the-Digital Age Any Capacitor AnyIn AnyOut BodyComchipKIT chipKIT logo CodeGuard CryptoAuthentication CryptoCompanion CryptoControllerdsPICDEM dsPICDEMnet Dynamic Average Matching DAM ECAN EtherGREEN In-Circuit SerialProgramming ICSP Inter-Chip Connectivity JitterBlocker KleerNet KleerNet logo Mindi MiWimotorBench MPASM MPF MPLAB Certified logo MPLIB MPLINK MultiTRAK NetDetach OmniscientCode Generation PICDEM PICDEMnet PICkit PICtail PureSilicon QMatrix RightTouch logo REALICE Ripple Blocker SAM-ICE Serial Quad IO SMART-IS SQI SuperSwitcher SuperSwitcher II TotalEndurance TSHARC USBCheck VariSense ViewSpan WiperLock Wireless DNA and ZENA aretrademarks of Microchip Technology Incorporated in the USA and other countries

                                                  SQTP is a service mark of Microchip Technology Incorporated in the USA

                                                  Silicon Storage Technology is a registered trademark of Microchip Technology Inc in other countries

                                                  GestIC is a registered trademark of Microchip Technology Germany II GmbH amp Co KG a subsidiary ofMicrochip Technology Inc in other countries

                                                  All other trademarks mentioned herein are property of their respective companies

                                                  ATBTLC1000

                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 55

                                                  copy 2018 Microchip Technology Incorporated Printed in the USA All Rights Reserved

                                                  ISBN 978-1-5224-2921-0

                                                  Quality Management System Certified by DNV

                                                  ISOTS 16949Microchip received ISOTS-169492009 certification for its worldwide headquarters design and waferfabrication facilities in Chandler and Tempe Arizona Gresham Oregon and design centers in Californiaand India The Companyrsquos quality system processes and procedures are for its PICreg MCUs and dsPICreg

                                                  DSCs KEELOQreg code hopping devices Serial EEPROMs microperipherals nonvolatile memory andanalog products In addition Microchiprsquos quality system for the design and manufacture of developmentsystems is ISO 90012000 certified

                                                  ATBTLC1000

                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 56

                                                  AMERICAS ASIAPACIFIC ASIAPACIFIC EUROPECorporate Office2355 West Chandler BlvdChandler AZ 85224-6199Tel 480-792-7200Fax 480-792-7277Technical SupporthttpwwwmicrochipcomsupportWeb AddresswwwmicrochipcomAtlantaDuluth GATel 678-957-9614Fax 678-957-1455Austin TXTel 512-257-3370BostonWestborough MATel 774-760-0087Fax 774-760-0088ChicagoItasca ILTel 630-285-0071Fax 630-285-0075DallasAddison TXTel 972-818-7423Fax 972-818-2924DetroitNovi MITel 248-848-4000Houston TXTel 281-894-5983IndianapolisNoblesville INTel 317-773-8323Fax 317-773-5453Tel 317-536-2380Los AngelesMission Viejo CATel 949-462-9523Fax 949-462-9608Tel 951-273-7800Raleigh NCTel 919-844-7510New York NYTel 631-435-6000San Jose CATel 408-735-9110Tel 408-436-4270Canada - TorontoTel 905-695-1980Fax 905-695-2078

                                                  Australia - SydneyTel 61-2-9868-6733China - BeijingTel 86-10-8569-7000China - ChengduTel 86-28-8665-5511China - ChongqingTel 86-23-8980-9588China - DongguanTel 86-769-8702-9880China - GuangzhouTel 86-20-8755-8029China - HangzhouTel 86-571-8792-8115China - Hong Kong SARTel 852-2943-5100China - NanjingTel 86-25-8473-2460China - QingdaoTel 86-532-8502-7355China - ShanghaiTel 86-21-3326-8000China - ShenyangTel 86-24-2334-2829China - ShenzhenTel 86-755-8864-2200China - SuzhouTel 86-186-6233-1526China - WuhanTel 86-27-5980-5300China - XianTel 86-29-8833-7252China - XiamenTel 86-592-2388138China - ZhuhaiTel 86-756-3210040

                                                  India - BangaloreTel 91-80-3090-4444India - New DelhiTel 91-11-4160-8631India - PuneTel 91-20-4121-0141Japan - OsakaTel 81-6-6152-7160Japan - TokyoTel 81-3-6880- 3770Korea - DaeguTel 82-53-744-4301Korea - SeoulTel 82-2-554-7200Malaysia - Kuala LumpurTel 60-3-7651-7906Malaysia - PenangTel 60-4-227-8870Philippines - ManilaTel 63-2-634-9065SingaporeTel 65-6334-8870Taiwan - Hsin ChuTel 886-3-577-8366Taiwan - KaohsiungTel 886-7-213-7830Taiwan - TaipeiTel 886-2-2508-8600Thailand - BangkokTel 66-2-694-1351Vietnam - Ho Chi MinhTel 84-28-5448-2100

                                                  Austria - WelsTel 43-7242-2244-39Fax 43-7242-2244-393Denmark - CopenhagenTel 45-4450-2828Fax 45-4485-2829Finland - EspooTel 358-9-4520-820France - ParisTel 33-1-69-53-63-20Fax 33-1-69-30-90-79Germany - GarchingTel 49-8931-9700Germany - HaanTel 49-2129-3766400Germany - HeilbronnTel 49-7131-67-3636Germany - KarlsruheTel 49-721-625370Germany - MunichTel 49-89-627-144-0Fax 49-89-627-144-44Germany - RosenheimTel 49-8031-354-560Israel - RarsquoananaTel 972-9-744-7705Italy - MilanTel 39-0331-742611Fax 39-0331-466781Italy - PadovaTel 39-049-7625286Netherlands - DrunenTel 31-416-690399Fax 31-416-690340Norway - TrondheimTel 47-7289-7561Poland - WarsawTel 48-22-3325737Romania - BucharestTel 40-21-407-87-50Spain - MadridTel 34-91-708-08-90Fax 34-91-708-08-91Sweden - GothenbergTel 46-31-704-60-40Sweden - StockholmTel 46-8-5090-4654UK - WokinghamTel 44-118-921-5800Fax 44-118-921-5820

                                                  Worldwide Sales and Service

                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 57

                                                  • Introduction
                                                  • Table of Contents
                                                  • 1 Getting Started
                                                    • 11 Software Prerequisites
                                                      • 111 Installation Steps of Atmel Studio 7
                                                        • 12 Software Setup
                                                          • 121 Installation of Microchip SmartConnect application on a Mobile device
                                                            • 13 ATBTLC1000 Embedded Firmware
                                                            • 14 ATBTLC1000 Host Software API
                                                            • 15 Hardware Prerequisites
                                                              • 151 SMARTtrade SAM L21 Xplained Pro
                                                              • 152 ATBTLC1000ZR Xplained Pro Extension board
                                                                • 16 Hardware Setup
                                                                  • 2 Creating the Project and Initializing
                                                                    • 21 Creating Project from ASF
                                                                    • 22 Configuring ASF for ATBTLC1000-ZR
                                                                    • 23 Compiling and Testing the Project
                                                                      • 3 Establishing Connection with Central Device
                                                                        • 31 Configuring and Starting the Advertisement Process
                                                                          • 311 Flags (AD Type 0x00)
                                                                          • 312 Available Service UUID (AD Types 0x02 to 0x07)
                                                                          • 313 Device Name (AD Types 0x08 to 0x09)
                                                                            • 3131 Setting the Advertisement Payload (ble_advertisement_data_set)
                                                                            • 3132 Starting the Advertisement Process (at_ble_adv_start)
                                                                              • 314 Advertisement Process
                                                                                • 3141 Starting the Advertisement Process
                                                                                    • 32 Managing GAP events
                                                                                      • 321 Handling of Connected and Disconnected GAP Events
                                                                                          • 4 SettingHandling of Pre-Defined Service
                                                                                            • 41 Adding Device Info Service Component from ASF Wizard to Project
                                                                                            • 42 Configuring and Loading Device Information Service
                                                                                              • 421 Procedure to Configure and Load Device Info Service
                                                                                                  • 5 Setting up and Handling Custom Service
                                                                                                    • 51 Configuring and Loading the Custom Environment Service
                                                                                                      • 511 Procedure to Configure and Load Custom Environment Service
                                                                                                        • 52 Updating the Temperature Characteristic
                                                                                                          • 521 Setting a Characteristic Value ( at_ble_characteristic_value_set)
                                                                                                          • 522 Sending a Notification (at_ble_notification_send)
                                                                                                          • 523 Sending Temperature Information Once in Every 10 Seconds to Central
                                                                                                              • 6 Appendix A Software Solution - Pre-Defined Svc
                                                                                                              • 7 Appendix B Software Solution - Custom Service
                                                                                                              • 8 Document Revision History
                                                                                                              • The Microchip Web Site
                                                                                                              • Customer Change Notification Service
                                                                                                              • Customer Support
                                                                                                              • Microchip Devices Code Protection Feature
                                                                                                              • Legal Notice
                                                                                                              • Trademarks
                                                                                                              • Quality Management System Certified by DNV
                                                                                                              • Worldwide Sales and Service

                                                    To manage events coming from the ATBTLC1000 module the host driver must provide able_mgr_events_callback_handler function that allows registration of application callback functionto be executed on each event reported by the ATBTLC1000 module

                                                    Prototype ndashbool ble_mgr_events_callback_handler(ble_mgr_event_cb_t event_cb_typeble_mgr_event_t event_typeconst voidble_event_handler)

                                                    Description ndash Used by ProfileServiceApplication to register the Bluetooth Low Energy eventsrsquocallbacks

                                                    Parameters ndash

                                                    event_cb_type ndash types of actions to perform on callbacks can be either

                                                    REGISTER_CALL_BACK or

                                                    UNREGISTER_CALL_BACKevent_type ndash Any one of the event types can be used

                                                    BLE_GAP_EVENT_TYPEBLE_GATT_CLIENT_EVENT_TYPEBLE_GATT_SERVER_EVENT_TYPEBLE_L2CAP_EVENT_TYPEBLE_GATT_HTPT_EVENT_TYPEBLE_DTM_EVENT_TYPEBLE_CUSTOM_EVENT_TYPEble_event_handler ndash pointer to handler list

                                                    Structure ble_gap_event_cb_t defines the GAP callbacks Similarly structuresble_gatt_client_event_cb_t and ble_gatt_server_event_cb_t define the callbacks of GATTevents

                                                    typedef struct ble_gap_event_cb BLE Undefined events received from ATBTLC1000 which is not handled in Libraryble_event_callback_t undefined BLE scan information contains the peer device scan information Refer ref at_ble_scan_info_tble_event_callback_t scan_info Once the BLE scan timeout or scan stop triggers the scan report event Refer ref at_ble_scan_report_tble_event_callback_t scan_report Advertisement complete event Refer ref at_ble_adv_cmp_evt_tble_event_callback_t advt_cmp Advertisement report in case of advertisement stopped due to advertisement timeout Refer ref at_ble_adv_report_tble_event_callback_t adv_report BLE device own random address changed event Refer ref at_ble_rand_addr_changed_tble_event_callback_t rand_addr_changed BLE connected event device connected to peer device Refer ref at_ble_connected_tble_event_callback_t connected BLE disconnected event device disconnected from peer device Refer ref at_ble_disconnected_tble_event_callback_t disconnected Connection parameter update done on peer device and own device Refer ref at_ble_conn_param_update_done_t

                                                    ATBTLC1000Establishing Connection with Central Device

                                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 26

                                                    ble_event_callback_t conn_parameter_update_done Connection parameter update request from peer device Refer ref at_ble_conn_param_update_request_tble_event_callback_t conn_param_update_request Pair complete event as part of end of pairing process Refer ref at_ble_pair_done_tble_event_callback_t pair_done Pair request event from Central device Refer ref at_ble_pair_request_tble_event_callback_t pair_request Slave security request received from peer Peripheral device Refer ref at_ble_slave_sec_request_tble_event_callback_t slave_sec_request Pair Key request event from Peer central device Refer ref at_ble_pair_key_request_tble_event_callback_t pair_key_request encryption request comes from the peer device Needs to supply the bonding information which is stored earlier ref at_ble_encryption_request_tble_event_callback_t encryption_request encryption status changed event received from SMP once the encryption is started ref at_ble_encryption_status_changed_tble_event_callback_t encryption_status_changed Event triggered once the Resolve random address is resolved using supplied IRKs ref at_ble_resolv_rand_addr_status_tble_event_callback_t resolv_rand_addr_status Event is triggered once the connection signature information indication received ref at_ble_sign_counter_tble_event_callback_t sign_counters_ind Peer attribute information indication received Event ref at_ble_peer_att_info_ind_tble_event_callback_t peer_att_info_ind Peer device channel map received indication ref at_ble_channel_map_tble_event_callback_t con_channel_map_indble_gap_event_cb_t

                                                    Note  Callback definition is application-specific If the application layer requires a specific event callbackthen the specific member of the structure is to be assigned with the address of the callback function

                                                    In this assignment two callback functions on Connected and Disconnected GAP events are usedThis allows the application to restart the advertising process on Disconnect manage connectioninformation and startstop of sensor data update

                                                    321 Handling of Connected and Disconnected GAP Events1 Open the startup_templatec file2 Define the following software flags as global variables in startup_templatec file volatile

                                                    bool timer_flag = false and volatile bool connected_flag = false3 Declare and implement the following ble_connected_cb function in the

                                                    startup_templatec file Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param)printf(n Assignment 22 Application connected )connected_flag = trueALL_UNUSED(param)return AT_BLE_SUCCESS

                                                    4 Declare and implement the following ble_disconnected_cb function instartup_templatec file Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param)printf(n Assignment 22 Application disconnected )connected_flag = falsestart_advertisement()ALL_UNUSED(param)return AT_BLE_SUCCESS

                                                    ATBTLC1000Establishing Connection with Central Device

                                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 27

                                                    5 Declare the following static GAP callback structure in ldquostartup_templatecrdquo filestatic const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTEDdisconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                                                    6 Add the following register_btlc1000_callbacks function in startup_templatec Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void) Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks)ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACKBLE_GAP_EVENT_TYPEampapp_gap_handle)if (ble_status = true)printf(nError when Registering ATBTLC1000 callbacks)

                                                    7 Add the register_btlc1000_callbacks function call prior to start advertisement in theapplication main routineint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Gap Callbacks register_btlc1000_callbacks ( ) Start Advertising process start_advertisement() Register PrimaryIncluded service in case of GATT Server while(true) Write application task

                                                    8 Add the ble_event_task function call in the project main loop to handle the different incomingevents from ATBTLC1000while(true)ble_event_task()

                                                    9 Press button ltF7gt to compile the project and verify that no build error appear in the AtmelStudio output window

                                                    ATBTLC1000Establishing Connection with Central Device

                                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 28

                                                    Figure 3-10 Atmel Studio Output Window

                                                    10 Click ldquo rdquo to save the project ltCtrl+Sgt

                                                    11 Click ldquo rdquo to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt and checkcorrect initialization of the ATBTLC1000

                                                    12 Open the Microchip SmartConnect application on Androidtrade or iOS device13 Press the ltStart Scangt button and pair peripherals by selecting them in the device list (pass key

                                                    123456)Note 

                                                    1 Pairing event handling is carried out by ble_managerc Refer toble_pair_key_request_handler() for code implementation The default pass key of123456 is also fixed inside this function This can be changed here

                                                    Figure 3-11 Console Log Window

                                                    Note  After peripheral pairing no services information are displayed in Microchip SmartConnectapplication as no service is currently defined and started on peripheral side

                                                    ATBTLC1000Establishing Connection with Central Device

                                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 29

                                                    4 SettingHandling of Pre-Defined ServiceThe management of services are done in the GATT layer of the ATBTLC1000 ROM coded Bluetooth LowEnergy Stack The GATT transactions are based on high-level nested objects called Profiles Servicesand Characteristics stored in SRAM memory of ATBTLC1000 device This assignment adds the pre-defined service of information service from ASF library

                                                    Figure 4-1 ATBTLC1000 GATT Layers

                                                    bull ProfilesProfiles are not available in the Bluetooth Low Energy peripheral they are simply a pre-definedcollection of services that have been compiled by either the Bluetooth SIG (adopted GATT basedprofile) or by the application developer (custom profiles) For example the Heart Rate Profilecombines the Heart Rate Service and the Device Information Service

                                                    Note  The complete list of officially adopted GATT-based profiles is available on the BluetoothDeveloper Portal

                                                    bull ServicesA service is a collection of data and associated behaviors which accomplish a particular function orfeature of a device or portions of a device A service may reference other primary or secondaryservices andor a set of characteristics that make up the service Each service distinguishes itselffrom other services by means of a unique numeric ID called as UUID which can be either 16-bit(for officially adopted Bluetooth Low Energy Services) or 128-bit (for custom services)

                                                    Note  A full list of officially adopted services and their UUID are seen on the Bluetooth DeveloperPortal

                                                    bull CharacteristicsA characteristic is the lowest level concept in GATT transactions It contains a single data point withdifferent attributes such as notify read or write capabilities Similar to Services each characteristiccan be distinguished by a SIG-defined adopted UUID (16-bit) or custom (128-bit) UUID This UUIDensures interoperability across Bluetooth Low Energy devices The characteristics are important tointeract with in a Bluetooth Low Energy network In addition to standard UUID the custom UUID isused in case of specific application When characteristics with custom UUID are used in a devicethen it will be interoperable only with those devices that support these characteristics with customUUID

                                                    ATBTLC1000SettingHandling of Pre-Defined Service

                                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 30

                                                    In this assignment the following steps are added to the Host MCU application to set up and handle adevice information service within the ATBTLC1000 module The following steps are added to the startupproject

                                                    bull Adding device info service component from ASFbull Configuring and loading the service

                                                    Figure 4-2 Device Information Service

                                                    41 Adding Device Info Service Component from ASF Wizard to ProjectTo use the ldquoofficially adopted GATT-based profilesrdquo from SIG ASF provides Bluetooth Low Energy servicecomponents including init functions that pre-define services in Host memory

                                                    Note  Before starting this assignment be sure to follow the steps mentioned in 2 Creating the Projectand Initializing and 3 Establishing Connection with Central Device

                                                    1 Click ASF gt ASF Wizard2 Search for ldquoBLE-Device Information Servicesrdquo and then click Add

                                                    ATBTLC1000SettingHandling of Pre-Defined Service

                                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 31

                                                    Figure 4-3 Available Modules

                                                    3 Now ldquoBLE-Device Information Servicesrdquo (component) appears in ldquoSelected ModulesrdquoFigure 4-4 Selected Modules

                                                    4 Click Apply to add the component to the projectFigure 4-5 Adding the Modules to Project

                                                    5 The ldquoDevice Information Servicerdquo component is added to the project and is confirmed bydevice_information folder added in Solution Explorer

                                                    ATBTLC1000SettingHandling of Pre-Defined Service

                                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 32

                                                    Figure 4-6 Device Information Service Added to Project

                                                    42 Configuring and Loading Device Information ServiceThe ATBTLC1000 Host driver provides a set of GATT functions that allows storing and updating theservices in ATBTLC1000 memories

                                                    Prototype at_ble_status_t at_ble_primary_service_define(at_ble_uuid_t uuidat_ble_handle_t service_handleat_ble_included_service_t included_service_listuint16_t included_service_countat_ble_characteristic_t charactristic_listuint16_t charactristic_count)

                                                    Description Defines a new primary service along with its included services and characteristics inATBTLC1000

                                                    Parameters

                                                    bull Uuid [In] ndash primary service UUIDbull service_handle [Out] ndash Service handle is returned herebull included_service_list [In] ndash an array of included service referencesbull included_service_count [In] ndash number of elements in included_service_listbull charactristic_list [InOut] ndash an array of characteristics included in the service this array

                                                    is updated with respective characteristics handlesbull charactristic_count[In] ndash number of elements in charactristic_list

                                                    Return Execution Status

                                                    This function requires an argument as GATT description structure of the service that is implemented Thepreviously added Device Info service component provides Bluetooth Low Energy service middlewareincluding the init functions that predefine the services See below ldquodis_init_servicerdquo from device infoBLE service (device_infohc)

                                                    Prototype ndash void dis_init_service(dis_gatt_service_handler_t device_info_serv)Description ndash Initialize the device information service handler in the host MCU memory

                                                    Parameters ndash

                                                    ATBTLC1000SettingHandling of Pre-Defined Service

                                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 33

                                                    bull device_info_serv [Inout] pointer to device info GATT description handler to beupdated

                                                    Return None

                                                    Here is a picture of GATT device info service descriptor definition in Host memory

                                                    device_info_serv-gtserv_handle = 0device_info_serv-gtserv_uuidtype = AT_BLE_UUID_16device_info_serv-gtserv_uuiduuid[0] = (uint8_t) DIS_SERVICE_UUIDdevice_info_serv-gtserv_uuiduuid[1] = (uint8_t) (DIS_SERVICE_UUID gtgt 8)Characteristic Info for Manufacturer Name Stringdevice_info_serv-gtserv_chars[0]char_val_handle = 0 handle stored here device_info_serv-gtserv_chars[0]uuidtype = AT_BLE_UUID_16device_info_serv-gtserv_chars[0]uuiduuid[0] = (uint8_t) IS_CHAR_MANUFACTURER_NAME_UUID UUID Manufacturer Name String device_info_serv-gtserv_chars[0]uuiduuid[1] = (uint8_t) (DIS_CHAR_MANUFACTURER_NAME_UUID gtgt 8) UUID Manufacturer Name String device_info_serv-gtserv_chars[0]properties = AT_BLE_CHAR_READ Properties memcpy(char_valuemanufacturer_nameDEFAULT_MANUFACTURER_NAMEDIS_CHAR_MANUFACTURER_NAME_INIT_LEN)device_info_serv-gtserv_chars[0]init_value = char_valuemanufacturer_namedevice_info_serv-gtserv_chars[0]value_init_len = DIS_CHAR_MANUFACTURER_NAME_INIT_LENdevice_info_serv-gtserv_chars[0]value_max_len = DIS_CHAR_MANUFACTURER_NAME_MAX_LENif BLE_PAIR_ENABLEdevice_info_serv-gtserv_chars[0]value_permissions = AT_BLE_ATTR_READABLE_REQ_AUTHN_NO_AUTHR permissions elsedevice_info_serv-gtserv_chars[0]value_permissions = AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR permissions endifdevice_info_serv-gtserv_chars[0]user_desc = NULL user defined name device_info_serv-gtserv_chars[0]user_desc_len = 0device_info_serv-gtserv_chars[0]user_desc_max_len = 0device_info_serv-gtserv_chars[0]user_desc_permissions = AT_BLE_ATTR_NO_PERMISSIONS user description permissionsdevice_info_serv-gtserv_chars[0]client_config_permissions = AT_BLE_ATTR_NO_PERMISSIONS client config permissionsdevice_info_serm hdsv-gtserv_chars[0]server_config_permissions = AT_BLE_ATTR_NO_PERMISSIONS server config permissionsdevice_info_serv-gtserv_chars[0]user_desc_handle = 0 user desc handlesdevice_info_serv-gtserv_chars[0]client_config_handle = 0 client config handlesdevice_info_serv-gtserv_chars[0]server_config_handle = 0 server config handlesdevice_info_serv-gtserv_chars[0]presentation_format = NULL presentation format

                                                    Note  In case of custom service the above definition initialization must be taken care of by thedeveloper

                                                    421 Procedure to Configure and Load Device Info Service1 Include device info service header file (device_infoh) at the beginning of

                                                    startup_templatec fileinclude ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehinclude device_infoh

                                                    2 Define a device info service handler as global in startup_templatec file Serviceshandlers dis_gatt_service_handler_t dis_service_handler

                                                    ATBTLC1000SettingHandling of Pre-Defined Service

                                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 34

                                                    3 Add dis_init_service and at_ble_primary_service_define functions as called abovethe advertisement start in main routine Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service)dis_init_service (ampdis_service_handler) Define the primary service in the GATT server database if ((dis_primary_service_define (ampdis_service_handler)) = AT_BLE_SUCCESS)printf(Device Information Service definition failed) Start Advertising process start_advertisement()

                                                    4 Click to save the project ltCtrl+Sgt and compile the project by pressing button ltF7gt5 Verify that no build error appears in Atmel Studio output window

                                                    Figure 4-7 Atmel Studio Output Window

                                                    6 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt7 Open ldquoMicrochip SmartConnectrdquo application on Android or iOS device8 Press ltStart Scangt button and connect to peripheral

                                                    Note  The device name is a characteristic and contains the name of the device This device namecan be read by the central device to know the name of the device in order to differentiate thedevices This is being set using at_ble_device_name_set()API The device name is set bydefault when ble_device_init is called and the value is pre-defined using BLE_DEVICE_NAMEThe device name can also be sent as part of advertisement payload to be same as the oneconfigured in at_ble_adv_data_set() API It is the responsibility of users to keep the devicename set in advertisement payload the same as that configured inat_ble_device_name_set()

                                                    9 The Service must now be visible after pairing with peripheral under Microchip SmartConnectapplication

                                                    ATBTLC1000SettingHandling of Pre-Defined Service

                                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 35

                                                    Figure 4-8 Service List in Microchip SmartConnect Application

                                                    Note  If the pairing of ATBTLC1000 with Microchip Smart connect is not successful then removethe pairing information from mobile by selecting ldquoForget Devicerdquo from the mobile settings Thereason for this is that the mobile app stores the previous pairing information but the ATBTLC1000device lost the previous pairing information due to RESET since it was stored on temporary storage(RAM)

                                                    10 The serial terminal must display the following log output windowFigure 4-9 Console Log Window

                                                    ATBTLC1000SettingHandling of Pre-Defined Service

                                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 36

                                                    5 Setting up and Handling Custom ServiceThe previous assignment describes the handling of Bluetooth Low Energy SIG defined device infoservice which is the predefined service available in ASF component This assignment describes thecustom service So the service initialization needs to be implemented In the context of customizedenvironment service the following service description is pushed in ATBTLC1000 memory

                                                    Figure 5-1 Custom Service

                                                    Custom Environment Service Description

                                                    bull UUID type ndash Custom UUID (128-bit)bull UUID ndash 1bc5d5a5-0200-a687-e511-3639c1ba5af0

                                                    Characteristic 0 (Temperature)

                                                    bull User Description ndash Temperaturebull UUID type ndash Custom UUID (128-bit)bull UUID ndash 1bc5d5a5-0200-a687-e511-3639d8ba5af0bull Properties ndash Read Notifybull Value permission ndash No authorization requiredbull Client config permission ndash No permissionbull Server config permission ndash No permission

                                                    Note  In this definition UUIDs are generated randomly Custom servicescharacteristics are free to useany 128-bit UUID less than the base UUID There is no reserved space for vendors to use 16-bit or 32-bitUUIDs

                                                    With this definition any temperature change is notified to the central The notify mechanism allows thecentral to know when the data changes When notify property of the Client Characteristic ConfigurationDescriptor is enabled by the central and the device writes the new value then this updated value isautomatically sent to the central through a notification The central is not required to send readcharacteristic commands explicitly to the peripheral (GATT server)

                                                    To setup and handle the custom environment service in ATBTLC1000 module the following steps areadded to the Host MCU application

                                                    bull Configure and load the custom servicebull Update Temperature characteristic and notify to the central devicebull Receive and handle notification from the Host device

                                                    ATBTLC1000Setting up and Handling Custom Service

                                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 37

                                                    Figure 5-2 Custom Service Flowchart

                                                    51 Configuring and Loading the Custom Environment ServiceThe ATBTLC1000 Host driver provides the following set of GATT functions that allows it to push andupdate the service descriptions in the ATBTLC1000 SRAM memory

                                                    Note  Before starting this assignment be sure to follow the steps mentioned in 2 Creating the Projectand Initializing and 3 Establishing Connection with Central Device

                                                    Prototype ndashat_ble_status_t at_ble_primary_service_define(at_ble_uuid_t uuidat_ble_handle_t service_handleat_ble_included_service_t included_service_listuint16_t included_service_countat_ble_characteristic_t charactristic_listuint16_t charactristic_count)

                                                    Description ndash Defines a new primary service along with its included services and characteristics inATBTLC1000 module

                                                    Parameters

                                                    bull Uuid [In] ndash primary service UUIDbull service_handle [Out] ndash service handle is returned herebull included_service_list [In] ndash array of included service referencesbull included_service_count [In] ndash number of elements in included_service_listbull charactristic_list [InOut] ndash an array of characteristics included in the service this array

                                                    is update with respective characteristics handlesbull charactristic_count[In] ndash number of elements in charactristic_list

                                                    ATBTLC1000Setting up and Handling Custom Service

                                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 38

                                                    Return ndash Execution Status

                                                    bull Characteristics ndashndash Characteristics definition is done through specific array of following

                                                    ldquoat_ble_characteristic_trdquo structure instancestypedef structat_ble_handle_t char_val_handle Handler (returned during service initialisation)at_ble_uuid_t uuid Characteristic UUID (type and value)at_ble_char_properties_t propertiesCharac Properties (read write notify)uint8_t init_value initial valueuint16_t value_init_len initial value lengthuint16_t value_max_len value max lengthat_ble_attr_permissions_t value_permissions access authorization and authenticationuint8_t user_desc User descriptionuint16_t user_desc_len User description lengthuint16_t user_desc_max_len User description max lengthat_ble_char_presentation_t presentation_format Presentation formatat_ble_attr_permissions_t user_desc_permissions User description permissionat_ble_attr_permissions_t client_config_permissions client permissionat_ble_attr_permissions_t server_config_permissions server permissionat_ble_handle_t user_desc_handle description handlerat_ble_handle_t client_config_handle Client config handlerat_ble_handle_t server_config_handle Server config handler at_ble_characteristic_t

                                                    511 Procedure to Configure and Load Custom Environment Service1 Define the following service UUID and characteristic UUID in startup_templatec file

                                                    define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

                                                    2 Define the following environment service handler and characteristics variable as global instartup_templatec file Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

                                                    3 Add the following service initialization function custom_environment_service_init instartup_templatecvoid custom_environment_service_init(void) at_ble_uuid_t environment_service_uuiduint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUIDuint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperatureenvironment_service_characs[0]user_desc_len = 10environment_service_characs[0]user_desc_max_len = 10environment_service_characs[0]uuidtype = AT_BLE_UUID_128memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16)environment_service_characs[0]properties = AT_BLE_CHAR_READ |AT_BLE_CHAR_NOTIFYenvironment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature valueenvironment_service_characs[0]value_permissions =(AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuidampenvironment_service_handlerNULL0environment_service_characs1)=AT_BLE_SUCCESS)printf(n Assignment 41 Failed to Initialize custom environment service)

                                                    ATBTLC1000Setting up and Handling Custom Service

                                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 39

                                                    elseprintf(n Assignment 41 Initialize custom environment service)

                                                    4 Declare and implement the following GATT event callback functioncustom_char_changed_app_event in startup_templatec file If a client (central) enablesnotifications for a server the server (peripheral) receives an AT_BLE_CHARACTERISTIC_CHANGEDevent and this event callback is called Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

                                                    5 Declare and implement the following custom_notification_confirmation_handlerfunction in startup_templatec file Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param)at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )paramif (event_param-gtstatus == AT_BLE_SUCCESS)printf(n Assignment 41Notification Successfully sent over the air) else printf(n Assignment 41Sending Notification over the air failed)return AT_BLE_SUCCESS

                                                    6 Declare the following GATT server callback structure in startup_templatec file Thisassignment uses two GATT callbacksstatic const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handlercharacteristic_changed = custom_char_changed_app_event

                                                    7 Add the following register_gatt_server_callbacks function in startup_templatec toregister GATT server callback for notification confirmation event Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks)ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACKBLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle)if (ble_status = true)printf(nError when Registering ATBTLC1000 callbacks)

                                                    8 Add custom_environment_service_init and register_gatt_server_callbacksfunction calls prior to start advertisement in the application main routine to initialize custom serviceand to register the GATT server callbacksint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()

                                                    ATBTLC1000Setting up and Handling Custom Service

                                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 40

                                                    endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks() Custom service init custom_environment_service_init ( ) Register Gatt server callbacks register_gatt_server_callbacks ( ) Start Advertising process start_advertisement()while(true)ble_event_task()

                                                    9 Click to save the project ltCtrl+Sgt

                                                    10 Compile the project by pressing button ltF7gt11 Verify that no build error appears in the Atmel Studio output window

                                                    Figure 5-3 Atmel Studio Output Window

                                                    12 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt13 Open the ldquoMicrochip SmartConnectrdquo application on Android or iOS device14 Connect and pair to the peripheral (pass key 123456)15 Custom service must now be visible after pairing with peripheral under Microchip SmartConnect

                                                    application

                                                    ATBTLC1000Setting up and Handling Custom Service

                                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 41

                                                    Figure 5-4 Service List in Microchip SmartConnect Application

                                                    Note  Custom service is displayed as unknown service in the above figure as this service is not aSIG-defined service

                                                    Figure 5-5 General Information

                                                    16 Serial terminal client must display the following Log output

                                                    ATBTLC1000Setting up and Handling Custom Service

                                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 42

                                                    Figure 5-6 Log Output Window

                                                    52 Updating the Temperature CharacteristicIn the previous assignment the custom Temperature characteristic is defined with a notify attribute Thistype of attribute requires notification to be sent to central when a new characteristic value is availableThe update of any ldquonotifyrdquo characteristic value is based on following interaction between the Host MCUand the ATBTLC1000Figure 5-7 Characteristic Notification

                                                    521 Setting a Characteristic Value ( at_ble_characteristic_value_set)Prototype ndashat_ble_status_t at_ble_characteristic_value_setat_ble_handle_t handleuint8_t valueuint16_t len)

                                                    Description ndash Sets a characteristic value in ATBTLC1000 memory

                                                    Parameters ndash

                                                    ATBTLC1000Setting up and Handling Custom Service

                                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 43

                                                    bull handle [inout] ndash Pointer to Characteristic handle to be changedbull value [in] ndash New valuebull len [in] ndash Value length in bytes

                                                    Return ndash Execution Status

                                                    522 Sending a Notification (at_ble_notification_send)Prototype ndashat_ble_status_t at_ble_notification_send(at_ble_handle_t conn_handleat_ble_handle_t attr_handle)

                                                    Description ndash Sends a Notification

                                                    Parameters ndash

                                                    bull conn_handle[in] ndash handle of the connection to be notifiedbull attr_handle [in] ndash handle of the attribute originating the notification

                                                    Return ndash Execution Status

                                                    523 Sending Temperature Information Once in Every 10 Seconds to Central1 Modify the following ldquotimer_callback_fnrdquo callback function from the startup_templatec

                                                    filestatic void timer_callback_fn(void)timer_flag = true

                                                    2 hw_timer_init()in main routine of startup_templatec initializes the hardware timer3 If a client (Central) enables the notifications for a server the server (Peripheral) receives an

                                                    AT_BLE_CHARACTERISTIC_CHANGED event callback then start the periodic 10 second timer forsending the notification Add the following code in previously definedcustom_char_changed_app_event function Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))timer_flag = falsehw_timer_start(10)printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

                                                    4 Declare the following Temperature_value global variable in startup_templatec staticuint8_t Temperature_value = 25 as static

                                                    5 Add the following send_temperature_notification function in startup_templatec tosend temperature every 10 seconds Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++

                                                    ATBTLC1000Setting up and Handling Custom Service

                                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 44

                                                    if(Temperature_value gt 75)Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set(environment_service_characs[0]char_val_handle(uint8_t )ampTemperature_valuesizeof(Temperature_value))ble_status = at_ble_notification_send(0environment_service_characs[0]char_val_handle)if(ble_status = AT_BLE_SUCCESS)printf(fail to send temperature update notification )

                                                    6 Add the following code in main routine to send temperature data every 10 secondswhile (1) ble_event_task()if(connected_flag == true ampamp timer_flag == truetimer_flag = falsesend_temperature_notification()

                                                    7 Click to save the project ltCtrl+Sgt

                                                    8 Compile the project by pressing the button ltF7gt9 Verify that no build error appears in Atmel Studio output window

                                                    Figure 5-8 Atmel Studio Output Window

                                                    10 Click to program the project binary on the L21 Xplained XSTK11 Open ldquoMicrochip SmartConnectrdquo Application on Android or iOS device12 Connect and pair to the peripheral (pass key 123456)13 Click NOTIFY to start the notification14 Temperature information in HEX values must be displayed in Microchip SmartConnect application

                                                    ATBTLC1000Setting up and Handling Custom Service

                                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 45

                                                    Figure 5-9 Notification Window

                                                    15 Serial terminal must display the following log outputFigure 5-10 Log Output Window

                                                    ATBTLC1000Setting up and Handling Custom Service

                                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 46

                                                    6 Appendix A Software Solution - Pre-Defined SvcThe following is the code implementation for handling of pre-defined service done in 4 SettingHandlingof Pre-Defined Service

                                                    - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehinclude device_infoh

                                                    volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false Services handlers dis_gatt_service_handler_t dis_service_handler

                                                    static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

                                                    void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                                                    Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                                                    Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                                                    static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                                                    Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void) Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks)

                                                    ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

                                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 47

                                                    ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                                    timer callback function static void timer_callback_fn(void) Add timer callback functionality here

                                                    void button_cb(void) Add button callback functionality here

                                                    int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                                                    Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                                                    DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks()

                                                    Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service) dis_init_service(ampdis_service_handler) Define the primary service in the GATT server database if((dis_primary_service_define(ampdis_service_handler)) = AT_BLE_SUCCESS) printf(Device Information Service definition failed)

                                                    Start Advertising process start_advertisement() while(true) ble_event_task()

                                                    ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

                                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 48

                                                    7 Appendix B Software Solution - Custom ServiceThe following is the code implementation for handling of pre-defined service done in 5 Setting up andHandling Custom Service

                                                    - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templateh

                                                    volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false

                                                    static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

                                                    define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0

                                                    define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

                                                    Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

                                                    void custom_environment_service_init(void) at_ble_uuid_t environment_service_uuid uint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUID uint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128 memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperature environment_service_characs[0]user_desc_len = 10 environment_service_characs[0]user_desc_max_len = 10 environment_service_characs[0]uuidtype = AT_BLE_UUID_128 memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16) environment_service_characs[0]properties = AT_BLE_CHAR_READ | AT_BLE_CHAR_NOTIFY environment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature value environment_service_characs[0]value_permissions = (AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuid ampenvironment_service_handlerNULL0 environment_service_characs1)=AT_BLE_SUCCESS) printf(n Assignment 41 Failed to Initialize custom environment service) else printf(n Assignment 41 Initialize custom environment service)

                                                    Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param) at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )param if (event_param-gtstatus == AT_BLE_SUCCESS) printf(n Assignment 41Notification Successfully sent over the air)

                                                    ATBTLC1000Appendix B Software Solution - Custom Service

                                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 49

                                                    else printf(n Assignment 41Sending Notification over the air failed) return AT_BLE_SUCCESS

                                                    static at_ble_status_t custom_char_changed_app_event(void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle -gt char_new_value[0])) timer_flag = false hw_timer_start(10) printf(n Assignment 41Characteristic changed event) return AT_BLE_SUCCESS

                                                    static const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handler characteristic_changed = custom_char_changed_app_event

                                                    Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                                    void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                                                    Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                                                    Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                                                    static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                                                    Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void)

                                                    ATBTLC1000Appendix B Software Solution - Custom Service

                                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 50

                                                    Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                                    timer callback function static void timer_callback_fn(void) Add timer callback functionality here timer_flag = true

                                                    void button_cb(void) Add button callback functionality here

                                                    static uint8_t Temperature_value = 25

                                                    Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++ if(Temperature_value gt 75) Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set( environment_service_characs[0]char_val_handle (uint8_t )ampTemperature_value sizeof(Temperature_value)) ble_status = at_ble_notification_send(0 environment_service_characs[0]char_val_handle) if(ble_status = AT_BLE_SUCCESS) printf(fail to send temperature update notification )

                                                    int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                                                    Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                                                    DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register Gap ATBTLC1000 Callbacks register_btlc1000_callbacks()

                                                    Custom service init custom_environment_service_init()

                                                    ATBTLC1000Appendix B Software Solution - Custom Service

                                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 51

                                                    Register Gatt server callback register_gatt_server_callbacks()

                                                    Start Advertising process start_advertisement() while(true) ble_event_task() if(connected_flag == true ampamp timer_flag == true) timer_flag = false send_temperature_notification()

                                                    ATBTLC1000Appendix B Software Solution - Custom Service

                                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 52

                                                    8 Document Revision HistoryRev B - 42018

                                                    Section Changes

                                                    Document Revised contents to match various Bluetooth Low Energy standard versions

                                                    Rev A - 122017

                                                    Section Changes

                                                    Document Initial release

                                                    ATBTLC1000Document Revision History

                                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 53

                                                    The Microchip Web Site

                                                    Microchip provides online support via our web site at httpwwwmicrochipcom This web site is used asa means to make files and information easily available to customers Accessible by using your favoriteInternet browser the web site contains the following information

                                                    bull Product Support ndash Data sheets and errata application notes and sample programs designresources userrsquos guides and hardware support documents latest software releases and archivedsoftware

                                                    bull General Technical Support ndash Frequently Asked Questions (FAQ) technical support requestsonline discussion groups Microchip consultant program member listing

                                                    bull Business of Microchip ndash Product selector and ordering guides latest Microchip press releaseslisting of seminars and events listings of Microchip sales offices distributors and factoryrepresentatives

                                                    Customer Change Notification Service

                                                    Microchiprsquos customer notification service helps keep customers current on Microchip productsSubscribers will receive e-mail notification whenever there are changes updates revisions or erratarelated to a specified product family or development tool of interest

                                                    To register access the Microchip web site at httpwwwmicrochipcom Under ldquoSupportrdquo click onldquoCustomer Change Notificationrdquo and follow the registration instructions

                                                    Customer Support

                                                    Users of Microchip products can receive assistance through several channels

                                                    bull Distributor or Representativebull Local Sales Officebull Field Application Engineer (FAE)bull Technical Support

                                                    Customers should contact their distributor representative or Field Application Engineer (FAE) for supportLocal sales offices are also available to help customers A listing of sales offices and locations is includedin the back of this document

                                                    Technical support is available through the web site at httpwwwmicrochipcomsupport

                                                    Microchip Devices Code Protection Feature

                                                    Note the following details of the code protection feature on Microchip devices

                                                    bull Microchip products meet the specification contained in their particular Microchip Data Sheetbull Microchip believes that its family of products is one of the most secure families of its kind on the

                                                    market today when used in the intended manner and under normal conditionsbull There are dishonest and possibly illegal methods used to breach the code protection feature All of

                                                    these methods to our knowledge require using the Microchip products in a manner outside theoperating specifications contained in Microchiprsquos Data Sheets Most likely the person doing so isengaged in theft of intellectual property

                                                    bull Microchip is willing to work with the customer who is concerned about the integrity of their code

                                                    ATBTLC1000

                                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 54

                                                    bull Neither Microchip nor any other semiconductor manufacturer can guarantee the security of theircode Code protection does not mean that we are guaranteeing the product as ldquounbreakablerdquo

                                                    Code protection is constantly evolving We at Microchip are committed to continuously improving thecode protection features of our products Attempts to break Microchiprsquos code protection feature may be aviolation of the Digital Millennium Copyright Act If such acts allow unauthorized access to your softwareor other copyrighted work you may have a right to sue for relief under that Act

                                                    Legal Notice

                                                    Information contained in this publication regarding device applications and the like is provided only foryour convenience and may be superseded by updates It is your responsibility to ensure that yourapplication meets with your specifications MICROCHIP MAKES NO REPRESENTATIONS ORWARRANTIES OF ANY KIND WHETHER EXPRESS OR IMPLIED WRITTEN OR ORAL STATUTORYOR OTHERWISE RELATED TO THE INFORMATION INCLUDING BUT NOT LIMITED TO ITSCONDITION QUALITY PERFORMANCE MERCHANTABILITY OR FITNESS FOR PURPOSEMicrochip disclaims all liability arising from this information and its use Use of Microchip devices in lifesupport andor safety applications is entirely at the buyerrsquos risk and the buyer agrees to defendindemnify and hold harmless Microchip from any and all damages claims suits or expenses resultingfrom such use No licenses are conveyed implicitly or otherwise under any Microchip intellectualproperty rights unless otherwise stated

                                                    Trademarks

                                                    The Microchip name and logo the Microchip logo AnyRate AVR AVR logo AVR Freaks BeaconThingsBitCloud CryptoMemory CryptoRF dsPIC FlashFlex flexPWR Heldo JukeBlox KeeLoq KeeLoq logoKleer LANCheck LINK MD maXStylus maXTouch MediaLB megaAVR MOST MOST logo MPLABOptoLyzer PIC picoPower PICSTART PIC32 logo Prochip Designer QTouch RightTouch SAM-BASpyNIC SST SST Logo SuperFlash tinyAVR UNIO and XMEGA are registered trademarks ofMicrochip Technology Incorporated in the USA and other countries

                                                    ClockWorks The Embedded Control Solutions Company EtherSynch Hyper Speed Control HyperLightLoad IntelliMOS mTouch Precision Edge and Quiet-Wire are registered trademarks of MicrochipTechnology Incorporated in the USA

                                                    Adjacent Key Suppression AKS Analog-for-the-Digital Age Any Capacitor AnyIn AnyOut BodyComchipKIT chipKIT logo CodeGuard CryptoAuthentication CryptoCompanion CryptoControllerdsPICDEM dsPICDEMnet Dynamic Average Matching DAM ECAN EtherGREEN In-Circuit SerialProgramming ICSP Inter-Chip Connectivity JitterBlocker KleerNet KleerNet logo Mindi MiWimotorBench MPASM MPF MPLAB Certified logo MPLIB MPLINK MultiTRAK NetDetach OmniscientCode Generation PICDEM PICDEMnet PICkit PICtail PureSilicon QMatrix RightTouch logo REALICE Ripple Blocker SAM-ICE Serial Quad IO SMART-IS SQI SuperSwitcher SuperSwitcher II TotalEndurance TSHARC USBCheck VariSense ViewSpan WiperLock Wireless DNA and ZENA aretrademarks of Microchip Technology Incorporated in the USA and other countries

                                                    SQTP is a service mark of Microchip Technology Incorporated in the USA

                                                    Silicon Storage Technology is a registered trademark of Microchip Technology Inc in other countries

                                                    GestIC is a registered trademark of Microchip Technology Germany II GmbH amp Co KG a subsidiary ofMicrochip Technology Inc in other countries

                                                    All other trademarks mentioned herein are property of their respective companies

                                                    ATBTLC1000

                                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 55

                                                    copy 2018 Microchip Technology Incorporated Printed in the USA All Rights Reserved

                                                    ISBN 978-1-5224-2921-0

                                                    Quality Management System Certified by DNV

                                                    ISOTS 16949Microchip received ISOTS-169492009 certification for its worldwide headquarters design and waferfabrication facilities in Chandler and Tempe Arizona Gresham Oregon and design centers in Californiaand India The Companyrsquos quality system processes and procedures are for its PICreg MCUs and dsPICreg

                                                    DSCs KEELOQreg code hopping devices Serial EEPROMs microperipherals nonvolatile memory andanalog products In addition Microchiprsquos quality system for the design and manufacture of developmentsystems is ISO 90012000 certified

                                                    ATBTLC1000

                                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 56

                                                    AMERICAS ASIAPACIFIC ASIAPACIFIC EUROPECorporate Office2355 West Chandler BlvdChandler AZ 85224-6199Tel 480-792-7200Fax 480-792-7277Technical SupporthttpwwwmicrochipcomsupportWeb AddresswwwmicrochipcomAtlantaDuluth GATel 678-957-9614Fax 678-957-1455Austin TXTel 512-257-3370BostonWestborough MATel 774-760-0087Fax 774-760-0088ChicagoItasca ILTel 630-285-0071Fax 630-285-0075DallasAddison TXTel 972-818-7423Fax 972-818-2924DetroitNovi MITel 248-848-4000Houston TXTel 281-894-5983IndianapolisNoblesville INTel 317-773-8323Fax 317-773-5453Tel 317-536-2380Los AngelesMission Viejo CATel 949-462-9523Fax 949-462-9608Tel 951-273-7800Raleigh NCTel 919-844-7510New York NYTel 631-435-6000San Jose CATel 408-735-9110Tel 408-436-4270Canada - TorontoTel 905-695-1980Fax 905-695-2078

                                                    Australia - SydneyTel 61-2-9868-6733China - BeijingTel 86-10-8569-7000China - ChengduTel 86-28-8665-5511China - ChongqingTel 86-23-8980-9588China - DongguanTel 86-769-8702-9880China - GuangzhouTel 86-20-8755-8029China - HangzhouTel 86-571-8792-8115China - Hong Kong SARTel 852-2943-5100China - NanjingTel 86-25-8473-2460China - QingdaoTel 86-532-8502-7355China - ShanghaiTel 86-21-3326-8000China - ShenyangTel 86-24-2334-2829China - ShenzhenTel 86-755-8864-2200China - SuzhouTel 86-186-6233-1526China - WuhanTel 86-27-5980-5300China - XianTel 86-29-8833-7252China - XiamenTel 86-592-2388138China - ZhuhaiTel 86-756-3210040

                                                    India - BangaloreTel 91-80-3090-4444India - New DelhiTel 91-11-4160-8631India - PuneTel 91-20-4121-0141Japan - OsakaTel 81-6-6152-7160Japan - TokyoTel 81-3-6880- 3770Korea - DaeguTel 82-53-744-4301Korea - SeoulTel 82-2-554-7200Malaysia - Kuala LumpurTel 60-3-7651-7906Malaysia - PenangTel 60-4-227-8870Philippines - ManilaTel 63-2-634-9065SingaporeTel 65-6334-8870Taiwan - Hsin ChuTel 886-3-577-8366Taiwan - KaohsiungTel 886-7-213-7830Taiwan - TaipeiTel 886-2-2508-8600Thailand - BangkokTel 66-2-694-1351Vietnam - Ho Chi MinhTel 84-28-5448-2100

                                                    Austria - WelsTel 43-7242-2244-39Fax 43-7242-2244-393Denmark - CopenhagenTel 45-4450-2828Fax 45-4485-2829Finland - EspooTel 358-9-4520-820France - ParisTel 33-1-69-53-63-20Fax 33-1-69-30-90-79Germany - GarchingTel 49-8931-9700Germany - HaanTel 49-2129-3766400Germany - HeilbronnTel 49-7131-67-3636Germany - KarlsruheTel 49-721-625370Germany - MunichTel 49-89-627-144-0Fax 49-89-627-144-44Germany - RosenheimTel 49-8031-354-560Israel - RarsquoananaTel 972-9-744-7705Italy - MilanTel 39-0331-742611Fax 39-0331-466781Italy - PadovaTel 39-049-7625286Netherlands - DrunenTel 31-416-690399Fax 31-416-690340Norway - TrondheimTel 47-7289-7561Poland - WarsawTel 48-22-3325737Romania - BucharestTel 40-21-407-87-50Spain - MadridTel 34-91-708-08-90Fax 34-91-708-08-91Sweden - GothenbergTel 46-31-704-60-40Sweden - StockholmTel 46-8-5090-4654UK - WokinghamTel 44-118-921-5800Fax 44-118-921-5820

                                                    Worldwide Sales and Service

                                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 57

                                                    • Introduction
                                                    • Table of Contents
                                                    • 1 Getting Started
                                                      • 11 Software Prerequisites
                                                        • 111 Installation Steps of Atmel Studio 7
                                                          • 12 Software Setup
                                                            • 121 Installation of Microchip SmartConnect application on a Mobile device
                                                              • 13 ATBTLC1000 Embedded Firmware
                                                              • 14 ATBTLC1000 Host Software API
                                                              • 15 Hardware Prerequisites
                                                                • 151 SMARTtrade SAM L21 Xplained Pro
                                                                • 152 ATBTLC1000ZR Xplained Pro Extension board
                                                                  • 16 Hardware Setup
                                                                    • 2 Creating the Project and Initializing
                                                                      • 21 Creating Project from ASF
                                                                      • 22 Configuring ASF for ATBTLC1000-ZR
                                                                      • 23 Compiling and Testing the Project
                                                                        • 3 Establishing Connection with Central Device
                                                                          • 31 Configuring and Starting the Advertisement Process
                                                                            • 311 Flags (AD Type 0x00)
                                                                            • 312 Available Service UUID (AD Types 0x02 to 0x07)
                                                                            • 313 Device Name (AD Types 0x08 to 0x09)
                                                                              • 3131 Setting the Advertisement Payload (ble_advertisement_data_set)
                                                                              • 3132 Starting the Advertisement Process (at_ble_adv_start)
                                                                                • 314 Advertisement Process
                                                                                  • 3141 Starting the Advertisement Process
                                                                                      • 32 Managing GAP events
                                                                                        • 321 Handling of Connected and Disconnected GAP Events
                                                                                            • 4 SettingHandling of Pre-Defined Service
                                                                                              • 41 Adding Device Info Service Component from ASF Wizard to Project
                                                                                              • 42 Configuring and Loading Device Information Service
                                                                                                • 421 Procedure to Configure and Load Device Info Service
                                                                                                    • 5 Setting up and Handling Custom Service
                                                                                                      • 51 Configuring and Loading the Custom Environment Service
                                                                                                        • 511 Procedure to Configure and Load Custom Environment Service
                                                                                                          • 52 Updating the Temperature Characteristic
                                                                                                            • 521 Setting a Characteristic Value ( at_ble_characteristic_value_set)
                                                                                                            • 522 Sending a Notification (at_ble_notification_send)
                                                                                                            • 523 Sending Temperature Information Once in Every 10 Seconds to Central
                                                                                                                • 6 Appendix A Software Solution - Pre-Defined Svc
                                                                                                                • 7 Appendix B Software Solution - Custom Service
                                                                                                                • 8 Document Revision History
                                                                                                                • The Microchip Web Site
                                                                                                                • Customer Change Notification Service
                                                                                                                • Customer Support
                                                                                                                • Microchip Devices Code Protection Feature
                                                                                                                • Legal Notice
                                                                                                                • Trademarks
                                                                                                                • Quality Management System Certified by DNV
                                                                                                                • Worldwide Sales and Service

                                                      ble_event_callback_t conn_parameter_update_done Connection parameter update request from peer device Refer ref at_ble_conn_param_update_request_tble_event_callback_t conn_param_update_request Pair complete event as part of end of pairing process Refer ref at_ble_pair_done_tble_event_callback_t pair_done Pair request event from Central device Refer ref at_ble_pair_request_tble_event_callback_t pair_request Slave security request received from peer Peripheral device Refer ref at_ble_slave_sec_request_tble_event_callback_t slave_sec_request Pair Key request event from Peer central device Refer ref at_ble_pair_key_request_tble_event_callback_t pair_key_request encryption request comes from the peer device Needs to supply the bonding information which is stored earlier ref at_ble_encryption_request_tble_event_callback_t encryption_request encryption status changed event received from SMP once the encryption is started ref at_ble_encryption_status_changed_tble_event_callback_t encryption_status_changed Event triggered once the Resolve random address is resolved using supplied IRKs ref at_ble_resolv_rand_addr_status_tble_event_callback_t resolv_rand_addr_status Event is triggered once the connection signature information indication received ref at_ble_sign_counter_tble_event_callback_t sign_counters_ind Peer attribute information indication received Event ref at_ble_peer_att_info_ind_tble_event_callback_t peer_att_info_ind Peer device channel map received indication ref at_ble_channel_map_tble_event_callback_t con_channel_map_indble_gap_event_cb_t

                                                      Note  Callback definition is application-specific If the application layer requires a specific event callbackthen the specific member of the structure is to be assigned with the address of the callback function

                                                      In this assignment two callback functions on Connected and Disconnected GAP events are usedThis allows the application to restart the advertising process on Disconnect manage connectioninformation and startstop of sensor data update

                                                      321 Handling of Connected and Disconnected GAP Events1 Open the startup_templatec file2 Define the following software flags as global variables in startup_templatec file volatile

                                                      bool timer_flag = false and volatile bool connected_flag = false3 Declare and implement the following ble_connected_cb function in the

                                                      startup_templatec file Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param)printf(n Assignment 22 Application connected )connected_flag = trueALL_UNUSED(param)return AT_BLE_SUCCESS

                                                      4 Declare and implement the following ble_disconnected_cb function instartup_templatec file Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param)printf(n Assignment 22 Application disconnected )connected_flag = falsestart_advertisement()ALL_UNUSED(param)return AT_BLE_SUCCESS

                                                      ATBTLC1000Establishing Connection with Central Device

                                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 27

                                                      5 Declare the following static GAP callback structure in ldquostartup_templatecrdquo filestatic const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTEDdisconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                                                      6 Add the following register_btlc1000_callbacks function in startup_templatec Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void) Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks)ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACKBLE_GAP_EVENT_TYPEampapp_gap_handle)if (ble_status = true)printf(nError when Registering ATBTLC1000 callbacks)

                                                      7 Add the register_btlc1000_callbacks function call prior to start advertisement in theapplication main routineint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Gap Callbacks register_btlc1000_callbacks ( ) Start Advertising process start_advertisement() Register PrimaryIncluded service in case of GATT Server while(true) Write application task

                                                      8 Add the ble_event_task function call in the project main loop to handle the different incomingevents from ATBTLC1000while(true)ble_event_task()

                                                      9 Press button ltF7gt to compile the project and verify that no build error appear in the AtmelStudio output window

                                                      ATBTLC1000Establishing Connection with Central Device

                                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 28

                                                      Figure 3-10 Atmel Studio Output Window

                                                      10 Click ldquo rdquo to save the project ltCtrl+Sgt

                                                      11 Click ldquo rdquo to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt and checkcorrect initialization of the ATBTLC1000

                                                      12 Open the Microchip SmartConnect application on Androidtrade or iOS device13 Press the ltStart Scangt button and pair peripherals by selecting them in the device list (pass key

                                                      123456)Note 

                                                      1 Pairing event handling is carried out by ble_managerc Refer toble_pair_key_request_handler() for code implementation The default pass key of123456 is also fixed inside this function This can be changed here

                                                      Figure 3-11 Console Log Window

                                                      Note  After peripheral pairing no services information are displayed in Microchip SmartConnectapplication as no service is currently defined and started on peripheral side

                                                      ATBTLC1000Establishing Connection with Central Device

                                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 29

                                                      4 SettingHandling of Pre-Defined ServiceThe management of services are done in the GATT layer of the ATBTLC1000 ROM coded Bluetooth LowEnergy Stack The GATT transactions are based on high-level nested objects called Profiles Servicesand Characteristics stored in SRAM memory of ATBTLC1000 device This assignment adds the pre-defined service of information service from ASF library

                                                      Figure 4-1 ATBTLC1000 GATT Layers

                                                      bull ProfilesProfiles are not available in the Bluetooth Low Energy peripheral they are simply a pre-definedcollection of services that have been compiled by either the Bluetooth SIG (adopted GATT basedprofile) or by the application developer (custom profiles) For example the Heart Rate Profilecombines the Heart Rate Service and the Device Information Service

                                                      Note  The complete list of officially adopted GATT-based profiles is available on the BluetoothDeveloper Portal

                                                      bull ServicesA service is a collection of data and associated behaviors which accomplish a particular function orfeature of a device or portions of a device A service may reference other primary or secondaryservices andor a set of characteristics that make up the service Each service distinguishes itselffrom other services by means of a unique numeric ID called as UUID which can be either 16-bit(for officially adopted Bluetooth Low Energy Services) or 128-bit (for custom services)

                                                      Note  A full list of officially adopted services and their UUID are seen on the Bluetooth DeveloperPortal

                                                      bull CharacteristicsA characteristic is the lowest level concept in GATT transactions It contains a single data point withdifferent attributes such as notify read or write capabilities Similar to Services each characteristiccan be distinguished by a SIG-defined adopted UUID (16-bit) or custom (128-bit) UUID This UUIDensures interoperability across Bluetooth Low Energy devices The characteristics are important tointeract with in a Bluetooth Low Energy network In addition to standard UUID the custom UUID isused in case of specific application When characteristics with custom UUID are used in a devicethen it will be interoperable only with those devices that support these characteristics with customUUID

                                                      ATBTLC1000SettingHandling of Pre-Defined Service

                                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 30

                                                      In this assignment the following steps are added to the Host MCU application to set up and handle adevice information service within the ATBTLC1000 module The following steps are added to the startupproject

                                                      bull Adding device info service component from ASFbull Configuring and loading the service

                                                      Figure 4-2 Device Information Service

                                                      41 Adding Device Info Service Component from ASF Wizard to ProjectTo use the ldquoofficially adopted GATT-based profilesrdquo from SIG ASF provides Bluetooth Low Energy servicecomponents including init functions that pre-define services in Host memory

                                                      Note  Before starting this assignment be sure to follow the steps mentioned in 2 Creating the Projectand Initializing and 3 Establishing Connection with Central Device

                                                      1 Click ASF gt ASF Wizard2 Search for ldquoBLE-Device Information Servicesrdquo and then click Add

                                                      ATBTLC1000SettingHandling of Pre-Defined Service

                                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 31

                                                      Figure 4-3 Available Modules

                                                      3 Now ldquoBLE-Device Information Servicesrdquo (component) appears in ldquoSelected ModulesrdquoFigure 4-4 Selected Modules

                                                      4 Click Apply to add the component to the projectFigure 4-5 Adding the Modules to Project

                                                      5 The ldquoDevice Information Servicerdquo component is added to the project and is confirmed bydevice_information folder added in Solution Explorer

                                                      ATBTLC1000SettingHandling of Pre-Defined Service

                                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 32

                                                      Figure 4-6 Device Information Service Added to Project

                                                      42 Configuring and Loading Device Information ServiceThe ATBTLC1000 Host driver provides a set of GATT functions that allows storing and updating theservices in ATBTLC1000 memories

                                                      Prototype at_ble_status_t at_ble_primary_service_define(at_ble_uuid_t uuidat_ble_handle_t service_handleat_ble_included_service_t included_service_listuint16_t included_service_countat_ble_characteristic_t charactristic_listuint16_t charactristic_count)

                                                      Description Defines a new primary service along with its included services and characteristics inATBTLC1000

                                                      Parameters

                                                      bull Uuid [In] ndash primary service UUIDbull service_handle [Out] ndash Service handle is returned herebull included_service_list [In] ndash an array of included service referencesbull included_service_count [In] ndash number of elements in included_service_listbull charactristic_list [InOut] ndash an array of characteristics included in the service this array

                                                      is updated with respective characteristics handlesbull charactristic_count[In] ndash number of elements in charactristic_list

                                                      Return Execution Status

                                                      This function requires an argument as GATT description structure of the service that is implemented Thepreviously added Device Info service component provides Bluetooth Low Energy service middlewareincluding the init functions that predefine the services See below ldquodis_init_servicerdquo from device infoBLE service (device_infohc)

                                                      Prototype ndash void dis_init_service(dis_gatt_service_handler_t device_info_serv)Description ndash Initialize the device information service handler in the host MCU memory

                                                      Parameters ndash

                                                      ATBTLC1000SettingHandling of Pre-Defined Service

                                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 33

                                                      bull device_info_serv [Inout] pointer to device info GATT description handler to beupdated

                                                      Return None

                                                      Here is a picture of GATT device info service descriptor definition in Host memory

                                                      device_info_serv-gtserv_handle = 0device_info_serv-gtserv_uuidtype = AT_BLE_UUID_16device_info_serv-gtserv_uuiduuid[0] = (uint8_t) DIS_SERVICE_UUIDdevice_info_serv-gtserv_uuiduuid[1] = (uint8_t) (DIS_SERVICE_UUID gtgt 8)Characteristic Info for Manufacturer Name Stringdevice_info_serv-gtserv_chars[0]char_val_handle = 0 handle stored here device_info_serv-gtserv_chars[0]uuidtype = AT_BLE_UUID_16device_info_serv-gtserv_chars[0]uuiduuid[0] = (uint8_t) IS_CHAR_MANUFACTURER_NAME_UUID UUID Manufacturer Name String device_info_serv-gtserv_chars[0]uuiduuid[1] = (uint8_t) (DIS_CHAR_MANUFACTURER_NAME_UUID gtgt 8) UUID Manufacturer Name String device_info_serv-gtserv_chars[0]properties = AT_BLE_CHAR_READ Properties memcpy(char_valuemanufacturer_nameDEFAULT_MANUFACTURER_NAMEDIS_CHAR_MANUFACTURER_NAME_INIT_LEN)device_info_serv-gtserv_chars[0]init_value = char_valuemanufacturer_namedevice_info_serv-gtserv_chars[0]value_init_len = DIS_CHAR_MANUFACTURER_NAME_INIT_LENdevice_info_serv-gtserv_chars[0]value_max_len = DIS_CHAR_MANUFACTURER_NAME_MAX_LENif BLE_PAIR_ENABLEdevice_info_serv-gtserv_chars[0]value_permissions = AT_BLE_ATTR_READABLE_REQ_AUTHN_NO_AUTHR permissions elsedevice_info_serv-gtserv_chars[0]value_permissions = AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR permissions endifdevice_info_serv-gtserv_chars[0]user_desc = NULL user defined name device_info_serv-gtserv_chars[0]user_desc_len = 0device_info_serv-gtserv_chars[0]user_desc_max_len = 0device_info_serv-gtserv_chars[0]user_desc_permissions = AT_BLE_ATTR_NO_PERMISSIONS user description permissionsdevice_info_serv-gtserv_chars[0]client_config_permissions = AT_BLE_ATTR_NO_PERMISSIONS client config permissionsdevice_info_serm hdsv-gtserv_chars[0]server_config_permissions = AT_BLE_ATTR_NO_PERMISSIONS server config permissionsdevice_info_serv-gtserv_chars[0]user_desc_handle = 0 user desc handlesdevice_info_serv-gtserv_chars[0]client_config_handle = 0 client config handlesdevice_info_serv-gtserv_chars[0]server_config_handle = 0 server config handlesdevice_info_serv-gtserv_chars[0]presentation_format = NULL presentation format

                                                      Note  In case of custom service the above definition initialization must be taken care of by thedeveloper

                                                      421 Procedure to Configure and Load Device Info Service1 Include device info service header file (device_infoh) at the beginning of

                                                      startup_templatec fileinclude ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehinclude device_infoh

                                                      2 Define a device info service handler as global in startup_templatec file Serviceshandlers dis_gatt_service_handler_t dis_service_handler

                                                      ATBTLC1000SettingHandling of Pre-Defined Service

                                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 34

                                                      3 Add dis_init_service and at_ble_primary_service_define functions as called abovethe advertisement start in main routine Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service)dis_init_service (ampdis_service_handler) Define the primary service in the GATT server database if ((dis_primary_service_define (ampdis_service_handler)) = AT_BLE_SUCCESS)printf(Device Information Service definition failed) Start Advertising process start_advertisement()

                                                      4 Click to save the project ltCtrl+Sgt and compile the project by pressing button ltF7gt5 Verify that no build error appears in Atmel Studio output window

                                                      Figure 4-7 Atmel Studio Output Window

                                                      6 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt7 Open ldquoMicrochip SmartConnectrdquo application on Android or iOS device8 Press ltStart Scangt button and connect to peripheral

                                                      Note  The device name is a characteristic and contains the name of the device This device namecan be read by the central device to know the name of the device in order to differentiate thedevices This is being set using at_ble_device_name_set()API The device name is set bydefault when ble_device_init is called and the value is pre-defined using BLE_DEVICE_NAMEThe device name can also be sent as part of advertisement payload to be same as the oneconfigured in at_ble_adv_data_set() API It is the responsibility of users to keep the devicename set in advertisement payload the same as that configured inat_ble_device_name_set()

                                                      9 The Service must now be visible after pairing with peripheral under Microchip SmartConnectapplication

                                                      ATBTLC1000SettingHandling of Pre-Defined Service

                                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 35

                                                      Figure 4-8 Service List in Microchip SmartConnect Application

                                                      Note  If the pairing of ATBTLC1000 with Microchip Smart connect is not successful then removethe pairing information from mobile by selecting ldquoForget Devicerdquo from the mobile settings Thereason for this is that the mobile app stores the previous pairing information but the ATBTLC1000device lost the previous pairing information due to RESET since it was stored on temporary storage(RAM)

                                                      10 The serial terminal must display the following log output windowFigure 4-9 Console Log Window

                                                      ATBTLC1000SettingHandling of Pre-Defined Service

                                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 36

                                                      5 Setting up and Handling Custom ServiceThe previous assignment describes the handling of Bluetooth Low Energy SIG defined device infoservice which is the predefined service available in ASF component This assignment describes thecustom service So the service initialization needs to be implemented In the context of customizedenvironment service the following service description is pushed in ATBTLC1000 memory

                                                      Figure 5-1 Custom Service

                                                      Custom Environment Service Description

                                                      bull UUID type ndash Custom UUID (128-bit)bull UUID ndash 1bc5d5a5-0200-a687-e511-3639c1ba5af0

                                                      Characteristic 0 (Temperature)

                                                      bull User Description ndash Temperaturebull UUID type ndash Custom UUID (128-bit)bull UUID ndash 1bc5d5a5-0200-a687-e511-3639d8ba5af0bull Properties ndash Read Notifybull Value permission ndash No authorization requiredbull Client config permission ndash No permissionbull Server config permission ndash No permission

                                                      Note  In this definition UUIDs are generated randomly Custom servicescharacteristics are free to useany 128-bit UUID less than the base UUID There is no reserved space for vendors to use 16-bit or 32-bitUUIDs

                                                      With this definition any temperature change is notified to the central The notify mechanism allows thecentral to know when the data changes When notify property of the Client Characteristic ConfigurationDescriptor is enabled by the central and the device writes the new value then this updated value isautomatically sent to the central through a notification The central is not required to send readcharacteristic commands explicitly to the peripheral (GATT server)

                                                      To setup and handle the custom environment service in ATBTLC1000 module the following steps areadded to the Host MCU application

                                                      bull Configure and load the custom servicebull Update Temperature characteristic and notify to the central devicebull Receive and handle notification from the Host device

                                                      ATBTLC1000Setting up and Handling Custom Service

                                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 37

                                                      Figure 5-2 Custom Service Flowchart

                                                      51 Configuring and Loading the Custom Environment ServiceThe ATBTLC1000 Host driver provides the following set of GATT functions that allows it to push andupdate the service descriptions in the ATBTLC1000 SRAM memory

                                                      Note  Before starting this assignment be sure to follow the steps mentioned in 2 Creating the Projectand Initializing and 3 Establishing Connection with Central Device

                                                      Prototype ndashat_ble_status_t at_ble_primary_service_define(at_ble_uuid_t uuidat_ble_handle_t service_handleat_ble_included_service_t included_service_listuint16_t included_service_countat_ble_characteristic_t charactristic_listuint16_t charactristic_count)

                                                      Description ndash Defines a new primary service along with its included services and characteristics inATBTLC1000 module

                                                      Parameters

                                                      bull Uuid [In] ndash primary service UUIDbull service_handle [Out] ndash service handle is returned herebull included_service_list [In] ndash array of included service referencesbull included_service_count [In] ndash number of elements in included_service_listbull charactristic_list [InOut] ndash an array of characteristics included in the service this array

                                                      is update with respective characteristics handlesbull charactristic_count[In] ndash number of elements in charactristic_list

                                                      ATBTLC1000Setting up and Handling Custom Service

                                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 38

                                                      Return ndash Execution Status

                                                      bull Characteristics ndashndash Characteristics definition is done through specific array of following

                                                      ldquoat_ble_characteristic_trdquo structure instancestypedef structat_ble_handle_t char_val_handle Handler (returned during service initialisation)at_ble_uuid_t uuid Characteristic UUID (type and value)at_ble_char_properties_t propertiesCharac Properties (read write notify)uint8_t init_value initial valueuint16_t value_init_len initial value lengthuint16_t value_max_len value max lengthat_ble_attr_permissions_t value_permissions access authorization and authenticationuint8_t user_desc User descriptionuint16_t user_desc_len User description lengthuint16_t user_desc_max_len User description max lengthat_ble_char_presentation_t presentation_format Presentation formatat_ble_attr_permissions_t user_desc_permissions User description permissionat_ble_attr_permissions_t client_config_permissions client permissionat_ble_attr_permissions_t server_config_permissions server permissionat_ble_handle_t user_desc_handle description handlerat_ble_handle_t client_config_handle Client config handlerat_ble_handle_t server_config_handle Server config handler at_ble_characteristic_t

                                                      511 Procedure to Configure and Load Custom Environment Service1 Define the following service UUID and characteristic UUID in startup_templatec file

                                                      define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

                                                      2 Define the following environment service handler and characteristics variable as global instartup_templatec file Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

                                                      3 Add the following service initialization function custom_environment_service_init instartup_templatecvoid custom_environment_service_init(void) at_ble_uuid_t environment_service_uuiduint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUIDuint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperatureenvironment_service_characs[0]user_desc_len = 10environment_service_characs[0]user_desc_max_len = 10environment_service_characs[0]uuidtype = AT_BLE_UUID_128memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16)environment_service_characs[0]properties = AT_BLE_CHAR_READ |AT_BLE_CHAR_NOTIFYenvironment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature valueenvironment_service_characs[0]value_permissions =(AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuidampenvironment_service_handlerNULL0environment_service_characs1)=AT_BLE_SUCCESS)printf(n Assignment 41 Failed to Initialize custom environment service)

                                                      ATBTLC1000Setting up and Handling Custom Service

                                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 39

                                                      elseprintf(n Assignment 41 Initialize custom environment service)

                                                      4 Declare and implement the following GATT event callback functioncustom_char_changed_app_event in startup_templatec file If a client (central) enablesnotifications for a server the server (peripheral) receives an AT_BLE_CHARACTERISTIC_CHANGEDevent and this event callback is called Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

                                                      5 Declare and implement the following custom_notification_confirmation_handlerfunction in startup_templatec file Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param)at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )paramif (event_param-gtstatus == AT_BLE_SUCCESS)printf(n Assignment 41Notification Successfully sent over the air) else printf(n Assignment 41Sending Notification over the air failed)return AT_BLE_SUCCESS

                                                      6 Declare the following GATT server callback structure in startup_templatec file Thisassignment uses two GATT callbacksstatic const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handlercharacteristic_changed = custom_char_changed_app_event

                                                      7 Add the following register_gatt_server_callbacks function in startup_templatec toregister GATT server callback for notification confirmation event Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks)ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACKBLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle)if (ble_status = true)printf(nError when Registering ATBTLC1000 callbacks)

                                                      8 Add custom_environment_service_init and register_gatt_server_callbacksfunction calls prior to start advertisement in the application main routine to initialize custom serviceand to register the GATT server callbacksint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()

                                                      ATBTLC1000Setting up and Handling Custom Service

                                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 40

                                                      endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks() Custom service init custom_environment_service_init ( ) Register Gatt server callbacks register_gatt_server_callbacks ( ) Start Advertising process start_advertisement()while(true)ble_event_task()

                                                      9 Click to save the project ltCtrl+Sgt

                                                      10 Compile the project by pressing button ltF7gt11 Verify that no build error appears in the Atmel Studio output window

                                                      Figure 5-3 Atmel Studio Output Window

                                                      12 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt13 Open the ldquoMicrochip SmartConnectrdquo application on Android or iOS device14 Connect and pair to the peripheral (pass key 123456)15 Custom service must now be visible after pairing with peripheral under Microchip SmartConnect

                                                      application

                                                      ATBTLC1000Setting up and Handling Custom Service

                                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 41

                                                      Figure 5-4 Service List in Microchip SmartConnect Application

                                                      Note  Custom service is displayed as unknown service in the above figure as this service is not aSIG-defined service

                                                      Figure 5-5 General Information

                                                      16 Serial terminal client must display the following Log output

                                                      ATBTLC1000Setting up and Handling Custom Service

                                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 42

                                                      Figure 5-6 Log Output Window

                                                      52 Updating the Temperature CharacteristicIn the previous assignment the custom Temperature characteristic is defined with a notify attribute Thistype of attribute requires notification to be sent to central when a new characteristic value is availableThe update of any ldquonotifyrdquo characteristic value is based on following interaction between the Host MCUand the ATBTLC1000Figure 5-7 Characteristic Notification

                                                      521 Setting a Characteristic Value ( at_ble_characteristic_value_set)Prototype ndashat_ble_status_t at_ble_characteristic_value_setat_ble_handle_t handleuint8_t valueuint16_t len)

                                                      Description ndash Sets a characteristic value in ATBTLC1000 memory

                                                      Parameters ndash

                                                      ATBTLC1000Setting up and Handling Custom Service

                                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 43

                                                      bull handle [inout] ndash Pointer to Characteristic handle to be changedbull value [in] ndash New valuebull len [in] ndash Value length in bytes

                                                      Return ndash Execution Status

                                                      522 Sending a Notification (at_ble_notification_send)Prototype ndashat_ble_status_t at_ble_notification_send(at_ble_handle_t conn_handleat_ble_handle_t attr_handle)

                                                      Description ndash Sends a Notification

                                                      Parameters ndash

                                                      bull conn_handle[in] ndash handle of the connection to be notifiedbull attr_handle [in] ndash handle of the attribute originating the notification

                                                      Return ndash Execution Status

                                                      523 Sending Temperature Information Once in Every 10 Seconds to Central1 Modify the following ldquotimer_callback_fnrdquo callback function from the startup_templatec

                                                      filestatic void timer_callback_fn(void)timer_flag = true

                                                      2 hw_timer_init()in main routine of startup_templatec initializes the hardware timer3 If a client (Central) enables the notifications for a server the server (Peripheral) receives an

                                                      AT_BLE_CHARACTERISTIC_CHANGED event callback then start the periodic 10 second timer forsending the notification Add the following code in previously definedcustom_char_changed_app_event function Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))timer_flag = falsehw_timer_start(10)printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

                                                      4 Declare the following Temperature_value global variable in startup_templatec staticuint8_t Temperature_value = 25 as static

                                                      5 Add the following send_temperature_notification function in startup_templatec tosend temperature every 10 seconds Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++

                                                      ATBTLC1000Setting up and Handling Custom Service

                                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 44

                                                      if(Temperature_value gt 75)Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set(environment_service_characs[0]char_val_handle(uint8_t )ampTemperature_valuesizeof(Temperature_value))ble_status = at_ble_notification_send(0environment_service_characs[0]char_val_handle)if(ble_status = AT_BLE_SUCCESS)printf(fail to send temperature update notification )

                                                      6 Add the following code in main routine to send temperature data every 10 secondswhile (1) ble_event_task()if(connected_flag == true ampamp timer_flag == truetimer_flag = falsesend_temperature_notification()

                                                      7 Click to save the project ltCtrl+Sgt

                                                      8 Compile the project by pressing the button ltF7gt9 Verify that no build error appears in Atmel Studio output window

                                                      Figure 5-8 Atmel Studio Output Window

                                                      10 Click to program the project binary on the L21 Xplained XSTK11 Open ldquoMicrochip SmartConnectrdquo Application on Android or iOS device12 Connect and pair to the peripheral (pass key 123456)13 Click NOTIFY to start the notification14 Temperature information in HEX values must be displayed in Microchip SmartConnect application

                                                      ATBTLC1000Setting up and Handling Custom Service

                                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 45

                                                      Figure 5-9 Notification Window

                                                      15 Serial terminal must display the following log outputFigure 5-10 Log Output Window

                                                      ATBTLC1000Setting up and Handling Custom Service

                                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 46

                                                      6 Appendix A Software Solution - Pre-Defined SvcThe following is the code implementation for handling of pre-defined service done in 4 SettingHandlingof Pre-Defined Service

                                                      - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehinclude device_infoh

                                                      volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false Services handlers dis_gatt_service_handler_t dis_service_handler

                                                      static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

                                                      void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                                                      Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                                                      Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                                                      static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                                                      Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void) Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks)

                                                      ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

                                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 47

                                                      ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                                      timer callback function static void timer_callback_fn(void) Add timer callback functionality here

                                                      void button_cb(void) Add button callback functionality here

                                                      int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                                                      Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                                                      DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks()

                                                      Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service) dis_init_service(ampdis_service_handler) Define the primary service in the GATT server database if((dis_primary_service_define(ampdis_service_handler)) = AT_BLE_SUCCESS) printf(Device Information Service definition failed)

                                                      Start Advertising process start_advertisement() while(true) ble_event_task()

                                                      ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

                                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 48

                                                      7 Appendix B Software Solution - Custom ServiceThe following is the code implementation for handling of pre-defined service done in 5 Setting up andHandling Custom Service

                                                      - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templateh

                                                      volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false

                                                      static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

                                                      define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0

                                                      define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

                                                      Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

                                                      void custom_environment_service_init(void) at_ble_uuid_t environment_service_uuid uint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUID uint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128 memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperature environment_service_characs[0]user_desc_len = 10 environment_service_characs[0]user_desc_max_len = 10 environment_service_characs[0]uuidtype = AT_BLE_UUID_128 memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16) environment_service_characs[0]properties = AT_BLE_CHAR_READ | AT_BLE_CHAR_NOTIFY environment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature value environment_service_characs[0]value_permissions = (AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuid ampenvironment_service_handlerNULL0 environment_service_characs1)=AT_BLE_SUCCESS) printf(n Assignment 41 Failed to Initialize custom environment service) else printf(n Assignment 41 Initialize custom environment service)

                                                      Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param) at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )param if (event_param-gtstatus == AT_BLE_SUCCESS) printf(n Assignment 41Notification Successfully sent over the air)

                                                      ATBTLC1000Appendix B Software Solution - Custom Service

                                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 49

                                                      else printf(n Assignment 41Sending Notification over the air failed) return AT_BLE_SUCCESS

                                                      static at_ble_status_t custom_char_changed_app_event(void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle -gt char_new_value[0])) timer_flag = false hw_timer_start(10) printf(n Assignment 41Characteristic changed event) return AT_BLE_SUCCESS

                                                      static const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handler characteristic_changed = custom_char_changed_app_event

                                                      Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                                      void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                                                      Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                                                      Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                                                      static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                                                      Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void)

                                                      ATBTLC1000Appendix B Software Solution - Custom Service

                                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 50

                                                      Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                                      timer callback function static void timer_callback_fn(void) Add timer callback functionality here timer_flag = true

                                                      void button_cb(void) Add button callback functionality here

                                                      static uint8_t Temperature_value = 25

                                                      Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++ if(Temperature_value gt 75) Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set( environment_service_characs[0]char_val_handle (uint8_t )ampTemperature_value sizeof(Temperature_value)) ble_status = at_ble_notification_send(0 environment_service_characs[0]char_val_handle) if(ble_status = AT_BLE_SUCCESS) printf(fail to send temperature update notification )

                                                      int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                                                      Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                                                      DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register Gap ATBTLC1000 Callbacks register_btlc1000_callbacks()

                                                      Custom service init custom_environment_service_init()

                                                      ATBTLC1000Appendix B Software Solution - Custom Service

                                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 51

                                                      Register Gatt server callback register_gatt_server_callbacks()

                                                      Start Advertising process start_advertisement() while(true) ble_event_task() if(connected_flag == true ampamp timer_flag == true) timer_flag = false send_temperature_notification()

                                                      ATBTLC1000Appendix B Software Solution - Custom Service

                                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 52

                                                      8 Document Revision HistoryRev B - 42018

                                                      Section Changes

                                                      Document Revised contents to match various Bluetooth Low Energy standard versions

                                                      Rev A - 122017

                                                      Section Changes

                                                      Document Initial release

                                                      ATBTLC1000Document Revision History

                                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 53

                                                      The Microchip Web Site

                                                      Microchip provides online support via our web site at httpwwwmicrochipcom This web site is used asa means to make files and information easily available to customers Accessible by using your favoriteInternet browser the web site contains the following information

                                                      bull Product Support ndash Data sheets and errata application notes and sample programs designresources userrsquos guides and hardware support documents latest software releases and archivedsoftware

                                                      bull General Technical Support ndash Frequently Asked Questions (FAQ) technical support requestsonline discussion groups Microchip consultant program member listing

                                                      bull Business of Microchip ndash Product selector and ordering guides latest Microchip press releaseslisting of seminars and events listings of Microchip sales offices distributors and factoryrepresentatives

                                                      Customer Change Notification Service

                                                      Microchiprsquos customer notification service helps keep customers current on Microchip productsSubscribers will receive e-mail notification whenever there are changes updates revisions or erratarelated to a specified product family or development tool of interest

                                                      To register access the Microchip web site at httpwwwmicrochipcom Under ldquoSupportrdquo click onldquoCustomer Change Notificationrdquo and follow the registration instructions

                                                      Customer Support

                                                      Users of Microchip products can receive assistance through several channels

                                                      bull Distributor or Representativebull Local Sales Officebull Field Application Engineer (FAE)bull Technical Support

                                                      Customers should contact their distributor representative or Field Application Engineer (FAE) for supportLocal sales offices are also available to help customers A listing of sales offices and locations is includedin the back of this document

                                                      Technical support is available through the web site at httpwwwmicrochipcomsupport

                                                      Microchip Devices Code Protection Feature

                                                      Note the following details of the code protection feature on Microchip devices

                                                      bull Microchip products meet the specification contained in their particular Microchip Data Sheetbull Microchip believes that its family of products is one of the most secure families of its kind on the

                                                      market today when used in the intended manner and under normal conditionsbull There are dishonest and possibly illegal methods used to breach the code protection feature All of

                                                      these methods to our knowledge require using the Microchip products in a manner outside theoperating specifications contained in Microchiprsquos Data Sheets Most likely the person doing so isengaged in theft of intellectual property

                                                      bull Microchip is willing to work with the customer who is concerned about the integrity of their code

                                                      ATBTLC1000

                                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 54

                                                      bull Neither Microchip nor any other semiconductor manufacturer can guarantee the security of theircode Code protection does not mean that we are guaranteeing the product as ldquounbreakablerdquo

                                                      Code protection is constantly evolving We at Microchip are committed to continuously improving thecode protection features of our products Attempts to break Microchiprsquos code protection feature may be aviolation of the Digital Millennium Copyright Act If such acts allow unauthorized access to your softwareor other copyrighted work you may have a right to sue for relief under that Act

                                                      Legal Notice

                                                      Information contained in this publication regarding device applications and the like is provided only foryour convenience and may be superseded by updates It is your responsibility to ensure that yourapplication meets with your specifications MICROCHIP MAKES NO REPRESENTATIONS ORWARRANTIES OF ANY KIND WHETHER EXPRESS OR IMPLIED WRITTEN OR ORAL STATUTORYOR OTHERWISE RELATED TO THE INFORMATION INCLUDING BUT NOT LIMITED TO ITSCONDITION QUALITY PERFORMANCE MERCHANTABILITY OR FITNESS FOR PURPOSEMicrochip disclaims all liability arising from this information and its use Use of Microchip devices in lifesupport andor safety applications is entirely at the buyerrsquos risk and the buyer agrees to defendindemnify and hold harmless Microchip from any and all damages claims suits or expenses resultingfrom such use No licenses are conveyed implicitly or otherwise under any Microchip intellectualproperty rights unless otherwise stated

                                                      Trademarks

                                                      The Microchip name and logo the Microchip logo AnyRate AVR AVR logo AVR Freaks BeaconThingsBitCloud CryptoMemory CryptoRF dsPIC FlashFlex flexPWR Heldo JukeBlox KeeLoq KeeLoq logoKleer LANCheck LINK MD maXStylus maXTouch MediaLB megaAVR MOST MOST logo MPLABOptoLyzer PIC picoPower PICSTART PIC32 logo Prochip Designer QTouch RightTouch SAM-BASpyNIC SST SST Logo SuperFlash tinyAVR UNIO and XMEGA are registered trademarks ofMicrochip Technology Incorporated in the USA and other countries

                                                      ClockWorks The Embedded Control Solutions Company EtherSynch Hyper Speed Control HyperLightLoad IntelliMOS mTouch Precision Edge and Quiet-Wire are registered trademarks of MicrochipTechnology Incorporated in the USA

                                                      Adjacent Key Suppression AKS Analog-for-the-Digital Age Any Capacitor AnyIn AnyOut BodyComchipKIT chipKIT logo CodeGuard CryptoAuthentication CryptoCompanion CryptoControllerdsPICDEM dsPICDEMnet Dynamic Average Matching DAM ECAN EtherGREEN In-Circuit SerialProgramming ICSP Inter-Chip Connectivity JitterBlocker KleerNet KleerNet logo Mindi MiWimotorBench MPASM MPF MPLAB Certified logo MPLIB MPLINK MultiTRAK NetDetach OmniscientCode Generation PICDEM PICDEMnet PICkit PICtail PureSilicon QMatrix RightTouch logo REALICE Ripple Blocker SAM-ICE Serial Quad IO SMART-IS SQI SuperSwitcher SuperSwitcher II TotalEndurance TSHARC USBCheck VariSense ViewSpan WiperLock Wireless DNA and ZENA aretrademarks of Microchip Technology Incorporated in the USA and other countries

                                                      SQTP is a service mark of Microchip Technology Incorporated in the USA

                                                      Silicon Storage Technology is a registered trademark of Microchip Technology Inc in other countries

                                                      GestIC is a registered trademark of Microchip Technology Germany II GmbH amp Co KG a subsidiary ofMicrochip Technology Inc in other countries

                                                      All other trademarks mentioned herein are property of their respective companies

                                                      ATBTLC1000

                                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 55

                                                      copy 2018 Microchip Technology Incorporated Printed in the USA All Rights Reserved

                                                      ISBN 978-1-5224-2921-0

                                                      Quality Management System Certified by DNV

                                                      ISOTS 16949Microchip received ISOTS-169492009 certification for its worldwide headquarters design and waferfabrication facilities in Chandler and Tempe Arizona Gresham Oregon and design centers in Californiaand India The Companyrsquos quality system processes and procedures are for its PICreg MCUs and dsPICreg

                                                      DSCs KEELOQreg code hopping devices Serial EEPROMs microperipherals nonvolatile memory andanalog products In addition Microchiprsquos quality system for the design and manufacture of developmentsystems is ISO 90012000 certified

                                                      ATBTLC1000

                                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 56

                                                      AMERICAS ASIAPACIFIC ASIAPACIFIC EUROPECorporate Office2355 West Chandler BlvdChandler AZ 85224-6199Tel 480-792-7200Fax 480-792-7277Technical SupporthttpwwwmicrochipcomsupportWeb AddresswwwmicrochipcomAtlantaDuluth GATel 678-957-9614Fax 678-957-1455Austin TXTel 512-257-3370BostonWestborough MATel 774-760-0087Fax 774-760-0088ChicagoItasca ILTel 630-285-0071Fax 630-285-0075DallasAddison TXTel 972-818-7423Fax 972-818-2924DetroitNovi MITel 248-848-4000Houston TXTel 281-894-5983IndianapolisNoblesville INTel 317-773-8323Fax 317-773-5453Tel 317-536-2380Los AngelesMission Viejo CATel 949-462-9523Fax 949-462-9608Tel 951-273-7800Raleigh NCTel 919-844-7510New York NYTel 631-435-6000San Jose CATel 408-735-9110Tel 408-436-4270Canada - TorontoTel 905-695-1980Fax 905-695-2078

                                                      Australia - SydneyTel 61-2-9868-6733China - BeijingTel 86-10-8569-7000China - ChengduTel 86-28-8665-5511China - ChongqingTel 86-23-8980-9588China - DongguanTel 86-769-8702-9880China - GuangzhouTel 86-20-8755-8029China - HangzhouTel 86-571-8792-8115China - Hong Kong SARTel 852-2943-5100China - NanjingTel 86-25-8473-2460China - QingdaoTel 86-532-8502-7355China - ShanghaiTel 86-21-3326-8000China - ShenyangTel 86-24-2334-2829China - ShenzhenTel 86-755-8864-2200China - SuzhouTel 86-186-6233-1526China - WuhanTel 86-27-5980-5300China - XianTel 86-29-8833-7252China - XiamenTel 86-592-2388138China - ZhuhaiTel 86-756-3210040

                                                      India - BangaloreTel 91-80-3090-4444India - New DelhiTel 91-11-4160-8631India - PuneTel 91-20-4121-0141Japan - OsakaTel 81-6-6152-7160Japan - TokyoTel 81-3-6880- 3770Korea - DaeguTel 82-53-744-4301Korea - SeoulTel 82-2-554-7200Malaysia - Kuala LumpurTel 60-3-7651-7906Malaysia - PenangTel 60-4-227-8870Philippines - ManilaTel 63-2-634-9065SingaporeTel 65-6334-8870Taiwan - Hsin ChuTel 886-3-577-8366Taiwan - KaohsiungTel 886-7-213-7830Taiwan - TaipeiTel 886-2-2508-8600Thailand - BangkokTel 66-2-694-1351Vietnam - Ho Chi MinhTel 84-28-5448-2100

                                                      Austria - WelsTel 43-7242-2244-39Fax 43-7242-2244-393Denmark - CopenhagenTel 45-4450-2828Fax 45-4485-2829Finland - EspooTel 358-9-4520-820France - ParisTel 33-1-69-53-63-20Fax 33-1-69-30-90-79Germany - GarchingTel 49-8931-9700Germany - HaanTel 49-2129-3766400Germany - HeilbronnTel 49-7131-67-3636Germany - KarlsruheTel 49-721-625370Germany - MunichTel 49-89-627-144-0Fax 49-89-627-144-44Germany - RosenheimTel 49-8031-354-560Israel - RarsquoananaTel 972-9-744-7705Italy - MilanTel 39-0331-742611Fax 39-0331-466781Italy - PadovaTel 39-049-7625286Netherlands - DrunenTel 31-416-690399Fax 31-416-690340Norway - TrondheimTel 47-7289-7561Poland - WarsawTel 48-22-3325737Romania - BucharestTel 40-21-407-87-50Spain - MadridTel 34-91-708-08-90Fax 34-91-708-08-91Sweden - GothenbergTel 46-31-704-60-40Sweden - StockholmTel 46-8-5090-4654UK - WokinghamTel 44-118-921-5800Fax 44-118-921-5820

                                                      Worldwide Sales and Service

                                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 57

                                                      • Introduction
                                                      • Table of Contents
                                                      • 1 Getting Started
                                                        • 11 Software Prerequisites
                                                          • 111 Installation Steps of Atmel Studio 7
                                                            • 12 Software Setup
                                                              • 121 Installation of Microchip SmartConnect application on a Mobile device
                                                                • 13 ATBTLC1000 Embedded Firmware
                                                                • 14 ATBTLC1000 Host Software API
                                                                • 15 Hardware Prerequisites
                                                                  • 151 SMARTtrade SAM L21 Xplained Pro
                                                                  • 152 ATBTLC1000ZR Xplained Pro Extension board
                                                                    • 16 Hardware Setup
                                                                      • 2 Creating the Project and Initializing
                                                                        • 21 Creating Project from ASF
                                                                        • 22 Configuring ASF for ATBTLC1000-ZR
                                                                        • 23 Compiling and Testing the Project
                                                                          • 3 Establishing Connection with Central Device
                                                                            • 31 Configuring and Starting the Advertisement Process
                                                                              • 311 Flags (AD Type 0x00)
                                                                              • 312 Available Service UUID (AD Types 0x02 to 0x07)
                                                                              • 313 Device Name (AD Types 0x08 to 0x09)
                                                                                • 3131 Setting the Advertisement Payload (ble_advertisement_data_set)
                                                                                • 3132 Starting the Advertisement Process (at_ble_adv_start)
                                                                                  • 314 Advertisement Process
                                                                                    • 3141 Starting the Advertisement Process
                                                                                        • 32 Managing GAP events
                                                                                          • 321 Handling of Connected and Disconnected GAP Events
                                                                                              • 4 SettingHandling of Pre-Defined Service
                                                                                                • 41 Adding Device Info Service Component from ASF Wizard to Project
                                                                                                • 42 Configuring and Loading Device Information Service
                                                                                                  • 421 Procedure to Configure and Load Device Info Service
                                                                                                      • 5 Setting up and Handling Custom Service
                                                                                                        • 51 Configuring and Loading the Custom Environment Service
                                                                                                          • 511 Procedure to Configure and Load Custom Environment Service
                                                                                                            • 52 Updating the Temperature Characteristic
                                                                                                              • 521 Setting a Characteristic Value ( at_ble_characteristic_value_set)
                                                                                                              • 522 Sending a Notification (at_ble_notification_send)
                                                                                                              • 523 Sending Temperature Information Once in Every 10 Seconds to Central
                                                                                                                  • 6 Appendix A Software Solution - Pre-Defined Svc
                                                                                                                  • 7 Appendix B Software Solution - Custom Service
                                                                                                                  • 8 Document Revision History
                                                                                                                  • The Microchip Web Site
                                                                                                                  • Customer Change Notification Service
                                                                                                                  • Customer Support
                                                                                                                  • Microchip Devices Code Protection Feature
                                                                                                                  • Legal Notice
                                                                                                                  • Trademarks
                                                                                                                  • Quality Management System Certified by DNV
                                                                                                                  • Worldwide Sales and Service

                                                        5 Declare the following static GAP callback structure in ldquostartup_templatecrdquo filestatic const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTEDdisconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                                                        6 Add the following register_btlc1000_callbacks function in startup_templatec Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void) Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks)ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACKBLE_GAP_EVENT_TYPEampapp_gap_handle)if (ble_status = true)printf(nError when Registering ATBTLC1000 callbacks)

                                                        7 Add the register_btlc1000_callbacks function call prior to start advertisement in theapplication main routineint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Gap Callbacks register_btlc1000_callbacks ( ) Start Advertising process start_advertisement() Register PrimaryIncluded service in case of GATT Server while(true) Write application task

                                                        8 Add the ble_event_task function call in the project main loop to handle the different incomingevents from ATBTLC1000while(true)ble_event_task()

                                                        9 Press button ltF7gt to compile the project and verify that no build error appear in the AtmelStudio output window

                                                        ATBTLC1000Establishing Connection with Central Device

                                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 28

                                                        Figure 3-10 Atmel Studio Output Window

                                                        10 Click ldquo rdquo to save the project ltCtrl+Sgt

                                                        11 Click ldquo rdquo to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt and checkcorrect initialization of the ATBTLC1000

                                                        12 Open the Microchip SmartConnect application on Androidtrade or iOS device13 Press the ltStart Scangt button and pair peripherals by selecting them in the device list (pass key

                                                        123456)Note 

                                                        1 Pairing event handling is carried out by ble_managerc Refer toble_pair_key_request_handler() for code implementation The default pass key of123456 is also fixed inside this function This can be changed here

                                                        Figure 3-11 Console Log Window

                                                        Note  After peripheral pairing no services information are displayed in Microchip SmartConnectapplication as no service is currently defined and started on peripheral side

                                                        ATBTLC1000Establishing Connection with Central Device

                                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 29

                                                        4 SettingHandling of Pre-Defined ServiceThe management of services are done in the GATT layer of the ATBTLC1000 ROM coded Bluetooth LowEnergy Stack The GATT transactions are based on high-level nested objects called Profiles Servicesand Characteristics stored in SRAM memory of ATBTLC1000 device This assignment adds the pre-defined service of information service from ASF library

                                                        Figure 4-1 ATBTLC1000 GATT Layers

                                                        bull ProfilesProfiles are not available in the Bluetooth Low Energy peripheral they are simply a pre-definedcollection of services that have been compiled by either the Bluetooth SIG (adopted GATT basedprofile) or by the application developer (custom profiles) For example the Heart Rate Profilecombines the Heart Rate Service and the Device Information Service

                                                        Note  The complete list of officially adopted GATT-based profiles is available on the BluetoothDeveloper Portal

                                                        bull ServicesA service is a collection of data and associated behaviors which accomplish a particular function orfeature of a device or portions of a device A service may reference other primary or secondaryservices andor a set of characteristics that make up the service Each service distinguishes itselffrom other services by means of a unique numeric ID called as UUID which can be either 16-bit(for officially adopted Bluetooth Low Energy Services) or 128-bit (for custom services)

                                                        Note  A full list of officially adopted services and their UUID are seen on the Bluetooth DeveloperPortal

                                                        bull CharacteristicsA characteristic is the lowest level concept in GATT transactions It contains a single data point withdifferent attributes such as notify read or write capabilities Similar to Services each characteristiccan be distinguished by a SIG-defined adopted UUID (16-bit) or custom (128-bit) UUID This UUIDensures interoperability across Bluetooth Low Energy devices The characteristics are important tointeract with in a Bluetooth Low Energy network In addition to standard UUID the custom UUID isused in case of specific application When characteristics with custom UUID are used in a devicethen it will be interoperable only with those devices that support these characteristics with customUUID

                                                        ATBTLC1000SettingHandling of Pre-Defined Service

                                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 30

                                                        In this assignment the following steps are added to the Host MCU application to set up and handle adevice information service within the ATBTLC1000 module The following steps are added to the startupproject

                                                        bull Adding device info service component from ASFbull Configuring and loading the service

                                                        Figure 4-2 Device Information Service

                                                        41 Adding Device Info Service Component from ASF Wizard to ProjectTo use the ldquoofficially adopted GATT-based profilesrdquo from SIG ASF provides Bluetooth Low Energy servicecomponents including init functions that pre-define services in Host memory

                                                        Note  Before starting this assignment be sure to follow the steps mentioned in 2 Creating the Projectand Initializing and 3 Establishing Connection with Central Device

                                                        1 Click ASF gt ASF Wizard2 Search for ldquoBLE-Device Information Servicesrdquo and then click Add

                                                        ATBTLC1000SettingHandling of Pre-Defined Service

                                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 31

                                                        Figure 4-3 Available Modules

                                                        3 Now ldquoBLE-Device Information Servicesrdquo (component) appears in ldquoSelected ModulesrdquoFigure 4-4 Selected Modules

                                                        4 Click Apply to add the component to the projectFigure 4-5 Adding the Modules to Project

                                                        5 The ldquoDevice Information Servicerdquo component is added to the project and is confirmed bydevice_information folder added in Solution Explorer

                                                        ATBTLC1000SettingHandling of Pre-Defined Service

                                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 32

                                                        Figure 4-6 Device Information Service Added to Project

                                                        42 Configuring and Loading Device Information ServiceThe ATBTLC1000 Host driver provides a set of GATT functions that allows storing and updating theservices in ATBTLC1000 memories

                                                        Prototype at_ble_status_t at_ble_primary_service_define(at_ble_uuid_t uuidat_ble_handle_t service_handleat_ble_included_service_t included_service_listuint16_t included_service_countat_ble_characteristic_t charactristic_listuint16_t charactristic_count)

                                                        Description Defines a new primary service along with its included services and characteristics inATBTLC1000

                                                        Parameters

                                                        bull Uuid [In] ndash primary service UUIDbull service_handle [Out] ndash Service handle is returned herebull included_service_list [In] ndash an array of included service referencesbull included_service_count [In] ndash number of elements in included_service_listbull charactristic_list [InOut] ndash an array of characteristics included in the service this array

                                                        is updated with respective characteristics handlesbull charactristic_count[In] ndash number of elements in charactristic_list

                                                        Return Execution Status

                                                        This function requires an argument as GATT description structure of the service that is implemented Thepreviously added Device Info service component provides Bluetooth Low Energy service middlewareincluding the init functions that predefine the services See below ldquodis_init_servicerdquo from device infoBLE service (device_infohc)

                                                        Prototype ndash void dis_init_service(dis_gatt_service_handler_t device_info_serv)Description ndash Initialize the device information service handler in the host MCU memory

                                                        Parameters ndash

                                                        ATBTLC1000SettingHandling of Pre-Defined Service

                                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 33

                                                        bull device_info_serv [Inout] pointer to device info GATT description handler to beupdated

                                                        Return None

                                                        Here is a picture of GATT device info service descriptor definition in Host memory

                                                        device_info_serv-gtserv_handle = 0device_info_serv-gtserv_uuidtype = AT_BLE_UUID_16device_info_serv-gtserv_uuiduuid[0] = (uint8_t) DIS_SERVICE_UUIDdevice_info_serv-gtserv_uuiduuid[1] = (uint8_t) (DIS_SERVICE_UUID gtgt 8)Characteristic Info for Manufacturer Name Stringdevice_info_serv-gtserv_chars[0]char_val_handle = 0 handle stored here device_info_serv-gtserv_chars[0]uuidtype = AT_BLE_UUID_16device_info_serv-gtserv_chars[0]uuiduuid[0] = (uint8_t) IS_CHAR_MANUFACTURER_NAME_UUID UUID Manufacturer Name String device_info_serv-gtserv_chars[0]uuiduuid[1] = (uint8_t) (DIS_CHAR_MANUFACTURER_NAME_UUID gtgt 8) UUID Manufacturer Name String device_info_serv-gtserv_chars[0]properties = AT_BLE_CHAR_READ Properties memcpy(char_valuemanufacturer_nameDEFAULT_MANUFACTURER_NAMEDIS_CHAR_MANUFACTURER_NAME_INIT_LEN)device_info_serv-gtserv_chars[0]init_value = char_valuemanufacturer_namedevice_info_serv-gtserv_chars[0]value_init_len = DIS_CHAR_MANUFACTURER_NAME_INIT_LENdevice_info_serv-gtserv_chars[0]value_max_len = DIS_CHAR_MANUFACTURER_NAME_MAX_LENif BLE_PAIR_ENABLEdevice_info_serv-gtserv_chars[0]value_permissions = AT_BLE_ATTR_READABLE_REQ_AUTHN_NO_AUTHR permissions elsedevice_info_serv-gtserv_chars[0]value_permissions = AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR permissions endifdevice_info_serv-gtserv_chars[0]user_desc = NULL user defined name device_info_serv-gtserv_chars[0]user_desc_len = 0device_info_serv-gtserv_chars[0]user_desc_max_len = 0device_info_serv-gtserv_chars[0]user_desc_permissions = AT_BLE_ATTR_NO_PERMISSIONS user description permissionsdevice_info_serv-gtserv_chars[0]client_config_permissions = AT_BLE_ATTR_NO_PERMISSIONS client config permissionsdevice_info_serm hdsv-gtserv_chars[0]server_config_permissions = AT_BLE_ATTR_NO_PERMISSIONS server config permissionsdevice_info_serv-gtserv_chars[0]user_desc_handle = 0 user desc handlesdevice_info_serv-gtserv_chars[0]client_config_handle = 0 client config handlesdevice_info_serv-gtserv_chars[0]server_config_handle = 0 server config handlesdevice_info_serv-gtserv_chars[0]presentation_format = NULL presentation format

                                                        Note  In case of custom service the above definition initialization must be taken care of by thedeveloper

                                                        421 Procedure to Configure and Load Device Info Service1 Include device info service header file (device_infoh) at the beginning of

                                                        startup_templatec fileinclude ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehinclude device_infoh

                                                        2 Define a device info service handler as global in startup_templatec file Serviceshandlers dis_gatt_service_handler_t dis_service_handler

                                                        ATBTLC1000SettingHandling of Pre-Defined Service

                                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 34

                                                        3 Add dis_init_service and at_ble_primary_service_define functions as called abovethe advertisement start in main routine Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service)dis_init_service (ampdis_service_handler) Define the primary service in the GATT server database if ((dis_primary_service_define (ampdis_service_handler)) = AT_BLE_SUCCESS)printf(Device Information Service definition failed) Start Advertising process start_advertisement()

                                                        4 Click to save the project ltCtrl+Sgt and compile the project by pressing button ltF7gt5 Verify that no build error appears in Atmel Studio output window

                                                        Figure 4-7 Atmel Studio Output Window

                                                        6 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt7 Open ldquoMicrochip SmartConnectrdquo application on Android or iOS device8 Press ltStart Scangt button and connect to peripheral

                                                        Note  The device name is a characteristic and contains the name of the device This device namecan be read by the central device to know the name of the device in order to differentiate thedevices This is being set using at_ble_device_name_set()API The device name is set bydefault when ble_device_init is called and the value is pre-defined using BLE_DEVICE_NAMEThe device name can also be sent as part of advertisement payload to be same as the oneconfigured in at_ble_adv_data_set() API It is the responsibility of users to keep the devicename set in advertisement payload the same as that configured inat_ble_device_name_set()

                                                        9 The Service must now be visible after pairing with peripheral under Microchip SmartConnectapplication

                                                        ATBTLC1000SettingHandling of Pre-Defined Service

                                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 35

                                                        Figure 4-8 Service List in Microchip SmartConnect Application

                                                        Note  If the pairing of ATBTLC1000 with Microchip Smart connect is not successful then removethe pairing information from mobile by selecting ldquoForget Devicerdquo from the mobile settings Thereason for this is that the mobile app stores the previous pairing information but the ATBTLC1000device lost the previous pairing information due to RESET since it was stored on temporary storage(RAM)

                                                        10 The serial terminal must display the following log output windowFigure 4-9 Console Log Window

                                                        ATBTLC1000SettingHandling of Pre-Defined Service

                                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 36

                                                        5 Setting up and Handling Custom ServiceThe previous assignment describes the handling of Bluetooth Low Energy SIG defined device infoservice which is the predefined service available in ASF component This assignment describes thecustom service So the service initialization needs to be implemented In the context of customizedenvironment service the following service description is pushed in ATBTLC1000 memory

                                                        Figure 5-1 Custom Service

                                                        Custom Environment Service Description

                                                        bull UUID type ndash Custom UUID (128-bit)bull UUID ndash 1bc5d5a5-0200-a687-e511-3639c1ba5af0

                                                        Characteristic 0 (Temperature)

                                                        bull User Description ndash Temperaturebull UUID type ndash Custom UUID (128-bit)bull UUID ndash 1bc5d5a5-0200-a687-e511-3639d8ba5af0bull Properties ndash Read Notifybull Value permission ndash No authorization requiredbull Client config permission ndash No permissionbull Server config permission ndash No permission

                                                        Note  In this definition UUIDs are generated randomly Custom servicescharacteristics are free to useany 128-bit UUID less than the base UUID There is no reserved space for vendors to use 16-bit or 32-bitUUIDs

                                                        With this definition any temperature change is notified to the central The notify mechanism allows thecentral to know when the data changes When notify property of the Client Characteristic ConfigurationDescriptor is enabled by the central and the device writes the new value then this updated value isautomatically sent to the central through a notification The central is not required to send readcharacteristic commands explicitly to the peripheral (GATT server)

                                                        To setup and handle the custom environment service in ATBTLC1000 module the following steps areadded to the Host MCU application

                                                        bull Configure and load the custom servicebull Update Temperature characteristic and notify to the central devicebull Receive and handle notification from the Host device

                                                        ATBTLC1000Setting up and Handling Custom Service

                                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 37

                                                        Figure 5-2 Custom Service Flowchart

                                                        51 Configuring and Loading the Custom Environment ServiceThe ATBTLC1000 Host driver provides the following set of GATT functions that allows it to push andupdate the service descriptions in the ATBTLC1000 SRAM memory

                                                        Note  Before starting this assignment be sure to follow the steps mentioned in 2 Creating the Projectand Initializing and 3 Establishing Connection with Central Device

                                                        Prototype ndashat_ble_status_t at_ble_primary_service_define(at_ble_uuid_t uuidat_ble_handle_t service_handleat_ble_included_service_t included_service_listuint16_t included_service_countat_ble_characteristic_t charactristic_listuint16_t charactristic_count)

                                                        Description ndash Defines a new primary service along with its included services and characteristics inATBTLC1000 module

                                                        Parameters

                                                        bull Uuid [In] ndash primary service UUIDbull service_handle [Out] ndash service handle is returned herebull included_service_list [In] ndash array of included service referencesbull included_service_count [In] ndash number of elements in included_service_listbull charactristic_list [InOut] ndash an array of characteristics included in the service this array

                                                        is update with respective characteristics handlesbull charactristic_count[In] ndash number of elements in charactristic_list

                                                        ATBTLC1000Setting up and Handling Custom Service

                                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 38

                                                        Return ndash Execution Status

                                                        bull Characteristics ndashndash Characteristics definition is done through specific array of following

                                                        ldquoat_ble_characteristic_trdquo structure instancestypedef structat_ble_handle_t char_val_handle Handler (returned during service initialisation)at_ble_uuid_t uuid Characteristic UUID (type and value)at_ble_char_properties_t propertiesCharac Properties (read write notify)uint8_t init_value initial valueuint16_t value_init_len initial value lengthuint16_t value_max_len value max lengthat_ble_attr_permissions_t value_permissions access authorization and authenticationuint8_t user_desc User descriptionuint16_t user_desc_len User description lengthuint16_t user_desc_max_len User description max lengthat_ble_char_presentation_t presentation_format Presentation formatat_ble_attr_permissions_t user_desc_permissions User description permissionat_ble_attr_permissions_t client_config_permissions client permissionat_ble_attr_permissions_t server_config_permissions server permissionat_ble_handle_t user_desc_handle description handlerat_ble_handle_t client_config_handle Client config handlerat_ble_handle_t server_config_handle Server config handler at_ble_characteristic_t

                                                        511 Procedure to Configure and Load Custom Environment Service1 Define the following service UUID and characteristic UUID in startup_templatec file

                                                        define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

                                                        2 Define the following environment service handler and characteristics variable as global instartup_templatec file Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

                                                        3 Add the following service initialization function custom_environment_service_init instartup_templatecvoid custom_environment_service_init(void) at_ble_uuid_t environment_service_uuiduint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUIDuint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperatureenvironment_service_characs[0]user_desc_len = 10environment_service_characs[0]user_desc_max_len = 10environment_service_characs[0]uuidtype = AT_BLE_UUID_128memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16)environment_service_characs[0]properties = AT_BLE_CHAR_READ |AT_BLE_CHAR_NOTIFYenvironment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature valueenvironment_service_characs[0]value_permissions =(AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuidampenvironment_service_handlerNULL0environment_service_characs1)=AT_BLE_SUCCESS)printf(n Assignment 41 Failed to Initialize custom environment service)

                                                        ATBTLC1000Setting up and Handling Custom Service

                                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 39

                                                        elseprintf(n Assignment 41 Initialize custom environment service)

                                                        4 Declare and implement the following GATT event callback functioncustom_char_changed_app_event in startup_templatec file If a client (central) enablesnotifications for a server the server (peripheral) receives an AT_BLE_CHARACTERISTIC_CHANGEDevent and this event callback is called Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

                                                        5 Declare and implement the following custom_notification_confirmation_handlerfunction in startup_templatec file Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param)at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )paramif (event_param-gtstatus == AT_BLE_SUCCESS)printf(n Assignment 41Notification Successfully sent over the air) else printf(n Assignment 41Sending Notification over the air failed)return AT_BLE_SUCCESS

                                                        6 Declare the following GATT server callback structure in startup_templatec file Thisassignment uses two GATT callbacksstatic const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handlercharacteristic_changed = custom_char_changed_app_event

                                                        7 Add the following register_gatt_server_callbacks function in startup_templatec toregister GATT server callback for notification confirmation event Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks)ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACKBLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle)if (ble_status = true)printf(nError when Registering ATBTLC1000 callbacks)

                                                        8 Add custom_environment_service_init and register_gatt_server_callbacksfunction calls prior to start advertisement in the application main routine to initialize custom serviceand to register the GATT server callbacksint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()

                                                        ATBTLC1000Setting up and Handling Custom Service

                                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 40

                                                        endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks() Custom service init custom_environment_service_init ( ) Register Gatt server callbacks register_gatt_server_callbacks ( ) Start Advertising process start_advertisement()while(true)ble_event_task()

                                                        9 Click to save the project ltCtrl+Sgt

                                                        10 Compile the project by pressing button ltF7gt11 Verify that no build error appears in the Atmel Studio output window

                                                        Figure 5-3 Atmel Studio Output Window

                                                        12 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt13 Open the ldquoMicrochip SmartConnectrdquo application on Android or iOS device14 Connect and pair to the peripheral (pass key 123456)15 Custom service must now be visible after pairing with peripheral under Microchip SmartConnect

                                                        application

                                                        ATBTLC1000Setting up and Handling Custom Service

                                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 41

                                                        Figure 5-4 Service List in Microchip SmartConnect Application

                                                        Note  Custom service is displayed as unknown service in the above figure as this service is not aSIG-defined service

                                                        Figure 5-5 General Information

                                                        16 Serial terminal client must display the following Log output

                                                        ATBTLC1000Setting up and Handling Custom Service

                                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 42

                                                        Figure 5-6 Log Output Window

                                                        52 Updating the Temperature CharacteristicIn the previous assignment the custom Temperature characteristic is defined with a notify attribute Thistype of attribute requires notification to be sent to central when a new characteristic value is availableThe update of any ldquonotifyrdquo characteristic value is based on following interaction between the Host MCUand the ATBTLC1000Figure 5-7 Characteristic Notification

                                                        521 Setting a Characteristic Value ( at_ble_characteristic_value_set)Prototype ndashat_ble_status_t at_ble_characteristic_value_setat_ble_handle_t handleuint8_t valueuint16_t len)

                                                        Description ndash Sets a characteristic value in ATBTLC1000 memory

                                                        Parameters ndash

                                                        ATBTLC1000Setting up and Handling Custom Service

                                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 43

                                                        bull handle [inout] ndash Pointer to Characteristic handle to be changedbull value [in] ndash New valuebull len [in] ndash Value length in bytes

                                                        Return ndash Execution Status

                                                        522 Sending a Notification (at_ble_notification_send)Prototype ndashat_ble_status_t at_ble_notification_send(at_ble_handle_t conn_handleat_ble_handle_t attr_handle)

                                                        Description ndash Sends a Notification

                                                        Parameters ndash

                                                        bull conn_handle[in] ndash handle of the connection to be notifiedbull attr_handle [in] ndash handle of the attribute originating the notification

                                                        Return ndash Execution Status

                                                        523 Sending Temperature Information Once in Every 10 Seconds to Central1 Modify the following ldquotimer_callback_fnrdquo callback function from the startup_templatec

                                                        filestatic void timer_callback_fn(void)timer_flag = true

                                                        2 hw_timer_init()in main routine of startup_templatec initializes the hardware timer3 If a client (Central) enables the notifications for a server the server (Peripheral) receives an

                                                        AT_BLE_CHARACTERISTIC_CHANGED event callback then start the periodic 10 second timer forsending the notification Add the following code in previously definedcustom_char_changed_app_event function Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))timer_flag = falsehw_timer_start(10)printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

                                                        4 Declare the following Temperature_value global variable in startup_templatec staticuint8_t Temperature_value = 25 as static

                                                        5 Add the following send_temperature_notification function in startup_templatec tosend temperature every 10 seconds Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++

                                                        ATBTLC1000Setting up and Handling Custom Service

                                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 44

                                                        if(Temperature_value gt 75)Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set(environment_service_characs[0]char_val_handle(uint8_t )ampTemperature_valuesizeof(Temperature_value))ble_status = at_ble_notification_send(0environment_service_characs[0]char_val_handle)if(ble_status = AT_BLE_SUCCESS)printf(fail to send temperature update notification )

                                                        6 Add the following code in main routine to send temperature data every 10 secondswhile (1) ble_event_task()if(connected_flag == true ampamp timer_flag == truetimer_flag = falsesend_temperature_notification()

                                                        7 Click to save the project ltCtrl+Sgt

                                                        8 Compile the project by pressing the button ltF7gt9 Verify that no build error appears in Atmel Studio output window

                                                        Figure 5-8 Atmel Studio Output Window

                                                        10 Click to program the project binary on the L21 Xplained XSTK11 Open ldquoMicrochip SmartConnectrdquo Application on Android or iOS device12 Connect and pair to the peripheral (pass key 123456)13 Click NOTIFY to start the notification14 Temperature information in HEX values must be displayed in Microchip SmartConnect application

                                                        ATBTLC1000Setting up and Handling Custom Service

                                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 45

                                                        Figure 5-9 Notification Window

                                                        15 Serial terminal must display the following log outputFigure 5-10 Log Output Window

                                                        ATBTLC1000Setting up and Handling Custom Service

                                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 46

                                                        6 Appendix A Software Solution - Pre-Defined SvcThe following is the code implementation for handling of pre-defined service done in 4 SettingHandlingof Pre-Defined Service

                                                        - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehinclude device_infoh

                                                        volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false Services handlers dis_gatt_service_handler_t dis_service_handler

                                                        static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

                                                        void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                                                        Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                                                        Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                                                        static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                                                        Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void) Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks)

                                                        ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

                                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 47

                                                        ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                                        timer callback function static void timer_callback_fn(void) Add timer callback functionality here

                                                        void button_cb(void) Add button callback functionality here

                                                        int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                                                        Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                                                        DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks()

                                                        Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service) dis_init_service(ampdis_service_handler) Define the primary service in the GATT server database if((dis_primary_service_define(ampdis_service_handler)) = AT_BLE_SUCCESS) printf(Device Information Service definition failed)

                                                        Start Advertising process start_advertisement() while(true) ble_event_task()

                                                        ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

                                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 48

                                                        7 Appendix B Software Solution - Custom ServiceThe following is the code implementation for handling of pre-defined service done in 5 Setting up andHandling Custom Service

                                                        - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templateh

                                                        volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false

                                                        static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

                                                        define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0

                                                        define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

                                                        Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

                                                        void custom_environment_service_init(void) at_ble_uuid_t environment_service_uuid uint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUID uint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128 memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperature environment_service_characs[0]user_desc_len = 10 environment_service_characs[0]user_desc_max_len = 10 environment_service_characs[0]uuidtype = AT_BLE_UUID_128 memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16) environment_service_characs[0]properties = AT_BLE_CHAR_READ | AT_BLE_CHAR_NOTIFY environment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature value environment_service_characs[0]value_permissions = (AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuid ampenvironment_service_handlerNULL0 environment_service_characs1)=AT_BLE_SUCCESS) printf(n Assignment 41 Failed to Initialize custom environment service) else printf(n Assignment 41 Initialize custom environment service)

                                                        Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param) at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )param if (event_param-gtstatus == AT_BLE_SUCCESS) printf(n Assignment 41Notification Successfully sent over the air)

                                                        ATBTLC1000Appendix B Software Solution - Custom Service

                                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 49

                                                        else printf(n Assignment 41Sending Notification over the air failed) return AT_BLE_SUCCESS

                                                        static at_ble_status_t custom_char_changed_app_event(void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle -gt char_new_value[0])) timer_flag = false hw_timer_start(10) printf(n Assignment 41Characteristic changed event) return AT_BLE_SUCCESS

                                                        static const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handler characteristic_changed = custom_char_changed_app_event

                                                        Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                                        void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                                                        Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                                                        Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                                                        static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                                                        Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void)

                                                        ATBTLC1000Appendix B Software Solution - Custom Service

                                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 50

                                                        Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                                        timer callback function static void timer_callback_fn(void) Add timer callback functionality here timer_flag = true

                                                        void button_cb(void) Add button callback functionality here

                                                        static uint8_t Temperature_value = 25

                                                        Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++ if(Temperature_value gt 75) Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set( environment_service_characs[0]char_val_handle (uint8_t )ampTemperature_value sizeof(Temperature_value)) ble_status = at_ble_notification_send(0 environment_service_characs[0]char_val_handle) if(ble_status = AT_BLE_SUCCESS) printf(fail to send temperature update notification )

                                                        int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                                                        Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                                                        DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register Gap ATBTLC1000 Callbacks register_btlc1000_callbacks()

                                                        Custom service init custom_environment_service_init()

                                                        ATBTLC1000Appendix B Software Solution - Custom Service

                                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 51

                                                        Register Gatt server callback register_gatt_server_callbacks()

                                                        Start Advertising process start_advertisement() while(true) ble_event_task() if(connected_flag == true ampamp timer_flag == true) timer_flag = false send_temperature_notification()

                                                        ATBTLC1000Appendix B Software Solution - Custom Service

                                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 52

                                                        8 Document Revision HistoryRev B - 42018

                                                        Section Changes

                                                        Document Revised contents to match various Bluetooth Low Energy standard versions

                                                        Rev A - 122017

                                                        Section Changes

                                                        Document Initial release

                                                        ATBTLC1000Document Revision History

                                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 53

                                                        The Microchip Web Site

                                                        Microchip provides online support via our web site at httpwwwmicrochipcom This web site is used asa means to make files and information easily available to customers Accessible by using your favoriteInternet browser the web site contains the following information

                                                        bull Product Support ndash Data sheets and errata application notes and sample programs designresources userrsquos guides and hardware support documents latest software releases and archivedsoftware

                                                        bull General Technical Support ndash Frequently Asked Questions (FAQ) technical support requestsonline discussion groups Microchip consultant program member listing

                                                        bull Business of Microchip ndash Product selector and ordering guides latest Microchip press releaseslisting of seminars and events listings of Microchip sales offices distributors and factoryrepresentatives

                                                        Customer Change Notification Service

                                                        Microchiprsquos customer notification service helps keep customers current on Microchip productsSubscribers will receive e-mail notification whenever there are changes updates revisions or erratarelated to a specified product family or development tool of interest

                                                        To register access the Microchip web site at httpwwwmicrochipcom Under ldquoSupportrdquo click onldquoCustomer Change Notificationrdquo and follow the registration instructions

                                                        Customer Support

                                                        Users of Microchip products can receive assistance through several channels

                                                        bull Distributor or Representativebull Local Sales Officebull Field Application Engineer (FAE)bull Technical Support

                                                        Customers should contact their distributor representative or Field Application Engineer (FAE) for supportLocal sales offices are also available to help customers A listing of sales offices and locations is includedin the back of this document

                                                        Technical support is available through the web site at httpwwwmicrochipcomsupport

                                                        Microchip Devices Code Protection Feature

                                                        Note the following details of the code protection feature on Microchip devices

                                                        bull Microchip products meet the specification contained in their particular Microchip Data Sheetbull Microchip believes that its family of products is one of the most secure families of its kind on the

                                                        market today when used in the intended manner and under normal conditionsbull There are dishonest and possibly illegal methods used to breach the code protection feature All of

                                                        these methods to our knowledge require using the Microchip products in a manner outside theoperating specifications contained in Microchiprsquos Data Sheets Most likely the person doing so isengaged in theft of intellectual property

                                                        bull Microchip is willing to work with the customer who is concerned about the integrity of their code

                                                        ATBTLC1000

                                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 54

                                                        bull Neither Microchip nor any other semiconductor manufacturer can guarantee the security of theircode Code protection does not mean that we are guaranteeing the product as ldquounbreakablerdquo

                                                        Code protection is constantly evolving We at Microchip are committed to continuously improving thecode protection features of our products Attempts to break Microchiprsquos code protection feature may be aviolation of the Digital Millennium Copyright Act If such acts allow unauthorized access to your softwareor other copyrighted work you may have a right to sue for relief under that Act

                                                        Legal Notice

                                                        Information contained in this publication regarding device applications and the like is provided only foryour convenience and may be superseded by updates It is your responsibility to ensure that yourapplication meets with your specifications MICROCHIP MAKES NO REPRESENTATIONS ORWARRANTIES OF ANY KIND WHETHER EXPRESS OR IMPLIED WRITTEN OR ORAL STATUTORYOR OTHERWISE RELATED TO THE INFORMATION INCLUDING BUT NOT LIMITED TO ITSCONDITION QUALITY PERFORMANCE MERCHANTABILITY OR FITNESS FOR PURPOSEMicrochip disclaims all liability arising from this information and its use Use of Microchip devices in lifesupport andor safety applications is entirely at the buyerrsquos risk and the buyer agrees to defendindemnify and hold harmless Microchip from any and all damages claims suits or expenses resultingfrom such use No licenses are conveyed implicitly or otherwise under any Microchip intellectualproperty rights unless otherwise stated

                                                        Trademarks

                                                        The Microchip name and logo the Microchip logo AnyRate AVR AVR logo AVR Freaks BeaconThingsBitCloud CryptoMemory CryptoRF dsPIC FlashFlex flexPWR Heldo JukeBlox KeeLoq KeeLoq logoKleer LANCheck LINK MD maXStylus maXTouch MediaLB megaAVR MOST MOST logo MPLABOptoLyzer PIC picoPower PICSTART PIC32 logo Prochip Designer QTouch RightTouch SAM-BASpyNIC SST SST Logo SuperFlash tinyAVR UNIO and XMEGA are registered trademarks ofMicrochip Technology Incorporated in the USA and other countries

                                                        ClockWorks The Embedded Control Solutions Company EtherSynch Hyper Speed Control HyperLightLoad IntelliMOS mTouch Precision Edge and Quiet-Wire are registered trademarks of MicrochipTechnology Incorporated in the USA

                                                        Adjacent Key Suppression AKS Analog-for-the-Digital Age Any Capacitor AnyIn AnyOut BodyComchipKIT chipKIT logo CodeGuard CryptoAuthentication CryptoCompanion CryptoControllerdsPICDEM dsPICDEMnet Dynamic Average Matching DAM ECAN EtherGREEN In-Circuit SerialProgramming ICSP Inter-Chip Connectivity JitterBlocker KleerNet KleerNet logo Mindi MiWimotorBench MPASM MPF MPLAB Certified logo MPLIB MPLINK MultiTRAK NetDetach OmniscientCode Generation PICDEM PICDEMnet PICkit PICtail PureSilicon QMatrix RightTouch logo REALICE Ripple Blocker SAM-ICE Serial Quad IO SMART-IS SQI SuperSwitcher SuperSwitcher II TotalEndurance TSHARC USBCheck VariSense ViewSpan WiperLock Wireless DNA and ZENA aretrademarks of Microchip Technology Incorporated in the USA and other countries

                                                        SQTP is a service mark of Microchip Technology Incorporated in the USA

                                                        Silicon Storage Technology is a registered trademark of Microchip Technology Inc in other countries

                                                        GestIC is a registered trademark of Microchip Technology Germany II GmbH amp Co KG a subsidiary ofMicrochip Technology Inc in other countries

                                                        All other trademarks mentioned herein are property of their respective companies

                                                        ATBTLC1000

                                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 55

                                                        copy 2018 Microchip Technology Incorporated Printed in the USA All Rights Reserved

                                                        ISBN 978-1-5224-2921-0

                                                        Quality Management System Certified by DNV

                                                        ISOTS 16949Microchip received ISOTS-169492009 certification for its worldwide headquarters design and waferfabrication facilities in Chandler and Tempe Arizona Gresham Oregon and design centers in Californiaand India The Companyrsquos quality system processes and procedures are for its PICreg MCUs and dsPICreg

                                                        DSCs KEELOQreg code hopping devices Serial EEPROMs microperipherals nonvolatile memory andanalog products In addition Microchiprsquos quality system for the design and manufacture of developmentsystems is ISO 90012000 certified

                                                        ATBTLC1000

                                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 56

                                                        AMERICAS ASIAPACIFIC ASIAPACIFIC EUROPECorporate Office2355 West Chandler BlvdChandler AZ 85224-6199Tel 480-792-7200Fax 480-792-7277Technical SupporthttpwwwmicrochipcomsupportWeb AddresswwwmicrochipcomAtlantaDuluth GATel 678-957-9614Fax 678-957-1455Austin TXTel 512-257-3370BostonWestborough MATel 774-760-0087Fax 774-760-0088ChicagoItasca ILTel 630-285-0071Fax 630-285-0075DallasAddison TXTel 972-818-7423Fax 972-818-2924DetroitNovi MITel 248-848-4000Houston TXTel 281-894-5983IndianapolisNoblesville INTel 317-773-8323Fax 317-773-5453Tel 317-536-2380Los AngelesMission Viejo CATel 949-462-9523Fax 949-462-9608Tel 951-273-7800Raleigh NCTel 919-844-7510New York NYTel 631-435-6000San Jose CATel 408-735-9110Tel 408-436-4270Canada - TorontoTel 905-695-1980Fax 905-695-2078

                                                        Australia - SydneyTel 61-2-9868-6733China - BeijingTel 86-10-8569-7000China - ChengduTel 86-28-8665-5511China - ChongqingTel 86-23-8980-9588China - DongguanTel 86-769-8702-9880China - GuangzhouTel 86-20-8755-8029China - HangzhouTel 86-571-8792-8115China - Hong Kong SARTel 852-2943-5100China - NanjingTel 86-25-8473-2460China - QingdaoTel 86-532-8502-7355China - ShanghaiTel 86-21-3326-8000China - ShenyangTel 86-24-2334-2829China - ShenzhenTel 86-755-8864-2200China - SuzhouTel 86-186-6233-1526China - WuhanTel 86-27-5980-5300China - XianTel 86-29-8833-7252China - XiamenTel 86-592-2388138China - ZhuhaiTel 86-756-3210040

                                                        India - BangaloreTel 91-80-3090-4444India - New DelhiTel 91-11-4160-8631India - PuneTel 91-20-4121-0141Japan - OsakaTel 81-6-6152-7160Japan - TokyoTel 81-3-6880- 3770Korea - DaeguTel 82-53-744-4301Korea - SeoulTel 82-2-554-7200Malaysia - Kuala LumpurTel 60-3-7651-7906Malaysia - PenangTel 60-4-227-8870Philippines - ManilaTel 63-2-634-9065SingaporeTel 65-6334-8870Taiwan - Hsin ChuTel 886-3-577-8366Taiwan - KaohsiungTel 886-7-213-7830Taiwan - TaipeiTel 886-2-2508-8600Thailand - BangkokTel 66-2-694-1351Vietnam - Ho Chi MinhTel 84-28-5448-2100

                                                        Austria - WelsTel 43-7242-2244-39Fax 43-7242-2244-393Denmark - CopenhagenTel 45-4450-2828Fax 45-4485-2829Finland - EspooTel 358-9-4520-820France - ParisTel 33-1-69-53-63-20Fax 33-1-69-30-90-79Germany - GarchingTel 49-8931-9700Germany - HaanTel 49-2129-3766400Germany - HeilbronnTel 49-7131-67-3636Germany - KarlsruheTel 49-721-625370Germany - MunichTel 49-89-627-144-0Fax 49-89-627-144-44Germany - RosenheimTel 49-8031-354-560Israel - RarsquoananaTel 972-9-744-7705Italy - MilanTel 39-0331-742611Fax 39-0331-466781Italy - PadovaTel 39-049-7625286Netherlands - DrunenTel 31-416-690399Fax 31-416-690340Norway - TrondheimTel 47-7289-7561Poland - WarsawTel 48-22-3325737Romania - BucharestTel 40-21-407-87-50Spain - MadridTel 34-91-708-08-90Fax 34-91-708-08-91Sweden - GothenbergTel 46-31-704-60-40Sweden - StockholmTel 46-8-5090-4654UK - WokinghamTel 44-118-921-5800Fax 44-118-921-5820

                                                        Worldwide Sales and Service

                                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 57

                                                        • Introduction
                                                        • Table of Contents
                                                        • 1 Getting Started
                                                          • 11 Software Prerequisites
                                                            • 111 Installation Steps of Atmel Studio 7
                                                              • 12 Software Setup
                                                                • 121 Installation of Microchip SmartConnect application on a Mobile device
                                                                  • 13 ATBTLC1000 Embedded Firmware
                                                                  • 14 ATBTLC1000 Host Software API
                                                                  • 15 Hardware Prerequisites
                                                                    • 151 SMARTtrade SAM L21 Xplained Pro
                                                                    • 152 ATBTLC1000ZR Xplained Pro Extension board
                                                                      • 16 Hardware Setup
                                                                        • 2 Creating the Project and Initializing
                                                                          • 21 Creating Project from ASF
                                                                          • 22 Configuring ASF for ATBTLC1000-ZR
                                                                          • 23 Compiling and Testing the Project
                                                                            • 3 Establishing Connection with Central Device
                                                                              • 31 Configuring and Starting the Advertisement Process
                                                                                • 311 Flags (AD Type 0x00)
                                                                                • 312 Available Service UUID (AD Types 0x02 to 0x07)
                                                                                • 313 Device Name (AD Types 0x08 to 0x09)
                                                                                  • 3131 Setting the Advertisement Payload (ble_advertisement_data_set)
                                                                                  • 3132 Starting the Advertisement Process (at_ble_adv_start)
                                                                                    • 314 Advertisement Process
                                                                                      • 3141 Starting the Advertisement Process
                                                                                          • 32 Managing GAP events
                                                                                            • 321 Handling of Connected and Disconnected GAP Events
                                                                                                • 4 SettingHandling of Pre-Defined Service
                                                                                                  • 41 Adding Device Info Service Component from ASF Wizard to Project
                                                                                                  • 42 Configuring and Loading Device Information Service
                                                                                                    • 421 Procedure to Configure and Load Device Info Service
                                                                                                        • 5 Setting up and Handling Custom Service
                                                                                                          • 51 Configuring and Loading the Custom Environment Service
                                                                                                            • 511 Procedure to Configure and Load Custom Environment Service
                                                                                                              • 52 Updating the Temperature Characteristic
                                                                                                                • 521 Setting a Characteristic Value ( at_ble_characteristic_value_set)
                                                                                                                • 522 Sending a Notification (at_ble_notification_send)
                                                                                                                • 523 Sending Temperature Information Once in Every 10 Seconds to Central
                                                                                                                    • 6 Appendix A Software Solution - Pre-Defined Svc
                                                                                                                    • 7 Appendix B Software Solution - Custom Service
                                                                                                                    • 8 Document Revision History
                                                                                                                    • The Microchip Web Site
                                                                                                                    • Customer Change Notification Service
                                                                                                                    • Customer Support
                                                                                                                    • Microchip Devices Code Protection Feature
                                                                                                                    • Legal Notice
                                                                                                                    • Trademarks
                                                                                                                    • Quality Management System Certified by DNV
                                                                                                                    • Worldwide Sales and Service

                                                          Figure 3-10 Atmel Studio Output Window

                                                          10 Click ldquo rdquo to save the project ltCtrl+Sgt

                                                          11 Click ldquo rdquo to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt and checkcorrect initialization of the ATBTLC1000

                                                          12 Open the Microchip SmartConnect application on Androidtrade or iOS device13 Press the ltStart Scangt button and pair peripherals by selecting them in the device list (pass key

                                                          123456)Note 

                                                          1 Pairing event handling is carried out by ble_managerc Refer toble_pair_key_request_handler() for code implementation The default pass key of123456 is also fixed inside this function This can be changed here

                                                          Figure 3-11 Console Log Window

                                                          Note  After peripheral pairing no services information are displayed in Microchip SmartConnectapplication as no service is currently defined and started on peripheral side

                                                          ATBTLC1000Establishing Connection with Central Device

                                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 29

                                                          4 SettingHandling of Pre-Defined ServiceThe management of services are done in the GATT layer of the ATBTLC1000 ROM coded Bluetooth LowEnergy Stack The GATT transactions are based on high-level nested objects called Profiles Servicesand Characteristics stored in SRAM memory of ATBTLC1000 device This assignment adds the pre-defined service of information service from ASF library

                                                          Figure 4-1 ATBTLC1000 GATT Layers

                                                          bull ProfilesProfiles are not available in the Bluetooth Low Energy peripheral they are simply a pre-definedcollection of services that have been compiled by either the Bluetooth SIG (adopted GATT basedprofile) or by the application developer (custom profiles) For example the Heart Rate Profilecombines the Heart Rate Service and the Device Information Service

                                                          Note  The complete list of officially adopted GATT-based profiles is available on the BluetoothDeveloper Portal

                                                          bull ServicesA service is a collection of data and associated behaviors which accomplish a particular function orfeature of a device or portions of a device A service may reference other primary or secondaryservices andor a set of characteristics that make up the service Each service distinguishes itselffrom other services by means of a unique numeric ID called as UUID which can be either 16-bit(for officially adopted Bluetooth Low Energy Services) or 128-bit (for custom services)

                                                          Note  A full list of officially adopted services and their UUID are seen on the Bluetooth DeveloperPortal

                                                          bull CharacteristicsA characteristic is the lowest level concept in GATT transactions It contains a single data point withdifferent attributes such as notify read or write capabilities Similar to Services each characteristiccan be distinguished by a SIG-defined adopted UUID (16-bit) or custom (128-bit) UUID This UUIDensures interoperability across Bluetooth Low Energy devices The characteristics are important tointeract with in a Bluetooth Low Energy network In addition to standard UUID the custom UUID isused in case of specific application When characteristics with custom UUID are used in a devicethen it will be interoperable only with those devices that support these characteristics with customUUID

                                                          ATBTLC1000SettingHandling of Pre-Defined Service

                                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 30

                                                          In this assignment the following steps are added to the Host MCU application to set up and handle adevice information service within the ATBTLC1000 module The following steps are added to the startupproject

                                                          bull Adding device info service component from ASFbull Configuring and loading the service

                                                          Figure 4-2 Device Information Service

                                                          41 Adding Device Info Service Component from ASF Wizard to ProjectTo use the ldquoofficially adopted GATT-based profilesrdquo from SIG ASF provides Bluetooth Low Energy servicecomponents including init functions that pre-define services in Host memory

                                                          Note  Before starting this assignment be sure to follow the steps mentioned in 2 Creating the Projectand Initializing and 3 Establishing Connection with Central Device

                                                          1 Click ASF gt ASF Wizard2 Search for ldquoBLE-Device Information Servicesrdquo and then click Add

                                                          ATBTLC1000SettingHandling of Pre-Defined Service

                                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 31

                                                          Figure 4-3 Available Modules

                                                          3 Now ldquoBLE-Device Information Servicesrdquo (component) appears in ldquoSelected ModulesrdquoFigure 4-4 Selected Modules

                                                          4 Click Apply to add the component to the projectFigure 4-5 Adding the Modules to Project

                                                          5 The ldquoDevice Information Servicerdquo component is added to the project and is confirmed bydevice_information folder added in Solution Explorer

                                                          ATBTLC1000SettingHandling of Pre-Defined Service

                                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 32

                                                          Figure 4-6 Device Information Service Added to Project

                                                          42 Configuring and Loading Device Information ServiceThe ATBTLC1000 Host driver provides a set of GATT functions that allows storing and updating theservices in ATBTLC1000 memories

                                                          Prototype at_ble_status_t at_ble_primary_service_define(at_ble_uuid_t uuidat_ble_handle_t service_handleat_ble_included_service_t included_service_listuint16_t included_service_countat_ble_characteristic_t charactristic_listuint16_t charactristic_count)

                                                          Description Defines a new primary service along with its included services and characteristics inATBTLC1000

                                                          Parameters

                                                          bull Uuid [In] ndash primary service UUIDbull service_handle [Out] ndash Service handle is returned herebull included_service_list [In] ndash an array of included service referencesbull included_service_count [In] ndash number of elements in included_service_listbull charactristic_list [InOut] ndash an array of characteristics included in the service this array

                                                          is updated with respective characteristics handlesbull charactristic_count[In] ndash number of elements in charactristic_list

                                                          Return Execution Status

                                                          This function requires an argument as GATT description structure of the service that is implemented Thepreviously added Device Info service component provides Bluetooth Low Energy service middlewareincluding the init functions that predefine the services See below ldquodis_init_servicerdquo from device infoBLE service (device_infohc)

                                                          Prototype ndash void dis_init_service(dis_gatt_service_handler_t device_info_serv)Description ndash Initialize the device information service handler in the host MCU memory

                                                          Parameters ndash

                                                          ATBTLC1000SettingHandling of Pre-Defined Service

                                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 33

                                                          bull device_info_serv [Inout] pointer to device info GATT description handler to beupdated

                                                          Return None

                                                          Here is a picture of GATT device info service descriptor definition in Host memory

                                                          device_info_serv-gtserv_handle = 0device_info_serv-gtserv_uuidtype = AT_BLE_UUID_16device_info_serv-gtserv_uuiduuid[0] = (uint8_t) DIS_SERVICE_UUIDdevice_info_serv-gtserv_uuiduuid[1] = (uint8_t) (DIS_SERVICE_UUID gtgt 8)Characteristic Info for Manufacturer Name Stringdevice_info_serv-gtserv_chars[0]char_val_handle = 0 handle stored here device_info_serv-gtserv_chars[0]uuidtype = AT_BLE_UUID_16device_info_serv-gtserv_chars[0]uuiduuid[0] = (uint8_t) IS_CHAR_MANUFACTURER_NAME_UUID UUID Manufacturer Name String device_info_serv-gtserv_chars[0]uuiduuid[1] = (uint8_t) (DIS_CHAR_MANUFACTURER_NAME_UUID gtgt 8) UUID Manufacturer Name String device_info_serv-gtserv_chars[0]properties = AT_BLE_CHAR_READ Properties memcpy(char_valuemanufacturer_nameDEFAULT_MANUFACTURER_NAMEDIS_CHAR_MANUFACTURER_NAME_INIT_LEN)device_info_serv-gtserv_chars[0]init_value = char_valuemanufacturer_namedevice_info_serv-gtserv_chars[0]value_init_len = DIS_CHAR_MANUFACTURER_NAME_INIT_LENdevice_info_serv-gtserv_chars[0]value_max_len = DIS_CHAR_MANUFACTURER_NAME_MAX_LENif BLE_PAIR_ENABLEdevice_info_serv-gtserv_chars[0]value_permissions = AT_BLE_ATTR_READABLE_REQ_AUTHN_NO_AUTHR permissions elsedevice_info_serv-gtserv_chars[0]value_permissions = AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR permissions endifdevice_info_serv-gtserv_chars[0]user_desc = NULL user defined name device_info_serv-gtserv_chars[0]user_desc_len = 0device_info_serv-gtserv_chars[0]user_desc_max_len = 0device_info_serv-gtserv_chars[0]user_desc_permissions = AT_BLE_ATTR_NO_PERMISSIONS user description permissionsdevice_info_serv-gtserv_chars[0]client_config_permissions = AT_BLE_ATTR_NO_PERMISSIONS client config permissionsdevice_info_serm hdsv-gtserv_chars[0]server_config_permissions = AT_BLE_ATTR_NO_PERMISSIONS server config permissionsdevice_info_serv-gtserv_chars[0]user_desc_handle = 0 user desc handlesdevice_info_serv-gtserv_chars[0]client_config_handle = 0 client config handlesdevice_info_serv-gtserv_chars[0]server_config_handle = 0 server config handlesdevice_info_serv-gtserv_chars[0]presentation_format = NULL presentation format

                                                          Note  In case of custom service the above definition initialization must be taken care of by thedeveloper

                                                          421 Procedure to Configure and Load Device Info Service1 Include device info service header file (device_infoh) at the beginning of

                                                          startup_templatec fileinclude ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehinclude device_infoh

                                                          2 Define a device info service handler as global in startup_templatec file Serviceshandlers dis_gatt_service_handler_t dis_service_handler

                                                          ATBTLC1000SettingHandling of Pre-Defined Service

                                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 34

                                                          3 Add dis_init_service and at_ble_primary_service_define functions as called abovethe advertisement start in main routine Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service)dis_init_service (ampdis_service_handler) Define the primary service in the GATT server database if ((dis_primary_service_define (ampdis_service_handler)) = AT_BLE_SUCCESS)printf(Device Information Service definition failed) Start Advertising process start_advertisement()

                                                          4 Click to save the project ltCtrl+Sgt and compile the project by pressing button ltF7gt5 Verify that no build error appears in Atmel Studio output window

                                                          Figure 4-7 Atmel Studio Output Window

                                                          6 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt7 Open ldquoMicrochip SmartConnectrdquo application on Android or iOS device8 Press ltStart Scangt button and connect to peripheral

                                                          Note  The device name is a characteristic and contains the name of the device This device namecan be read by the central device to know the name of the device in order to differentiate thedevices This is being set using at_ble_device_name_set()API The device name is set bydefault when ble_device_init is called and the value is pre-defined using BLE_DEVICE_NAMEThe device name can also be sent as part of advertisement payload to be same as the oneconfigured in at_ble_adv_data_set() API It is the responsibility of users to keep the devicename set in advertisement payload the same as that configured inat_ble_device_name_set()

                                                          9 The Service must now be visible after pairing with peripheral under Microchip SmartConnectapplication

                                                          ATBTLC1000SettingHandling of Pre-Defined Service

                                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 35

                                                          Figure 4-8 Service List in Microchip SmartConnect Application

                                                          Note  If the pairing of ATBTLC1000 with Microchip Smart connect is not successful then removethe pairing information from mobile by selecting ldquoForget Devicerdquo from the mobile settings Thereason for this is that the mobile app stores the previous pairing information but the ATBTLC1000device lost the previous pairing information due to RESET since it was stored on temporary storage(RAM)

                                                          10 The serial terminal must display the following log output windowFigure 4-9 Console Log Window

                                                          ATBTLC1000SettingHandling of Pre-Defined Service

                                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 36

                                                          5 Setting up and Handling Custom ServiceThe previous assignment describes the handling of Bluetooth Low Energy SIG defined device infoservice which is the predefined service available in ASF component This assignment describes thecustom service So the service initialization needs to be implemented In the context of customizedenvironment service the following service description is pushed in ATBTLC1000 memory

                                                          Figure 5-1 Custom Service

                                                          Custom Environment Service Description

                                                          bull UUID type ndash Custom UUID (128-bit)bull UUID ndash 1bc5d5a5-0200-a687-e511-3639c1ba5af0

                                                          Characteristic 0 (Temperature)

                                                          bull User Description ndash Temperaturebull UUID type ndash Custom UUID (128-bit)bull UUID ndash 1bc5d5a5-0200-a687-e511-3639d8ba5af0bull Properties ndash Read Notifybull Value permission ndash No authorization requiredbull Client config permission ndash No permissionbull Server config permission ndash No permission

                                                          Note  In this definition UUIDs are generated randomly Custom servicescharacteristics are free to useany 128-bit UUID less than the base UUID There is no reserved space for vendors to use 16-bit or 32-bitUUIDs

                                                          With this definition any temperature change is notified to the central The notify mechanism allows thecentral to know when the data changes When notify property of the Client Characteristic ConfigurationDescriptor is enabled by the central and the device writes the new value then this updated value isautomatically sent to the central through a notification The central is not required to send readcharacteristic commands explicitly to the peripheral (GATT server)

                                                          To setup and handle the custom environment service in ATBTLC1000 module the following steps areadded to the Host MCU application

                                                          bull Configure and load the custom servicebull Update Temperature characteristic and notify to the central devicebull Receive and handle notification from the Host device

                                                          ATBTLC1000Setting up and Handling Custom Service

                                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 37

                                                          Figure 5-2 Custom Service Flowchart

                                                          51 Configuring and Loading the Custom Environment ServiceThe ATBTLC1000 Host driver provides the following set of GATT functions that allows it to push andupdate the service descriptions in the ATBTLC1000 SRAM memory

                                                          Note  Before starting this assignment be sure to follow the steps mentioned in 2 Creating the Projectand Initializing and 3 Establishing Connection with Central Device

                                                          Prototype ndashat_ble_status_t at_ble_primary_service_define(at_ble_uuid_t uuidat_ble_handle_t service_handleat_ble_included_service_t included_service_listuint16_t included_service_countat_ble_characteristic_t charactristic_listuint16_t charactristic_count)

                                                          Description ndash Defines a new primary service along with its included services and characteristics inATBTLC1000 module

                                                          Parameters

                                                          bull Uuid [In] ndash primary service UUIDbull service_handle [Out] ndash service handle is returned herebull included_service_list [In] ndash array of included service referencesbull included_service_count [In] ndash number of elements in included_service_listbull charactristic_list [InOut] ndash an array of characteristics included in the service this array

                                                          is update with respective characteristics handlesbull charactristic_count[In] ndash number of elements in charactristic_list

                                                          ATBTLC1000Setting up and Handling Custom Service

                                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 38

                                                          Return ndash Execution Status

                                                          bull Characteristics ndashndash Characteristics definition is done through specific array of following

                                                          ldquoat_ble_characteristic_trdquo structure instancestypedef structat_ble_handle_t char_val_handle Handler (returned during service initialisation)at_ble_uuid_t uuid Characteristic UUID (type and value)at_ble_char_properties_t propertiesCharac Properties (read write notify)uint8_t init_value initial valueuint16_t value_init_len initial value lengthuint16_t value_max_len value max lengthat_ble_attr_permissions_t value_permissions access authorization and authenticationuint8_t user_desc User descriptionuint16_t user_desc_len User description lengthuint16_t user_desc_max_len User description max lengthat_ble_char_presentation_t presentation_format Presentation formatat_ble_attr_permissions_t user_desc_permissions User description permissionat_ble_attr_permissions_t client_config_permissions client permissionat_ble_attr_permissions_t server_config_permissions server permissionat_ble_handle_t user_desc_handle description handlerat_ble_handle_t client_config_handle Client config handlerat_ble_handle_t server_config_handle Server config handler at_ble_characteristic_t

                                                          511 Procedure to Configure and Load Custom Environment Service1 Define the following service UUID and characteristic UUID in startup_templatec file

                                                          define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

                                                          2 Define the following environment service handler and characteristics variable as global instartup_templatec file Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

                                                          3 Add the following service initialization function custom_environment_service_init instartup_templatecvoid custom_environment_service_init(void) at_ble_uuid_t environment_service_uuiduint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUIDuint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperatureenvironment_service_characs[0]user_desc_len = 10environment_service_characs[0]user_desc_max_len = 10environment_service_characs[0]uuidtype = AT_BLE_UUID_128memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16)environment_service_characs[0]properties = AT_BLE_CHAR_READ |AT_BLE_CHAR_NOTIFYenvironment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature valueenvironment_service_characs[0]value_permissions =(AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuidampenvironment_service_handlerNULL0environment_service_characs1)=AT_BLE_SUCCESS)printf(n Assignment 41 Failed to Initialize custom environment service)

                                                          ATBTLC1000Setting up and Handling Custom Service

                                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 39

                                                          elseprintf(n Assignment 41 Initialize custom environment service)

                                                          4 Declare and implement the following GATT event callback functioncustom_char_changed_app_event in startup_templatec file If a client (central) enablesnotifications for a server the server (peripheral) receives an AT_BLE_CHARACTERISTIC_CHANGEDevent and this event callback is called Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

                                                          5 Declare and implement the following custom_notification_confirmation_handlerfunction in startup_templatec file Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param)at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )paramif (event_param-gtstatus == AT_BLE_SUCCESS)printf(n Assignment 41Notification Successfully sent over the air) else printf(n Assignment 41Sending Notification over the air failed)return AT_BLE_SUCCESS

                                                          6 Declare the following GATT server callback structure in startup_templatec file Thisassignment uses two GATT callbacksstatic const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handlercharacteristic_changed = custom_char_changed_app_event

                                                          7 Add the following register_gatt_server_callbacks function in startup_templatec toregister GATT server callback for notification confirmation event Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks)ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACKBLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle)if (ble_status = true)printf(nError when Registering ATBTLC1000 callbacks)

                                                          8 Add custom_environment_service_init and register_gatt_server_callbacksfunction calls prior to start advertisement in the application main routine to initialize custom serviceand to register the GATT server callbacksint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()

                                                          ATBTLC1000Setting up and Handling Custom Service

                                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 40

                                                          endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks() Custom service init custom_environment_service_init ( ) Register Gatt server callbacks register_gatt_server_callbacks ( ) Start Advertising process start_advertisement()while(true)ble_event_task()

                                                          9 Click to save the project ltCtrl+Sgt

                                                          10 Compile the project by pressing button ltF7gt11 Verify that no build error appears in the Atmel Studio output window

                                                          Figure 5-3 Atmel Studio Output Window

                                                          12 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt13 Open the ldquoMicrochip SmartConnectrdquo application on Android or iOS device14 Connect and pair to the peripheral (pass key 123456)15 Custom service must now be visible after pairing with peripheral under Microchip SmartConnect

                                                          application

                                                          ATBTLC1000Setting up and Handling Custom Service

                                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 41

                                                          Figure 5-4 Service List in Microchip SmartConnect Application

                                                          Note  Custom service is displayed as unknown service in the above figure as this service is not aSIG-defined service

                                                          Figure 5-5 General Information

                                                          16 Serial terminal client must display the following Log output

                                                          ATBTLC1000Setting up and Handling Custom Service

                                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 42

                                                          Figure 5-6 Log Output Window

                                                          52 Updating the Temperature CharacteristicIn the previous assignment the custom Temperature characteristic is defined with a notify attribute Thistype of attribute requires notification to be sent to central when a new characteristic value is availableThe update of any ldquonotifyrdquo characteristic value is based on following interaction between the Host MCUand the ATBTLC1000Figure 5-7 Characteristic Notification

                                                          521 Setting a Characteristic Value ( at_ble_characteristic_value_set)Prototype ndashat_ble_status_t at_ble_characteristic_value_setat_ble_handle_t handleuint8_t valueuint16_t len)

                                                          Description ndash Sets a characteristic value in ATBTLC1000 memory

                                                          Parameters ndash

                                                          ATBTLC1000Setting up and Handling Custom Service

                                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 43

                                                          bull handle [inout] ndash Pointer to Characteristic handle to be changedbull value [in] ndash New valuebull len [in] ndash Value length in bytes

                                                          Return ndash Execution Status

                                                          522 Sending a Notification (at_ble_notification_send)Prototype ndashat_ble_status_t at_ble_notification_send(at_ble_handle_t conn_handleat_ble_handle_t attr_handle)

                                                          Description ndash Sends a Notification

                                                          Parameters ndash

                                                          bull conn_handle[in] ndash handle of the connection to be notifiedbull attr_handle [in] ndash handle of the attribute originating the notification

                                                          Return ndash Execution Status

                                                          523 Sending Temperature Information Once in Every 10 Seconds to Central1 Modify the following ldquotimer_callback_fnrdquo callback function from the startup_templatec

                                                          filestatic void timer_callback_fn(void)timer_flag = true

                                                          2 hw_timer_init()in main routine of startup_templatec initializes the hardware timer3 If a client (Central) enables the notifications for a server the server (Peripheral) receives an

                                                          AT_BLE_CHARACTERISTIC_CHANGED event callback then start the periodic 10 second timer forsending the notification Add the following code in previously definedcustom_char_changed_app_event function Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))timer_flag = falsehw_timer_start(10)printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

                                                          4 Declare the following Temperature_value global variable in startup_templatec staticuint8_t Temperature_value = 25 as static

                                                          5 Add the following send_temperature_notification function in startup_templatec tosend temperature every 10 seconds Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++

                                                          ATBTLC1000Setting up and Handling Custom Service

                                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 44

                                                          if(Temperature_value gt 75)Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set(environment_service_characs[0]char_val_handle(uint8_t )ampTemperature_valuesizeof(Temperature_value))ble_status = at_ble_notification_send(0environment_service_characs[0]char_val_handle)if(ble_status = AT_BLE_SUCCESS)printf(fail to send temperature update notification )

                                                          6 Add the following code in main routine to send temperature data every 10 secondswhile (1) ble_event_task()if(connected_flag == true ampamp timer_flag == truetimer_flag = falsesend_temperature_notification()

                                                          7 Click to save the project ltCtrl+Sgt

                                                          8 Compile the project by pressing the button ltF7gt9 Verify that no build error appears in Atmel Studio output window

                                                          Figure 5-8 Atmel Studio Output Window

                                                          10 Click to program the project binary on the L21 Xplained XSTK11 Open ldquoMicrochip SmartConnectrdquo Application on Android or iOS device12 Connect and pair to the peripheral (pass key 123456)13 Click NOTIFY to start the notification14 Temperature information in HEX values must be displayed in Microchip SmartConnect application

                                                          ATBTLC1000Setting up and Handling Custom Service

                                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 45

                                                          Figure 5-9 Notification Window

                                                          15 Serial terminal must display the following log outputFigure 5-10 Log Output Window

                                                          ATBTLC1000Setting up and Handling Custom Service

                                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 46

                                                          6 Appendix A Software Solution - Pre-Defined SvcThe following is the code implementation for handling of pre-defined service done in 4 SettingHandlingof Pre-Defined Service

                                                          - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehinclude device_infoh

                                                          volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false Services handlers dis_gatt_service_handler_t dis_service_handler

                                                          static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

                                                          void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                                                          Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                                                          Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                                                          static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                                                          Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void) Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks)

                                                          ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

                                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 47

                                                          ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                                          timer callback function static void timer_callback_fn(void) Add timer callback functionality here

                                                          void button_cb(void) Add button callback functionality here

                                                          int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                                                          Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                                                          DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks()

                                                          Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service) dis_init_service(ampdis_service_handler) Define the primary service in the GATT server database if((dis_primary_service_define(ampdis_service_handler)) = AT_BLE_SUCCESS) printf(Device Information Service definition failed)

                                                          Start Advertising process start_advertisement() while(true) ble_event_task()

                                                          ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

                                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 48

                                                          7 Appendix B Software Solution - Custom ServiceThe following is the code implementation for handling of pre-defined service done in 5 Setting up andHandling Custom Service

                                                          - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templateh

                                                          volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false

                                                          static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

                                                          define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0

                                                          define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

                                                          Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

                                                          void custom_environment_service_init(void) at_ble_uuid_t environment_service_uuid uint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUID uint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128 memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperature environment_service_characs[0]user_desc_len = 10 environment_service_characs[0]user_desc_max_len = 10 environment_service_characs[0]uuidtype = AT_BLE_UUID_128 memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16) environment_service_characs[0]properties = AT_BLE_CHAR_READ | AT_BLE_CHAR_NOTIFY environment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature value environment_service_characs[0]value_permissions = (AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuid ampenvironment_service_handlerNULL0 environment_service_characs1)=AT_BLE_SUCCESS) printf(n Assignment 41 Failed to Initialize custom environment service) else printf(n Assignment 41 Initialize custom environment service)

                                                          Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param) at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )param if (event_param-gtstatus == AT_BLE_SUCCESS) printf(n Assignment 41Notification Successfully sent over the air)

                                                          ATBTLC1000Appendix B Software Solution - Custom Service

                                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 49

                                                          else printf(n Assignment 41Sending Notification over the air failed) return AT_BLE_SUCCESS

                                                          static at_ble_status_t custom_char_changed_app_event(void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle -gt char_new_value[0])) timer_flag = false hw_timer_start(10) printf(n Assignment 41Characteristic changed event) return AT_BLE_SUCCESS

                                                          static const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handler characteristic_changed = custom_char_changed_app_event

                                                          Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                                          void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                                                          Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                                                          Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                                                          static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                                                          Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void)

                                                          ATBTLC1000Appendix B Software Solution - Custom Service

                                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 50

                                                          Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                                          timer callback function static void timer_callback_fn(void) Add timer callback functionality here timer_flag = true

                                                          void button_cb(void) Add button callback functionality here

                                                          static uint8_t Temperature_value = 25

                                                          Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++ if(Temperature_value gt 75) Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set( environment_service_characs[0]char_val_handle (uint8_t )ampTemperature_value sizeof(Temperature_value)) ble_status = at_ble_notification_send(0 environment_service_characs[0]char_val_handle) if(ble_status = AT_BLE_SUCCESS) printf(fail to send temperature update notification )

                                                          int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                                                          Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                                                          DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register Gap ATBTLC1000 Callbacks register_btlc1000_callbacks()

                                                          Custom service init custom_environment_service_init()

                                                          ATBTLC1000Appendix B Software Solution - Custom Service

                                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 51

                                                          Register Gatt server callback register_gatt_server_callbacks()

                                                          Start Advertising process start_advertisement() while(true) ble_event_task() if(connected_flag == true ampamp timer_flag == true) timer_flag = false send_temperature_notification()

                                                          ATBTLC1000Appendix B Software Solution - Custom Service

                                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 52

                                                          8 Document Revision HistoryRev B - 42018

                                                          Section Changes

                                                          Document Revised contents to match various Bluetooth Low Energy standard versions

                                                          Rev A - 122017

                                                          Section Changes

                                                          Document Initial release

                                                          ATBTLC1000Document Revision History

                                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 53

                                                          The Microchip Web Site

                                                          Microchip provides online support via our web site at httpwwwmicrochipcom This web site is used asa means to make files and information easily available to customers Accessible by using your favoriteInternet browser the web site contains the following information

                                                          bull Product Support ndash Data sheets and errata application notes and sample programs designresources userrsquos guides and hardware support documents latest software releases and archivedsoftware

                                                          bull General Technical Support ndash Frequently Asked Questions (FAQ) technical support requestsonline discussion groups Microchip consultant program member listing

                                                          bull Business of Microchip ndash Product selector and ordering guides latest Microchip press releaseslisting of seminars and events listings of Microchip sales offices distributors and factoryrepresentatives

                                                          Customer Change Notification Service

                                                          Microchiprsquos customer notification service helps keep customers current on Microchip productsSubscribers will receive e-mail notification whenever there are changes updates revisions or erratarelated to a specified product family or development tool of interest

                                                          To register access the Microchip web site at httpwwwmicrochipcom Under ldquoSupportrdquo click onldquoCustomer Change Notificationrdquo and follow the registration instructions

                                                          Customer Support

                                                          Users of Microchip products can receive assistance through several channels

                                                          bull Distributor or Representativebull Local Sales Officebull Field Application Engineer (FAE)bull Technical Support

                                                          Customers should contact their distributor representative or Field Application Engineer (FAE) for supportLocal sales offices are also available to help customers A listing of sales offices and locations is includedin the back of this document

                                                          Technical support is available through the web site at httpwwwmicrochipcomsupport

                                                          Microchip Devices Code Protection Feature

                                                          Note the following details of the code protection feature on Microchip devices

                                                          bull Microchip products meet the specification contained in their particular Microchip Data Sheetbull Microchip believes that its family of products is one of the most secure families of its kind on the

                                                          market today when used in the intended manner and under normal conditionsbull There are dishonest and possibly illegal methods used to breach the code protection feature All of

                                                          these methods to our knowledge require using the Microchip products in a manner outside theoperating specifications contained in Microchiprsquos Data Sheets Most likely the person doing so isengaged in theft of intellectual property

                                                          bull Microchip is willing to work with the customer who is concerned about the integrity of their code

                                                          ATBTLC1000

                                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 54

                                                          bull Neither Microchip nor any other semiconductor manufacturer can guarantee the security of theircode Code protection does not mean that we are guaranteeing the product as ldquounbreakablerdquo

                                                          Code protection is constantly evolving We at Microchip are committed to continuously improving thecode protection features of our products Attempts to break Microchiprsquos code protection feature may be aviolation of the Digital Millennium Copyright Act If such acts allow unauthorized access to your softwareor other copyrighted work you may have a right to sue for relief under that Act

                                                          Legal Notice

                                                          Information contained in this publication regarding device applications and the like is provided only foryour convenience and may be superseded by updates It is your responsibility to ensure that yourapplication meets with your specifications MICROCHIP MAKES NO REPRESENTATIONS ORWARRANTIES OF ANY KIND WHETHER EXPRESS OR IMPLIED WRITTEN OR ORAL STATUTORYOR OTHERWISE RELATED TO THE INFORMATION INCLUDING BUT NOT LIMITED TO ITSCONDITION QUALITY PERFORMANCE MERCHANTABILITY OR FITNESS FOR PURPOSEMicrochip disclaims all liability arising from this information and its use Use of Microchip devices in lifesupport andor safety applications is entirely at the buyerrsquos risk and the buyer agrees to defendindemnify and hold harmless Microchip from any and all damages claims suits or expenses resultingfrom such use No licenses are conveyed implicitly or otherwise under any Microchip intellectualproperty rights unless otherwise stated

                                                          Trademarks

                                                          The Microchip name and logo the Microchip logo AnyRate AVR AVR logo AVR Freaks BeaconThingsBitCloud CryptoMemory CryptoRF dsPIC FlashFlex flexPWR Heldo JukeBlox KeeLoq KeeLoq logoKleer LANCheck LINK MD maXStylus maXTouch MediaLB megaAVR MOST MOST logo MPLABOptoLyzer PIC picoPower PICSTART PIC32 logo Prochip Designer QTouch RightTouch SAM-BASpyNIC SST SST Logo SuperFlash tinyAVR UNIO and XMEGA are registered trademarks ofMicrochip Technology Incorporated in the USA and other countries

                                                          ClockWorks The Embedded Control Solutions Company EtherSynch Hyper Speed Control HyperLightLoad IntelliMOS mTouch Precision Edge and Quiet-Wire are registered trademarks of MicrochipTechnology Incorporated in the USA

                                                          Adjacent Key Suppression AKS Analog-for-the-Digital Age Any Capacitor AnyIn AnyOut BodyComchipKIT chipKIT logo CodeGuard CryptoAuthentication CryptoCompanion CryptoControllerdsPICDEM dsPICDEMnet Dynamic Average Matching DAM ECAN EtherGREEN In-Circuit SerialProgramming ICSP Inter-Chip Connectivity JitterBlocker KleerNet KleerNet logo Mindi MiWimotorBench MPASM MPF MPLAB Certified logo MPLIB MPLINK MultiTRAK NetDetach OmniscientCode Generation PICDEM PICDEMnet PICkit PICtail PureSilicon QMatrix RightTouch logo REALICE Ripple Blocker SAM-ICE Serial Quad IO SMART-IS SQI SuperSwitcher SuperSwitcher II TotalEndurance TSHARC USBCheck VariSense ViewSpan WiperLock Wireless DNA and ZENA aretrademarks of Microchip Technology Incorporated in the USA and other countries

                                                          SQTP is a service mark of Microchip Technology Incorporated in the USA

                                                          Silicon Storage Technology is a registered trademark of Microchip Technology Inc in other countries

                                                          GestIC is a registered trademark of Microchip Technology Germany II GmbH amp Co KG a subsidiary ofMicrochip Technology Inc in other countries

                                                          All other trademarks mentioned herein are property of their respective companies

                                                          ATBTLC1000

                                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 55

                                                          copy 2018 Microchip Technology Incorporated Printed in the USA All Rights Reserved

                                                          ISBN 978-1-5224-2921-0

                                                          Quality Management System Certified by DNV

                                                          ISOTS 16949Microchip received ISOTS-169492009 certification for its worldwide headquarters design and waferfabrication facilities in Chandler and Tempe Arizona Gresham Oregon and design centers in Californiaand India The Companyrsquos quality system processes and procedures are for its PICreg MCUs and dsPICreg

                                                          DSCs KEELOQreg code hopping devices Serial EEPROMs microperipherals nonvolatile memory andanalog products In addition Microchiprsquos quality system for the design and manufacture of developmentsystems is ISO 90012000 certified

                                                          ATBTLC1000

                                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 56

                                                          AMERICAS ASIAPACIFIC ASIAPACIFIC EUROPECorporate Office2355 West Chandler BlvdChandler AZ 85224-6199Tel 480-792-7200Fax 480-792-7277Technical SupporthttpwwwmicrochipcomsupportWeb AddresswwwmicrochipcomAtlantaDuluth GATel 678-957-9614Fax 678-957-1455Austin TXTel 512-257-3370BostonWestborough MATel 774-760-0087Fax 774-760-0088ChicagoItasca ILTel 630-285-0071Fax 630-285-0075DallasAddison TXTel 972-818-7423Fax 972-818-2924DetroitNovi MITel 248-848-4000Houston TXTel 281-894-5983IndianapolisNoblesville INTel 317-773-8323Fax 317-773-5453Tel 317-536-2380Los AngelesMission Viejo CATel 949-462-9523Fax 949-462-9608Tel 951-273-7800Raleigh NCTel 919-844-7510New York NYTel 631-435-6000San Jose CATel 408-735-9110Tel 408-436-4270Canada - TorontoTel 905-695-1980Fax 905-695-2078

                                                          Australia - SydneyTel 61-2-9868-6733China - BeijingTel 86-10-8569-7000China - ChengduTel 86-28-8665-5511China - ChongqingTel 86-23-8980-9588China - DongguanTel 86-769-8702-9880China - GuangzhouTel 86-20-8755-8029China - HangzhouTel 86-571-8792-8115China - Hong Kong SARTel 852-2943-5100China - NanjingTel 86-25-8473-2460China - QingdaoTel 86-532-8502-7355China - ShanghaiTel 86-21-3326-8000China - ShenyangTel 86-24-2334-2829China - ShenzhenTel 86-755-8864-2200China - SuzhouTel 86-186-6233-1526China - WuhanTel 86-27-5980-5300China - XianTel 86-29-8833-7252China - XiamenTel 86-592-2388138China - ZhuhaiTel 86-756-3210040

                                                          India - BangaloreTel 91-80-3090-4444India - New DelhiTel 91-11-4160-8631India - PuneTel 91-20-4121-0141Japan - OsakaTel 81-6-6152-7160Japan - TokyoTel 81-3-6880- 3770Korea - DaeguTel 82-53-744-4301Korea - SeoulTel 82-2-554-7200Malaysia - Kuala LumpurTel 60-3-7651-7906Malaysia - PenangTel 60-4-227-8870Philippines - ManilaTel 63-2-634-9065SingaporeTel 65-6334-8870Taiwan - Hsin ChuTel 886-3-577-8366Taiwan - KaohsiungTel 886-7-213-7830Taiwan - TaipeiTel 886-2-2508-8600Thailand - BangkokTel 66-2-694-1351Vietnam - Ho Chi MinhTel 84-28-5448-2100

                                                          Austria - WelsTel 43-7242-2244-39Fax 43-7242-2244-393Denmark - CopenhagenTel 45-4450-2828Fax 45-4485-2829Finland - EspooTel 358-9-4520-820France - ParisTel 33-1-69-53-63-20Fax 33-1-69-30-90-79Germany - GarchingTel 49-8931-9700Germany - HaanTel 49-2129-3766400Germany - HeilbronnTel 49-7131-67-3636Germany - KarlsruheTel 49-721-625370Germany - MunichTel 49-89-627-144-0Fax 49-89-627-144-44Germany - RosenheimTel 49-8031-354-560Israel - RarsquoananaTel 972-9-744-7705Italy - MilanTel 39-0331-742611Fax 39-0331-466781Italy - PadovaTel 39-049-7625286Netherlands - DrunenTel 31-416-690399Fax 31-416-690340Norway - TrondheimTel 47-7289-7561Poland - WarsawTel 48-22-3325737Romania - BucharestTel 40-21-407-87-50Spain - MadridTel 34-91-708-08-90Fax 34-91-708-08-91Sweden - GothenbergTel 46-31-704-60-40Sweden - StockholmTel 46-8-5090-4654UK - WokinghamTel 44-118-921-5800Fax 44-118-921-5820

                                                          Worldwide Sales and Service

                                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 57

                                                          • Introduction
                                                          • Table of Contents
                                                          • 1 Getting Started
                                                            • 11 Software Prerequisites
                                                              • 111 Installation Steps of Atmel Studio 7
                                                                • 12 Software Setup
                                                                  • 121 Installation of Microchip SmartConnect application on a Mobile device
                                                                    • 13 ATBTLC1000 Embedded Firmware
                                                                    • 14 ATBTLC1000 Host Software API
                                                                    • 15 Hardware Prerequisites
                                                                      • 151 SMARTtrade SAM L21 Xplained Pro
                                                                      • 152 ATBTLC1000ZR Xplained Pro Extension board
                                                                        • 16 Hardware Setup
                                                                          • 2 Creating the Project and Initializing
                                                                            • 21 Creating Project from ASF
                                                                            • 22 Configuring ASF for ATBTLC1000-ZR
                                                                            • 23 Compiling and Testing the Project
                                                                              • 3 Establishing Connection with Central Device
                                                                                • 31 Configuring and Starting the Advertisement Process
                                                                                  • 311 Flags (AD Type 0x00)
                                                                                  • 312 Available Service UUID (AD Types 0x02 to 0x07)
                                                                                  • 313 Device Name (AD Types 0x08 to 0x09)
                                                                                    • 3131 Setting the Advertisement Payload (ble_advertisement_data_set)
                                                                                    • 3132 Starting the Advertisement Process (at_ble_adv_start)
                                                                                      • 314 Advertisement Process
                                                                                        • 3141 Starting the Advertisement Process
                                                                                            • 32 Managing GAP events
                                                                                              • 321 Handling of Connected and Disconnected GAP Events
                                                                                                  • 4 SettingHandling of Pre-Defined Service
                                                                                                    • 41 Adding Device Info Service Component from ASF Wizard to Project
                                                                                                    • 42 Configuring and Loading Device Information Service
                                                                                                      • 421 Procedure to Configure and Load Device Info Service
                                                                                                          • 5 Setting up and Handling Custom Service
                                                                                                            • 51 Configuring and Loading the Custom Environment Service
                                                                                                              • 511 Procedure to Configure and Load Custom Environment Service
                                                                                                                • 52 Updating the Temperature Characteristic
                                                                                                                  • 521 Setting a Characteristic Value ( at_ble_characteristic_value_set)
                                                                                                                  • 522 Sending a Notification (at_ble_notification_send)
                                                                                                                  • 523 Sending Temperature Information Once in Every 10 Seconds to Central
                                                                                                                      • 6 Appendix A Software Solution - Pre-Defined Svc
                                                                                                                      • 7 Appendix B Software Solution - Custom Service
                                                                                                                      • 8 Document Revision History
                                                                                                                      • The Microchip Web Site
                                                                                                                      • Customer Change Notification Service
                                                                                                                      • Customer Support
                                                                                                                      • Microchip Devices Code Protection Feature
                                                                                                                      • Legal Notice
                                                                                                                      • Trademarks
                                                                                                                      • Quality Management System Certified by DNV
                                                                                                                      • Worldwide Sales and Service

                                                            4 SettingHandling of Pre-Defined ServiceThe management of services are done in the GATT layer of the ATBTLC1000 ROM coded Bluetooth LowEnergy Stack The GATT transactions are based on high-level nested objects called Profiles Servicesand Characteristics stored in SRAM memory of ATBTLC1000 device This assignment adds the pre-defined service of information service from ASF library

                                                            Figure 4-1 ATBTLC1000 GATT Layers

                                                            bull ProfilesProfiles are not available in the Bluetooth Low Energy peripheral they are simply a pre-definedcollection of services that have been compiled by either the Bluetooth SIG (adopted GATT basedprofile) or by the application developer (custom profiles) For example the Heart Rate Profilecombines the Heart Rate Service and the Device Information Service

                                                            Note  The complete list of officially adopted GATT-based profiles is available on the BluetoothDeveloper Portal

                                                            bull ServicesA service is a collection of data and associated behaviors which accomplish a particular function orfeature of a device or portions of a device A service may reference other primary or secondaryservices andor a set of characteristics that make up the service Each service distinguishes itselffrom other services by means of a unique numeric ID called as UUID which can be either 16-bit(for officially adopted Bluetooth Low Energy Services) or 128-bit (for custom services)

                                                            Note  A full list of officially adopted services and their UUID are seen on the Bluetooth DeveloperPortal

                                                            bull CharacteristicsA characteristic is the lowest level concept in GATT transactions It contains a single data point withdifferent attributes such as notify read or write capabilities Similar to Services each characteristiccan be distinguished by a SIG-defined adopted UUID (16-bit) or custom (128-bit) UUID This UUIDensures interoperability across Bluetooth Low Energy devices The characteristics are important tointeract with in a Bluetooth Low Energy network In addition to standard UUID the custom UUID isused in case of specific application When characteristics with custom UUID are used in a devicethen it will be interoperable only with those devices that support these characteristics with customUUID

                                                            ATBTLC1000SettingHandling of Pre-Defined Service

                                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 30

                                                            In this assignment the following steps are added to the Host MCU application to set up and handle adevice information service within the ATBTLC1000 module The following steps are added to the startupproject

                                                            bull Adding device info service component from ASFbull Configuring and loading the service

                                                            Figure 4-2 Device Information Service

                                                            41 Adding Device Info Service Component from ASF Wizard to ProjectTo use the ldquoofficially adopted GATT-based profilesrdquo from SIG ASF provides Bluetooth Low Energy servicecomponents including init functions that pre-define services in Host memory

                                                            Note  Before starting this assignment be sure to follow the steps mentioned in 2 Creating the Projectand Initializing and 3 Establishing Connection with Central Device

                                                            1 Click ASF gt ASF Wizard2 Search for ldquoBLE-Device Information Servicesrdquo and then click Add

                                                            ATBTLC1000SettingHandling of Pre-Defined Service

                                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 31

                                                            Figure 4-3 Available Modules

                                                            3 Now ldquoBLE-Device Information Servicesrdquo (component) appears in ldquoSelected ModulesrdquoFigure 4-4 Selected Modules

                                                            4 Click Apply to add the component to the projectFigure 4-5 Adding the Modules to Project

                                                            5 The ldquoDevice Information Servicerdquo component is added to the project and is confirmed bydevice_information folder added in Solution Explorer

                                                            ATBTLC1000SettingHandling of Pre-Defined Service

                                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 32

                                                            Figure 4-6 Device Information Service Added to Project

                                                            42 Configuring and Loading Device Information ServiceThe ATBTLC1000 Host driver provides a set of GATT functions that allows storing and updating theservices in ATBTLC1000 memories

                                                            Prototype at_ble_status_t at_ble_primary_service_define(at_ble_uuid_t uuidat_ble_handle_t service_handleat_ble_included_service_t included_service_listuint16_t included_service_countat_ble_characteristic_t charactristic_listuint16_t charactristic_count)

                                                            Description Defines a new primary service along with its included services and characteristics inATBTLC1000

                                                            Parameters

                                                            bull Uuid [In] ndash primary service UUIDbull service_handle [Out] ndash Service handle is returned herebull included_service_list [In] ndash an array of included service referencesbull included_service_count [In] ndash number of elements in included_service_listbull charactristic_list [InOut] ndash an array of characteristics included in the service this array

                                                            is updated with respective characteristics handlesbull charactristic_count[In] ndash number of elements in charactristic_list

                                                            Return Execution Status

                                                            This function requires an argument as GATT description structure of the service that is implemented Thepreviously added Device Info service component provides Bluetooth Low Energy service middlewareincluding the init functions that predefine the services See below ldquodis_init_servicerdquo from device infoBLE service (device_infohc)

                                                            Prototype ndash void dis_init_service(dis_gatt_service_handler_t device_info_serv)Description ndash Initialize the device information service handler in the host MCU memory

                                                            Parameters ndash

                                                            ATBTLC1000SettingHandling of Pre-Defined Service

                                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 33

                                                            bull device_info_serv [Inout] pointer to device info GATT description handler to beupdated

                                                            Return None

                                                            Here is a picture of GATT device info service descriptor definition in Host memory

                                                            device_info_serv-gtserv_handle = 0device_info_serv-gtserv_uuidtype = AT_BLE_UUID_16device_info_serv-gtserv_uuiduuid[0] = (uint8_t) DIS_SERVICE_UUIDdevice_info_serv-gtserv_uuiduuid[1] = (uint8_t) (DIS_SERVICE_UUID gtgt 8)Characteristic Info for Manufacturer Name Stringdevice_info_serv-gtserv_chars[0]char_val_handle = 0 handle stored here device_info_serv-gtserv_chars[0]uuidtype = AT_BLE_UUID_16device_info_serv-gtserv_chars[0]uuiduuid[0] = (uint8_t) IS_CHAR_MANUFACTURER_NAME_UUID UUID Manufacturer Name String device_info_serv-gtserv_chars[0]uuiduuid[1] = (uint8_t) (DIS_CHAR_MANUFACTURER_NAME_UUID gtgt 8) UUID Manufacturer Name String device_info_serv-gtserv_chars[0]properties = AT_BLE_CHAR_READ Properties memcpy(char_valuemanufacturer_nameDEFAULT_MANUFACTURER_NAMEDIS_CHAR_MANUFACTURER_NAME_INIT_LEN)device_info_serv-gtserv_chars[0]init_value = char_valuemanufacturer_namedevice_info_serv-gtserv_chars[0]value_init_len = DIS_CHAR_MANUFACTURER_NAME_INIT_LENdevice_info_serv-gtserv_chars[0]value_max_len = DIS_CHAR_MANUFACTURER_NAME_MAX_LENif BLE_PAIR_ENABLEdevice_info_serv-gtserv_chars[0]value_permissions = AT_BLE_ATTR_READABLE_REQ_AUTHN_NO_AUTHR permissions elsedevice_info_serv-gtserv_chars[0]value_permissions = AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR permissions endifdevice_info_serv-gtserv_chars[0]user_desc = NULL user defined name device_info_serv-gtserv_chars[0]user_desc_len = 0device_info_serv-gtserv_chars[0]user_desc_max_len = 0device_info_serv-gtserv_chars[0]user_desc_permissions = AT_BLE_ATTR_NO_PERMISSIONS user description permissionsdevice_info_serv-gtserv_chars[0]client_config_permissions = AT_BLE_ATTR_NO_PERMISSIONS client config permissionsdevice_info_serm hdsv-gtserv_chars[0]server_config_permissions = AT_BLE_ATTR_NO_PERMISSIONS server config permissionsdevice_info_serv-gtserv_chars[0]user_desc_handle = 0 user desc handlesdevice_info_serv-gtserv_chars[0]client_config_handle = 0 client config handlesdevice_info_serv-gtserv_chars[0]server_config_handle = 0 server config handlesdevice_info_serv-gtserv_chars[0]presentation_format = NULL presentation format

                                                            Note  In case of custom service the above definition initialization must be taken care of by thedeveloper

                                                            421 Procedure to Configure and Load Device Info Service1 Include device info service header file (device_infoh) at the beginning of

                                                            startup_templatec fileinclude ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehinclude device_infoh

                                                            2 Define a device info service handler as global in startup_templatec file Serviceshandlers dis_gatt_service_handler_t dis_service_handler

                                                            ATBTLC1000SettingHandling of Pre-Defined Service

                                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 34

                                                            3 Add dis_init_service and at_ble_primary_service_define functions as called abovethe advertisement start in main routine Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service)dis_init_service (ampdis_service_handler) Define the primary service in the GATT server database if ((dis_primary_service_define (ampdis_service_handler)) = AT_BLE_SUCCESS)printf(Device Information Service definition failed) Start Advertising process start_advertisement()

                                                            4 Click to save the project ltCtrl+Sgt and compile the project by pressing button ltF7gt5 Verify that no build error appears in Atmel Studio output window

                                                            Figure 4-7 Atmel Studio Output Window

                                                            6 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt7 Open ldquoMicrochip SmartConnectrdquo application on Android or iOS device8 Press ltStart Scangt button and connect to peripheral

                                                            Note  The device name is a characteristic and contains the name of the device This device namecan be read by the central device to know the name of the device in order to differentiate thedevices This is being set using at_ble_device_name_set()API The device name is set bydefault when ble_device_init is called and the value is pre-defined using BLE_DEVICE_NAMEThe device name can also be sent as part of advertisement payload to be same as the oneconfigured in at_ble_adv_data_set() API It is the responsibility of users to keep the devicename set in advertisement payload the same as that configured inat_ble_device_name_set()

                                                            9 The Service must now be visible after pairing with peripheral under Microchip SmartConnectapplication

                                                            ATBTLC1000SettingHandling of Pre-Defined Service

                                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 35

                                                            Figure 4-8 Service List in Microchip SmartConnect Application

                                                            Note  If the pairing of ATBTLC1000 with Microchip Smart connect is not successful then removethe pairing information from mobile by selecting ldquoForget Devicerdquo from the mobile settings Thereason for this is that the mobile app stores the previous pairing information but the ATBTLC1000device lost the previous pairing information due to RESET since it was stored on temporary storage(RAM)

                                                            10 The serial terminal must display the following log output windowFigure 4-9 Console Log Window

                                                            ATBTLC1000SettingHandling of Pre-Defined Service

                                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 36

                                                            5 Setting up and Handling Custom ServiceThe previous assignment describes the handling of Bluetooth Low Energy SIG defined device infoservice which is the predefined service available in ASF component This assignment describes thecustom service So the service initialization needs to be implemented In the context of customizedenvironment service the following service description is pushed in ATBTLC1000 memory

                                                            Figure 5-1 Custom Service

                                                            Custom Environment Service Description

                                                            bull UUID type ndash Custom UUID (128-bit)bull UUID ndash 1bc5d5a5-0200-a687-e511-3639c1ba5af0

                                                            Characteristic 0 (Temperature)

                                                            bull User Description ndash Temperaturebull UUID type ndash Custom UUID (128-bit)bull UUID ndash 1bc5d5a5-0200-a687-e511-3639d8ba5af0bull Properties ndash Read Notifybull Value permission ndash No authorization requiredbull Client config permission ndash No permissionbull Server config permission ndash No permission

                                                            Note  In this definition UUIDs are generated randomly Custom servicescharacteristics are free to useany 128-bit UUID less than the base UUID There is no reserved space for vendors to use 16-bit or 32-bitUUIDs

                                                            With this definition any temperature change is notified to the central The notify mechanism allows thecentral to know when the data changes When notify property of the Client Characteristic ConfigurationDescriptor is enabled by the central and the device writes the new value then this updated value isautomatically sent to the central through a notification The central is not required to send readcharacteristic commands explicitly to the peripheral (GATT server)

                                                            To setup and handle the custom environment service in ATBTLC1000 module the following steps areadded to the Host MCU application

                                                            bull Configure and load the custom servicebull Update Temperature characteristic and notify to the central devicebull Receive and handle notification from the Host device

                                                            ATBTLC1000Setting up and Handling Custom Service

                                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 37

                                                            Figure 5-2 Custom Service Flowchart

                                                            51 Configuring and Loading the Custom Environment ServiceThe ATBTLC1000 Host driver provides the following set of GATT functions that allows it to push andupdate the service descriptions in the ATBTLC1000 SRAM memory

                                                            Note  Before starting this assignment be sure to follow the steps mentioned in 2 Creating the Projectand Initializing and 3 Establishing Connection with Central Device

                                                            Prototype ndashat_ble_status_t at_ble_primary_service_define(at_ble_uuid_t uuidat_ble_handle_t service_handleat_ble_included_service_t included_service_listuint16_t included_service_countat_ble_characteristic_t charactristic_listuint16_t charactristic_count)

                                                            Description ndash Defines a new primary service along with its included services and characteristics inATBTLC1000 module

                                                            Parameters

                                                            bull Uuid [In] ndash primary service UUIDbull service_handle [Out] ndash service handle is returned herebull included_service_list [In] ndash array of included service referencesbull included_service_count [In] ndash number of elements in included_service_listbull charactristic_list [InOut] ndash an array of characteristics included in the service this array

                                                            is update with respective characteristics handlesbull charactristic_count[In] ndash number of elements in charactristic_list

                                                            ATBTLC1000Setting up and Handling Custom Service

                                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 38

                                                            Return ndash Execution Status

                                                            bull Characteristics ndashndash Characteristics definition is done through specific array of following

                                                            ldquoat_ble_characteristic_trdquo structure instancestypedef structat_ble_handle_t char_val_handle Handler (returned during service initialisation)at_ble_uuid_t uuid Characteristic UUID (type and value)at_ble_char_properties_t propertiesCharac Properties (read write notify)uint8_t init_value initial valueuint16_t value_init_len initial value lengthuint16_t value_max_len value max lengthat_ble_attr_permissions_t value_permissions access authorization and authenticationuint8_t user_desc User descriptionuint16_t user_desc_len User description lengthuint16_t user_desc_max_len User description max lengthat_ble_char_presentation_t presentation_format Presentation formatat_ble_attr_permissions_t user_desc_permissions User description permissionat_ble_attr_permissions_t client_config_permissions client permissionat_ble_attr_permissions_t server_config_permissions server permissionat_ble_handle_t user_desc_handle description handlerat_ble_handle_t client_config_handle Client config handlerat_ble_handle_t server_config_handle Server config handler at_ble_characteristic_t

                                                            511 Procedure to Configure and Load Custom Environment Service1 Define the following service UUID and characteristic UUID in startup_templatec file

                                                            define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

                                                            2 Define the following environment service handler and characteristics variable as global instartup_templatec file Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

                                                            3 Add the following service initialization function custom_environment_service_init instartup_templatecvoid custom_environment_service_init(void) at_ble_uuid_t environment_service_uuiduint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUIDuint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperatureenvironment_service_characs[0]user_desc_len = 10environment_service_characs[0]user_desc_max_len = 10environment_service_characs[0]uuidtype = AT_BLE_UUID_128memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16)environment_service_characs[0]properties = AT_BLE_CHAR_READ |AT_BLE_CHAR_NOTIFYenvironment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature valueenvironment_service_characs[0]value_permissions =(AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuidampenvironment_service_handlerNULL0environment_service_characs1)=AT_BLE_SUCCESS)printf(n Assignment 41 Failed to Initialize custom environment service)

                                                            ATBTLC1000Setting up and Handling Custom Service

                                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 39

                                                            elseprintf(n Assignment 41 Initialize custom environment service)

                                                            4 Declare and implement the following GATT event callback functioncustom_char_changed_app_event in startup_templatec file If a client (central) enablesnotifications for a server the server (peripheral) receives an AT_BLE_CHARACTERISTIC_CHANGEDevent and this event callback is called Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

                                                            5 Declare and implement the following custom_notification_confirmation_handlerfunction in startup_templatec file Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param)at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )paramif (event_param-gtstatus == AT_BLE_SUCCESS)printf(n Assignment 41Notification Successfully sent over the air) else printf(n Assignment 41Sending Notification over the air failed)return AT_BLE_SUCCESS

                                                            6 Declare the following GATT server callback structure in startup_templatec file Thisassignment uses two GATT callbacksstatic const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handlercharacteristic_changed = custom_char_changed_app_event

                                                            7 Add the following register_gatt_server_callbacks function in startup_templatec toregister GATT server callback for notification confirmation event Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks)ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACKBLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle)if (ble_status = true)printf(nError when Registering ATBTLC1000 callbacks)

                                                            8 Add custom_environment_service_init and register_gatt_server_callbacksfunction calls prior to start advertisement in the application main routine to initialize custom serviceand to register the GATT server callbacksint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()

                                                            ATBTLC1000Setting up and Handling Custom Service

                                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 40

                                                            endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks() Custom service init custom_environment_service_init ( ) Register Gatt server callbacks register_gatt_server_callbacks ( ) Start Advertising process start_advertisement()while(true)ble_event_task()

                                                            9 Click to save the project ltCtrl+Sgt

                                                            10 Compile the project by pressing button ltF7gt11 Verify that no build error appears in the Atmel Studio output window

                                                            Figure 5-3 Atmel Studio Output Window

                                                            12 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt13 Open the ldquoMicrochip SmartConnectrdquo application on Android or iOS device14 Connect and pair to the peripheral (pass key 123456)15 Custom service must now be visible after pairing with peripheral under Microchip SmartConnect

                                                            application

                                                            ATBTLC1000Setting up and Handling Custom Service

                                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 41

                                                            Figure 5-4 Service List in Microchip SmartConnect Application

                                                            Note  Custom service is displayed as unknown service in the above figure as this service is not aSIG-defined service

                                                            Figure 5-5 General Information

                                                            16 Serial terminal client must display the following Log output

                                                            ATBTLC1000Setting up and Handling Custom Service

                                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 42

                                                            Figure 5-6 Log Output Window

                                                            52 Updating the Temperature CharacteristicIn the previous assignment the custom Temperature characteristic is defined with a notify attribute Thistype of attribute requires notification to be sent to central when a new characteristic value is availableThe update of any ldquonotifyrdquo characteristic value is based on following interaction between the Host MCUand the ATBTLC1000Figure 5-7 Characteristic Notification

                                                            521 Setting a Characteristic Value ( at_ble_characteristic_value_set)Prototype ndashat_ble_status_t at_ble_characteristic_value_setat_ble_handle_t handleuint8_t valueuint16_t len)

                                                            Description ndash Sets a characteristic value in ATBTLC1000 memory

                                                            Parameters ndash

                                                            ATBTLC1000Setting up and Handling Custom Service

                                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 43

                                                            bull handle [inout] ndash Pointer to Characteristic handle to be changedbull value [in] ndash New valuebull len [in] ndash Value length in bytes

                                                            Return ndash Execution Status

                                                            522 Sending a Notification (at_ble_notification_send)Prototype ndashat_ble_status_t at_ble_notification_send(at_ble_handle_t conn_handleat_ble_handle_t attr_handle)

                                                            Description ndash Sends a Notification

                                                            Parameters ndash

                                                            bull conn_handle[in] ndash handle of the connection to be notifiedbull attr_handle [in] ndash handle of the attribute originating the notification

                                                            Return ndash Execution Status

                                                            523 Sending Temperature Information Once in Every 10 Seconds to Central1 Modify the following ldquotimer_callback_fnrdquo callback function from the startup_templatec

                                                            filestatic void timer_callback_fn(void)timer_flag = true

                                                            2 hw_timer_init()in main routine of startup_templatec initializes the hardware timer3 If a client (Central) enables the notifications for a server the server (Peripheral) receives an

                                                            AT_BLE_CHARACTERISTIC_CHANGED event callback then start the periodic 10 second timer forsending the notification Add the following code in previously definedcustom_char_changed_app_event function Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))timer_flag = falsehw_timer_start(10)printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

                                                            4 Declare the following Temperature_value global variable in startup_templatec staticuint8_t Temperature_value = 25 as static

                                                            5 Add the following send_temperature_notification function in startup_templatec tosend temperature every 10 seconds Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++

                                                            ATBTLC1000Setting up and Handling Custom Service

                                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 44

                                                            if(Temperature_value gt 75)Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set(environment_service_characs[0]char_val_handle(uint8_t )ampTemperature_valuesizeof(Temperature_value))ble_status = at_ble_notification_send(0environment_service_characs[0]char_val_handle)if(ble_status = AT_BLE_SUCCESS)printf(fail to send temperature update notification )

                                                            6 Add the following code in main routine to send temperature data every 10 secondswhile (1) ble_event_task()if(connected_flag == true ampamp timer_flag == truetimer_flag = falsesend_temperature_notification()

                                                            7 Click to save the project ltCtrl+Sgt

                                                            8 Compile the project by pressing the button ltF7gt9 Verify that no build error appears in Atmel Studio output window

                                                            Figure 5-8 Atmel Studio Output Window

                                                            10 Click to program the project binary on the L21 Xplained XSTK11 Open ldquoMicrochip SmartConnectrdquo Application on Android or iOS device12 Connect and pair to the peripheral (pass key 123456)13 Click NOTIFY to start the notification14 Temperature information in HEX values must be displayed in Microchip SmartConnect application

                                                            ATBTLC1000Setting up and Handling Custom Service

                                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 45

                                                            Figure 5-9 Notification Window

                                                            15 Serial terminal must display the following log outputFigure 5-10 Log Output Window

                                                            ATBTLC1000Setting up and Handling Custom Service

                                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 46

                                                            6 Appendix A Software Solution - Pre-Defined SvcThe following is the code implementation for handling of pre-defined service done in 4 SettingHandlingof Pre-Defined Service

                                                            - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehinclude device_infoh

                                                            volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false Services handlers dis_gatt_service_handler_t dis_service_handler

                                                            static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

                                                            void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                                                            Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                                                            Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                                                            static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                                                            Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void) Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks)

                                                            ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

                                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 47

                                                            ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                                            timer callback function static void timer_callback_fn(void) Add timer callback functionality here

                                                            void button_cb(void) Add button callback functionality here

                                                            int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                                                            Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                                                            DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks()

                                                            Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service) dis_init_service(ampdis_service_handler) Define the primary service in the GATT server database if((dis_primary_service_define(ampdis_service_handler)) = AT_BLE_SUCCESS) printf(Device Information Service definition failed)

                                                            Start Advertising process start_advertisement() while(true) ble_event_task()

                                                            ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

                                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 48

                                                            7 Appendix B Software Solution - Custom ServiceThe following is the code implementation for handling of pre-defined service done in 5 Setting up andHandling Custom Service

                                                            - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templateh

                                                            volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false

                                                            static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

                                                            define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0

                                                            define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

                                                            Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

                                                            void custom_environment_service_init(void) at_ble_uuid_t environment_service_uuid uint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUID uint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128 memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperature environment_service_characs[0]user_desc_len = 10 environment_service_characs[0]user_desc_max_len = 10 environment_service_characs[0]uuidtype = AT_BLE_UUID_128 memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16) environment_service_characs[0]properties = AT_BLE_CHAR_READ | AT_BLE_CHAR_NOTIFY environment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature value environment_service_characs[0]value_permissions = (AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuid ampenvironment_service_handlerNULL0 environment_service_characs1)=AT_BLE_SUCCESS) printf(n Assignment 41 Failed to Initialize custom environment service) else printf(n Assignment 41 Initialize custom environment service)

                                                            Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param) at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )param if (event_param-gtstatus == AT_BLE_SUCCESS) printf(n Assignment 41Notification Successfully sent over the air)

                                                            ATBTLC1000Appendix B Software Solution - Custom Service

                                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 49

                                                            else printf(n Assignment 41Sending Notification over the air failed) return AT_BLE_SUCCESS

                                                            static at_ble_status_t custom_char_changed_app_event(void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle -gt char_new_value[0])) timer_flag = false hw_timer_start(10) printf(n Assignment 41Characteristic changed event) return AT_BLE_SUCCESS

                                                            static const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handler characteristic_changed = custom_char_changed_app_event

                                                            Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                                            void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                                                            Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                                                            Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                                                            static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                                                            Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void)

                                                            ATBTLC1000Appendix B Software Solution - Custom Service

                                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 50

                                                            Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                                            timer callback function static void timer_callback_fn(void) Add timer callback functionality here timer_flag = true

                                                            void button_cb(void) Add button callback functionality here

                                                            static uint8_t Temperature_value = 25

                                                            Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++ if(Temperature_value gt 75) Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set( environment_service_characs[0]char_val_handle (uint8_t )ampTemperature_value sizeof(Temperature_value)) ble_status = at_ble_notification_send(0 environment_service_characs[0]char_val_handle) if(ble_status = AT_BLE_SUCCESS) printf(fail to send temperature update notification )

                                                            int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                                                            Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                                                            DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register Gap ATBTLC1000 Callbacks register_btlc1000_callbacks()

                                                            Custom service init custom_environment_service_init()

                                                            ATBTLC1000Appendix B Software Solution - Custom Service

                                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 51

                                                            Register Gatt server callback register_gatt_server_callbacks()

                                                            Start Advertising process start_advertisement() while(true) ble_event_task() if(connected_flag == true ampamp timer_flag == true) timer_flag = false send_temperature_notification()

                                                            ATBTLC1000Appendix B Software Solution - Custom Service

                                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 52

                                                            8 Document Revision HistoryRev B - 42018

                                                            Section Changes

                                                            Document Revised contents to match various Bluetooth Low Energy standard versions

                                                            Rev A - 122017

                                                            Section Changes

                                                            Document Initial release

                                                            ATBTLC1000Document Revision History

                                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 53

                                                            The Microchip Web Site

                                                            Microchip provides online support via our web site at httpwwwmicrochipcom This web site is used asa means to make files and information easily available to customers Accessible by using your favoriteInternet browser the web site contains the following information

                                                            bull Product Support ndash Data sheets and errata application notes and sample programs designresources userrsquos guides and hardware support documents latest software releases and archivedsoftware

                                                            bull General Technical Support ndash Frequently Asked Questions (FAQ) technical support requestsonline discussion groups Microchip consultant program member listing

                                                            bull Business of Microchip ndash Product selector and ordering guides latest Microchip press releaseslisting of seminars and events listings of Microchip sales offices distributors and factoryrepresentatives

                                                            Customer Change Notification Service

                                                            Microchiprsquos customer notification service helps keep customers current on Microchip productsSubscribers will receive e-mail notification whenever there are changes updates revisions or erratarelated to a specified product family or development tool of interest

                                                            To register access the Microchip web site at httpwwwmicrochipcom Under ldquoSupportrdquo click onldquoCustomer Change Notificationrdquo and follow the registration instructions

                                                            Customer Support

                                                            Users of Microchip products can receive assistance through several channels

                                                            bull Distributor or Representativebull Local Sales Officebull Field Application Engineer (FAE)bull Technical Support

                                                            Customers should contact their distributor representative or Field Application Engineer (FAE) for supportLocal sales offices are also available to help customers A listing of sales offices and locations is includedin the back of this document

                                                            Technical support is available through the web site at httpwwwmicrochipcomsupport

                                                            Microchip Devices Code Protection Feature

                                                            Note the following details of the code protection feature on Microchip devices

                                                            bull Microchip products meet the specification contained in their particular Microchip Data Sheetbull Microchip believes that its family of products is one of the most secure families of its kind on the

                                                            market today when used in the intended manner and under normal conditionsbull There are dishonest and possibly illegal methods used to breach the code protection feature All of

                                                            these methods to our knowledge require using the Microchip products in a manner outside theoperating specifications contained in Microchiprsquos Data Sheets Most likely the person doing so isengaged in theft of intellectual property

                                                            bull Microchip is willing to work with the customer who is concerned about the integrity of their code

                                                            ATBTLC1000

                                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 54

                                                            bull Neither Microchip nor any other semiconductor manufacturer can guarantee the security of theircode Code protection does not mean that we are guaranteeing the product as ldquounbreakablerdquo

                                                            Code protection is constantly evolving We at Microchip are committed to continuously improving thecode protection features of our products Attempts to break Microchiprsquos code protection feature may be aviolation of the Digital Millennium Copyright Act If such acts allow unauthorized access to your softwareor other copyrighted work you may have a right to sue for relief under that Act

                                                            Legal Notice

                                                            Information contained in this publication regarding device applications and the like is provided only foryour convenience and may be superseded by updates It is your responsibility to ensure that yourapplication meets with your specifications MICROCHIP MAKES NO REPRESENTATIONS ORWARRANTIES OF ANY KIND WHETHER EXPRESS OR IMPLIED WRITTEN OR ORAL STATUTORYOR OTHERWISE RELATED TO THE INFORMATION INCLUDING BUT NOT LIMITED TO ITSCONDITION QUALITY PERFORMANCE MERCHANTABILITY OR FITNESS FOR PURPOSEMicrochip disclaims all liability arising from this information and its use Use of Microchip devices in lifesupport andor safety applications is entirely at the buyerrsquos risk and the buyer agrees to defendindemnify and hold harmless Microchip from any and all damages claims suits or expenses resultingfrom such use No licenses are conveyed implicitly or otherwise under any Microchip intellectualproperty rights unless otherwise stated

                                                            Trademarks

                                                            The Microchip name and logo the Microchip logo AnyRate AVR AVR logo AVR Freaks BeaconThingsBitCloud CryptoMemory CryptoRF dsPIC FlashFlex flexPWR Heldo JukeBlox KeeLoq KeeLoq logoKleer LANCheck LINK MD maXStylus maXTouch MediaLB megaAVR MOST MOST logo MPLABOptoLyzer PIC picoPower PICSTART PIC32 logo Prochip Designer QTouch RightTouch SAM-BASpyNIC SST SST Logo SuperFlash tinyAVR UNIO and XMEGA are registered trademarks ofMicrochip Technology Incorporated in the USA and other countries

                                                            ClockWorks The Embedded Control Solutions Company EtherSynch Hyper Speed Control HyperLightLoad IntelliMOS mTouch Precision Edge and Quiet-Wire are registered trademarks of MicrochipTechnology Incorporated in the USA

                                                            Adjacent Key Suppression AKS Analog-for-the-Digital Age Any Capacitor AnyIn AnyOut BodyComchipKIT chipKIT logo CodeGuard CryptoAuthentication CryptoCompanion CryptoControllerdsPICDEM dsPICDEMnet Dynamic Average Matching DAM ECAN EtherGREEN In-Circuit SerialProgramming ICSP Inter-Chip Connectivity JitterBlocker KleerNet KleerNet logo Mindi MiWimotorBench MPASM MPF MPLAB Certified logo MPLIB MPLINK MultiTRAK NetDetach OmniscientCode Generation PICDEM PICDEMnet PICkit PICtail PureSilicon QMatrix RightTouch logo REALICE Ripple Blocker SAM-ICE Serial Quad IO SMART-IS SQI SuperSwitcher SuperSwitcher II TotalEndurance TSHARC USBCheck VariSense ViewSpan WiperLock Wireless DNA and ZENA aretrademarks of Microchip Technology Incorporated in the USA and other countries

                                                            SQTP is a service mark of Microchip Technology Incorporated in the USA

                                                            Silicon Storage Technology is a registered trademark of Microchip Technology Inc in other countries

                                                            GestIC is a registered trademark of Microchip Technology Germany II GmbH amp Co KG a subsidiary ofMicrochip Technology Inc in other countries

                                                            All other trademarks mentioned herein are property of their respective companies

                                                            ATBTLC1000

                                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 55

                                                            copy 2018 Microchip Technology Incorporated Printed in the USA All Rights Reserved

                                                            ISBN 978-1-5224-2921-0

                                                            Quality Management System Certified by DNV

                                                            ISOTS 16949Microchip received ISOTS-169492009 certification for its worldwide headquarters design and waferfabrication facilities in Chandler and Tempe Arizona Gresham Oregon and design centers in Californiaand India The Companyrsquos quality system processes and procedures are for its PICreg MCUs and dsPICreg

                                                            DSCs KEELOQreg code hopping devices Serial EEPROMs microperipherals nonvolatile memory andanalog products In addition Microchiprsquos quality system for the design and manufacture of developmentsystems is ISO 90012000 certified

                                                            ATBTLC1000

                                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 56

                                                            AMERICAS ASIAPACIFIC ASIAPACIFIC EUROPECorporate Office2355 West Chandler BlvdChandler AZ 85224-6199Tel 480-792-7200Fax 480-792-7277Technical SupporthttpwwwmicrochipcomsupportWeb AddresswwwmicrochipcomAtlantaDuluth GATel 678-957-9614Fax 678-957-1455Austin TXTel 512-257-3370BostonWestborough MATel 774-760-0087Fax 774-760-0088ChicagoItasca ILTel 630-285-0071Fax 630-285-0075DallasAddison TXTel 972-818-7423Fax 972-818-2924DetroitNovi MITel 248-848-4000Houston TXTel 281-894-5983IndianapolisNoblesville INTel 317-773-8323Fax 317-773-5453Tel 317-536-2380Los AngelesMission Viejo CATel 949-462-9523Fax 949-462-9608Tel 951-273-7800Raleigh NCTel 919-844-7510New York NYTel 631-435-6000San Jose CATel 408-735-9110Tel 408-436-4270Canada - TorontoTel 905-695-1980Fax 905-695-2078

                                                            Australia - SydneyTel 61-2-9868-6733China - BeijingTel 86-10-8569-7000China - ChengduTel 86-28-8665-5511China - ChongqingTel 86-23-8980-9588China - DongguanTel 86-769-8702-9880China - GuangzhouTel 86-20-8755-8029China - HangzhouTel 86-571-8792-8115China - Hong Kong SARTel 852-2943-5100China - NanjingTel 86-25-8473-2460China - QingdaoTel 86-532-8502-7355China - ShanghaiTel 86-21-3326-8000China - ShenyangTel 86-24-2334-2829China - ShenzhenTel 86-755-8864-2200China - SuzhouTel 86-186-6233-1526China - WuhanTel 86-27-5980-5300China - XianTel 86-29-8833-7252China - XiamenTel 86-592-2388138China - ZhuhaiTel 86-756-3210040

                                                            India - BangaloreTel 91-80-3090-4444India - New DelhiTel 91-11-4160-8631India - PuneTel 91-20-4121-0141Japan - OsakaTel 81-6-6152-7160Japan - TokyoTel 81-3-6880- 3770Korea - DaeguTel 82-53-744-4301Korea - SeoulTel 82-2-554-7200Malaysia - Kuala LumpurTel 60-3-7651-7906Malaysia - PenangTel 60-4-227-8870Philippines - ManilaTel 63-2-634-9065SingaporeTel 65-6334-8870Taiwan - Hsin ChuTel 886-3-577-8366Taiwan - KaohsiungTel 886-7-213-7830Taiwan - TaipeiTel 886-2-2508-8600Thailand - BangkokTel 66-2-694-1351Vietnam - Ho Chi MinhTel 84-28-5448-2100

                                                            Austria - WelsTel 43-7242-2244-39Fax 43-7242-2244-393Denmark - CopenhagenTel 45-4450-2828Fax 45-4485-2829Finland - EspooTel 358-9-4520-820France - ParisTel 33-1-69-53-63-20Fax 33-1-69-30-90-79Germany - GarchingTel 49-8931-9700Germany - HaanTel 49-2129-3766400Germany - HeilbronnTel 49-7131-67-3636Germany - KarlsruheTel 49-721-625370Germany - MunichTel 49-89-627-144-0Fax 49-89-627-144-44Germany - RosenheimTel 49-8031-354-560Israel - RarsquoananaTel 972-9-744-7705Italy - MilanTel 39-0331-742611Fax 39-0331-466781Italy - PadovaTel 39-049-7625286Netherlands - DrunenTel 31-416-690399Fax 31-416-690340Norway - TrondheimTel 47-7289-7561Poland - WarsawTel 48-22-3325737Romania - BucharestTel 40-21-407-87-50Spain - MadridTel 34-91-708-08-90Fax 34-91-708-08-91Sweden - GothenbergTel 46-31-704-60-40Sweden - StockholmTel 46-8-5090-4654UK - WokinghamTel 44-118-921-5800Fax 44-118-921-5820

                                                            Worldwide Sales and Service

                                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 57

                                                            • Introduction
                                                            • Table of Contents
                                                            • 1 Getting Started
                                                              • 11 Software Prerequisites
                                                                • 111 Installation Steps of Atmel Studio 7
                                                                  • 12 Software Setup
                                                                    • 121 Installation of Microchip SmartConnect application on a Mobile device
                                                                      • 13 ATBTLC1000 Embedded Firmware
                                                                      • 14 ATBTLC1000 Host Software API
                                                                      • 15 Hardware Prerequisites
                                                                        • 151 SMARTtrade SAM L21 Xplained Pro
                                                                        • 152 ATBTLC1000ZR Xplained Pro Extension board
                                                                          • 16 Hardware Setup
                                                                            • 2 Creating the Project and Initializing
                                                                              • 21 Creating Project from ASF
                                                                              • 22 Configuring ASF for ATBTLC1000-ZR
                                                                              • 23 Compiling and Testing the Project
                                                                                • 3 Establishing Connection with Central Device
                                                                                  • 31 Configuring and Starting the Advertisement Process
                                                                                    • 311 Flags (AD Type 0x00)
                                                                                    • 312 Available Service UUID (AD Types 0x02 to 0x07)
                                                                                    • 313 Device Name (AD Types 0x08 to 0x09)
                                                                                      • 3131 Setting the Advertisement Payload (ble_advertisement_data_set)
                                                                                      • 3132 Starting the Advertisement Process (at_ble_adv_start)
                                                                                        • 314 Advertisement Process
                                                                                          • 3141 Starting the Advertisement Process
                                                                                              • 32 Managing GAP events
                                                                                                • 321 Handling of Connected and Disconnected GAP Events
                                                                                                    • 4 SettingHandling of Pre-Defined Service
                                                                                                      • 41 Adding Device Info Service Component from ASF Wizard to Project
                                                                                                      • 42 Configuring and Loading Device Information Service
                                                                                                        • 421 Procedure to Configure and Load Device Info Service
                                                                                                            • 5 Setting up and Handling Custom Service
                                                                                                              • 51 Configuring and Loading the Custom Environment Service
                                                                                                                • 511 Procedure to Configure and Load Custom Environment Service
                                                                                                                  • 52 Updating the Temperature Characteristic
                                                                                                                    • 521 Setting a Characteristic Value ( at_ble_characteristic_value_set)
                                                                                                                    • 522 Sending a Notification (at_ble_notification_send)
                                                                                                                    • 523 Sending Temperature Information Once in Every 10 Seconds to Central
                                                                                                                        • 6 Appendix A Software Solution - Pre-Defined Svc
                                                                                                                        • 7 Appendix B Software Solution - Custom Service
                                                                                                                        • 8 Document Revision History
                                                                                                                        • The Microchip Web Site
                                                                                                                        • Customer Change Notification Service
                                                                                                                        • Customer Support
                                                                                                                        • Microchip Devices Code Protection Feature
                                                                                                                        • Legal Notice
                                                                                                                        • Trademarks
                                                                                                                        • Quality Management System Certified by DNV
                                                                                                                        • Worldwide Sales and Service

                                                              In this assignment the following steps are added to the Host MCU application to set up and handle adevice information service within the ATBTLC1000 module The following steps are added to the startupproject

                                                              bull Adding device info service component from ASFbull Configuring and loading the service

                                                              Figure 4-2 Device Information Service

                                                              41 Adding Device Info Service Component from ASF Wizard to ProjectTo use the ldquoofficially adopted GATT-based profilesrdquo from SIG ASF provides Bluetooth Low Energy servicecomponents including init functions that pre-define services in Host memory

                                                              Note  Before starting this assignment be sure to follow the steps mentioned in 2 Creating the Projectand Initializing and 3 Establishing Connection with Central Device

                                                              1 Click ASF gt ASF Wizard2 Search for ldquoBLE-Device Information Servicesrdquo and then click Add

                                                              ATBTLC1000SettingHandling of Pre-Defined Service

                                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 31

                                                              Figure 4-3 Available Modules

                                                              3 Now ldquoBLE-Device Information Servicesrdquo (component) appears in ldquoSelected ModulesrdquoFigure 4-4 Selected Modules

                                                              4 Click Apply to add the component to the projectFigure 4-5 Adding the Modules to Project

                                                              5 The ldquoDevice Information Servicerdquo component is added to the project and is confirmed bydevice_information folder added in Solution Explorer

                                                              ATBTLC1000SettingHandling of Pre-Defined Service

                                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 32

                                                              Figure 4-6 Device Information Service Added to Project

                                                              42 Configuring and Loading Device Information ServiceThe ATBTLC1000 Host driver provides a set of GATT functions that allows storing and updating theservices in ATBTLC1000 memories

                                                              Prototype at_ble_status_t at_ble_primary_service_define(at_ble_uuid_t uuidat_ble_handle_t service_handleat_ble_included_service_t included_service_listuint16_t included_service_countat_ble_characteristic_t charactristic_listuint16_t charactristic_count)

                                                              Description Defines a new primary service along with its included services and characteristics inATBTLC1000

                                                              Parameters

                                                              bull Uuid [In] ndash primary service UUIDbull service_handle [Out] ndash Service handle is returned herebull included_service_list [In] ndash an array of included service referencesbull included_service_count [In] ndash number of elements in included_service_listbull charactristic_list [InOut] ndash an array of characteristics included in the service this array

                                                              is updated with respective characteristics handlesbull charactristic_count[In] ndash number of elements in charactristic_list

                                                              Return Execution Status

                                                              This function requires an argument as GATT description structure of the service that is implemented Thepreviously added Device Info service component provides Bluetooth Low Energy service middlewareincluding the init functions that predefine the services See below ldquodis_init_servicerdquo from device infoBLE service (device_infohc)

                                                              Prototype ndash void dis_init_service(dis_gatt_service_handler_t device_info_serv)Description ndash Initialize the device information service handler in the host MCU memory

                                                              Parameters ndash

                                                              ATBTLC1000SettingHandling of Pre-Defined Service

                                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 33

                                                              bull device_info_serv [Inout] pointer to device info GATT description handler to beupdated

                                                              Return None

                                                              Here is a picture of GATT device info service descriptor definition in Host memory

                                                              device_info_serv-gtserv_handle = 0device_info_serv-gtserv_uuidtype = AT_BLE_UUID_16device_info_serv-gtserv_uuiduuid[0] = (uint8_t) DIS_SERVICE_UUIDdevice_info_serv-gtserv_uuiduuid[1] = (uint8_t) (DIS_SERVICE_UUID gtgt 8)Characteristic Info for Manufacturer Name Stringdevice_info_serv-gtserv_chars[0]char_val_handle = 0 handle stored here device_info_serv-gtserv_chars[0]uuidtype = AT_BLE_UUID_16device_info_serv-gtserv_chars[0]uuiduuid[0] = (uint8_t) IS_CHAR_MANUFACTURER_NAME_UUID UUID Manufacturer Name String device_info_serv-gtserv_chars[0]uuiduuid[1] = (uint8_t) (DIS_CHAR_MANUFACTURER_NAME_UUID gtgt 8) UUID Manufacturer Name String device_info_serv-gtserv_chars[0]properties = AT_BLE_CHAR_READ Properties memcpy(char_valuemanufacturer_nameDEFAULT_MANUFACTURER_NAMEDIS_CHAR_MANUFACTURER_NAME_INIT_LEN)device_info_serv-gtserv_chars[0]init_value = char_valuemanufacturer_namedevice_info_serv-gtserv_chars[0]value_init_len = DIS_CHAR_MANUFACTURER_NAME_INIT_LENdevice_info_serv-gtserv_chars[0]value_max_len = DIS_CHAR_MANUFACTURER_NAME_MAX_LENif BLE_PAIR_ENABLEdevice_info_serv-gtserv_chars[0]value_permissions = AT_BLE_ATTR_READABLE_REQ_AUTHN_NO_AUTHR permissions elsedevice_info_serv-gtserv_chars[0]value_permissions = AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR permissions endifdevice_info_serv-gtserv_chars[0]user_desc = NULL user defined name device_info_serv-gtserv_chars[0]user_desc_len = 0device_info_serv-gtserv_chars[0]user_desc_max_len = 0device_info_serv-gtserv_chars[0]user_desc_permissions = AT_BLE_ATTR_NO_PERMISSIONS user description permissionsdevice_info_serv-gtserv_chars[0]client_config_permissions = AT_BLE_ATTR_NO_PERMISSIONS client config permissionsdevice_info_serm hdsv-gtserv_chars[0]server_config_permissions = AT_BLE_ATTR_NO_PERMISSIONS server config permissionsdevice_info_serv-gtserv_chars[0]user_desc_handle = 0 user desc handlesdevice_info_serv-gtserv_chars[0]client_config_handle = 0 client config handlesdevice_info_serv-gtserv_chars[0]server_config_handle = 0 server config handlesdevice_info_serv-gtserv_chars[0]presentation_format = NULL presentation format

                                                              Note  In case of custom service the above definition initialization must be taken care of by thedeveloper

                                                              421 Procedure to Configure and Load Device Info Service1 Include device info service header file (device_infoh) at the beginning of

                                                              startup_templatec fileinclude ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehinclude device_infoh

                                                              2 Define a device info service handler as global in startup_templatec file Serviceshandlers dis_gatt_service_handler_t dis_service_handler

                                                              ATBTLC1000SettingHandling of Pre-Defined Service

                                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 34

                                                              3 Add dis_init_service and at_ble_primary_service_define functions as called abovethe advertisement start in main routine Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service)dis_init_service (ampdis_service_handler) Define the primary service in the GATT server database if ((dis_primary_service_define (ampdis_service_handler)) = AT_BLE_SUCCESS)printf(Device Information Service definition failed) Start Advertising process start_advertisement()

                                                              4 Click to save the project ltCtrl+Sgt and compile the project by pressing button ltF7gt5 Verify that no build error appears in Atmel Studio output window

                                                              Figure 4-7 Atmel Studio Output Window

                                                              6 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt7 Open ldquoMicrochip SmartConnectrdquo application on Android or iOS device8 Press ltStart Scangt button and connect to peripheral

                                                              Note  The device name is a characteristic and contains the name of the device This device namecan be read by the central device to know the name of the device in order to differentiate thedevices This is being set using at_ble_device_name_set()API The device name is set bydefault when ble_device_init is called and the value is pre-defined using BLE_DEVICE_NAMEThe device name can also be sent as part of advertisement payload to be same as the oneconfigured in at_ble_adv_data_set() API It is the responsibility of users to keep the devicename set in advertisement payload the same as that configured inat_ble_device_name_set()

                                                              9 The Service must now be visible after pairing with peripheral under Microchip SmartConnectapplication

                                                              ATBTLC1000SettingHandling of Pre-Defined Service

                                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 35

                                                              Figure 4-8 Service List in Microchip SmartConnect Application

                                                              Note  If the pairing of ATBTLC1000 with Microchip Smart connect is not successful then removethe pairing information from mobile by selecting ldquoForget Devicerdquo from the mobile settings Thereason for this is that the mobile app stores the previous pairing information but the ATBTLC1000device lost the previous pairing information due to RESET since it was stored on temporary storage(RAM)

                                                              10 The serial terminal must display the following log output windowFigure 4-9 Console Log Window

                                                              ATBTLC1000SettingHandling of Pre-Defined Service

                                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 36

                                                              5 Setting up and Handling Custom ServiceThe previous assignment describes the handling of Bluetooth Low Energy SIG defined device infoservice which is the predefined service available in ASF component This assignment describes thecustom service So the service initialization needs to be implemented In the context of customizedenvironment service the following service description is pushed in ATBTLC1000 memory

                                                              Figure 5-1 Custom Service

                                                              Custom Environment Service Description

                                                              bull UUID type ndash Custom UUID (128-bit)bull UUID ndash 1bc5d5a5-0200-a687-e511-3639c1ba5af0

                                                              Characteristic 0 (Temperature)

                                                              bull User Description ndash Temperaturebull UUID type ndash Custom UUID (128-bit)bull UUID ndash 1bc5d5a5-0200-a687-e511-3639d8ba5af0bull Properties ndash Read Notifybull Value permission ndash No authorization requiredbull Client config permission ndash No permissionbull Server config permission ndash No permission

                                                              Note  In this definition UUIDs are generated randomly Custom servicescharacteristics are free to useany 128-bit UUID less than the base UUID There is no reserved space for vendors to use 16-bit or 32-bitUUIDs

                                                              With this definition any temperature change is notified to the central The notify mechanism allows thecentral to know when the data changes When notify property of the Client Characteristic ConfigurationDescriptor is enabled by the central and the device writes the new value then this updated value isautomatically sent to the central through a notification The central is not required to send readcharacteristic commands explicitly to the peripheral (GATT server)

                                                              To setup and handle the custom environment service in ATBTLC1000 module the following steps areadded to the Host MCU application

                                                              bull Configure and load the custom servicebull Update Temperature characteristic and notify to the central devicebull Receive and handle notification from the Host device

                                                              ATBTLC1000Setting up and Handling Custom Service

                                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 37

                                                              Figure 5-2 Custom Service Flowchart

                                                              51 Configuring and Loading the Custom Environment ServiceThe ATBTLC1000 Host driver provides the following set of GATT functions that allows it to push andupdate the service descriptions in the ATBTLC1000 SRAM memory

                                                              Note  Before starting this assignment be sure to follow the steps mentioned in 2 Creating the Projectand Initializing and 3 Establishing Connection with Central Device

                                                              Prototype ndashat_ble_status_t at_ble_primary_service_define(at_ble_uuid_t uuidat_ble_handle_t service_handleat_ble_included_service_t included_service_listuint16_t included_service_countat_ble_characteristic_t charactristic_listuint16_t charactristic_count)

                                                              Description ndash Defines a new primary service along with its included services and characteristics inATBTLC1000 module

                                                              Parameters

                                                              bull Uuid [In] ndash primary service UUIDbull service_handle [Out] ndash service handle is returned herebull included_service_list [In] ndash array of included service referencesbull included_service_count [In] ndash number of elements in included_service_listbull charactristic_list [InOut] ndash an array of characteristics included in the service this array

                                                              is update with respective characteristics handlesbull charactristic_count[In] ndash number of elements in charactristic_list

                                                              ATBTLC1000Setting up and Handling Custom Service

                                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 38

                                                              Return ndash Execution Status

                                                              bull Characteristics ndashndash Characteristics definition is done through specific array of following

                                                              ldquoat_ble_characteristic_trdquo structure instancestypedef structat_ble_handle_t char_val_handle Handler (returned during service initialisation)at_ble_uuid_t uuid Characteristic UUID (type and value)at_ble_char_properties_t propertiesCharac Properties (read write notify)uint8_t init_value initial valueuint16_t value_init_len initial value lengthuint16_t value_max_len value max lengthat_ble_attr_permissions_t value_permissions access authorization and authenticationuint8_t user_desc User descriptionuint16_t user_desc_len User description lengthuint16_t user_desc_max_len User description max lengthat_ble_char_presentation_t presentation_format Presentation formatat_ble_attr_permissions_t user_desc_permissions User description permissionat_ble_attr_permissions_t client_config_permissions client permissionat_ble_attr_permissions_t server_config_permissions server permissionat_ble_handle_t user_desc_handle description handlerat_ble_handle_t client_config_handle Client config handlerat_ble_handle_t server_config_handle Server config handler at_ble_characteristic_t

                                                              511 Procedure to Configure and Load Custom Environment Service1 Define the following service UUID and characteristic UUID in startup_templatec file

                                                              define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

                                                              2 Define the following environment service handler and characteristics variable as global instartup_templatec file Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

                                                              3 Add the following service initialization function custom_environment_service_init instartup_templatecvoid custom_environment_service_init(void) at_ble_uuid_t environment_service_uuiduint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUIDuint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperatureenvironment_service_characs[0]user_desc_len = 10environment_service_characs[0]user_desc_max_len = 10environment_service_characs[0]uuidtype = AT_BLE_UUID_128memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16)environment_service_characs[0]properties = AT_BLE_CHAR_READ |AT_BLE_CHAR_NOTIFYenvironment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature valueenvironment_service_characs[0]value_permissions =(AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuidampenvironment_service_handlerNULL0environment_service_characs1)=AT_BLE_SUCCESS)printf(n Assignment 41 Failed to Initialize custom environment service)

                                                              ATBTLC1000Setting up and Handling Custom Service

                                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 39

                                                              elseprintf(n Assignment 41 Initialize custom environment service)

                                                              4 Declare and implement the following GATT event callback functioncustom_char_changed_app_event in startup_templatec file If a client (central) enablesnotifications for a server the server (peripheral) receives an AT_BLE_CHARACTERISTIC_CHANGEDevent and this event callback is called Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

                                                              5 Declare and implement the following custom_notification_confirmation_handlerfunction in startup_templatec file Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param)at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )paramif (event_param-gtstatus == AT_BLE_SUCCESS)printf(n Assignment 41Notification Successfully sent over the air) else printf(n Assignment 41Sending Notification over the air failed)return AT_BLE_SUCCESS

                                                              6 Declare the following GATT server callback structure in startup_templatec file Thisassignment uses two GATT callbacksstatic const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handlercharacteristic_changed = custom_char_changed_app_event

                                                              7 Add the following register_gatt_server_callbacks function in startup_templatec toregister GATT server callback for notification confirmation event Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks)ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACKBLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle)if (ble_status = true)printf(nError when Registering ATBTLC1000 callbacks)

                                                              8 Add custom_environment_service_init and register_gatt_server_callbacksfunction calls prior to start advertisement in the application main routine to initialize custom serviceand to register the GATT server callbacksint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()

                                                              ATBTLC1000Setting up and Handling Custom Service

                                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 40

                                                              endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks() Custom service init custom_environment_service_init ( ) Register Gatt server callbacks register_gatt_server_callbacks ( ) Start Advertising process start_advertisement()while(true)ble_event_task()

                                                              9 Click to save the project ltCtrl+Sgt

                                                              10 Compile the project by pressing button ltF7gt11 Verify that no build error appears in the Atmel Studio output window

                                                              Figure 5-3 Atmel Studio Output Window

                                                              12 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt13 Open the ldquoMicrochip SmartConnectrdquo application on Android or iOS device14 Connect and pair to the peripheral (pass key 123456)15 Custom service must now be visible after pairing with peripheral under Microchip SmartConnect

                                                              application

                                                              ATBTLC1000Setting up and Handling Custom Service

                                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 41

                                                              Figure 5-4 Service List in Microchip SmartConnect Application

                                                              Note  Custom service is displayed as unknown service in the above figure as this service is not aSIG-defined service

                                                              Figure 5-5 General Information

                                                              16 Serial terminal client must display the following Log output

                                                              ATBTLC1000Setting up and Handling Custom Service

                                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 42

                                                              Figure 5-6 Log Output Window

                                                              52 Updating the Temperature CharacteristicIn the previous assignment the custom Temperature characteristic is defined with a notify attribute Thistype of attribute requires notification to be sent to central when a new characteristic value is availableThe update of any ldquonotifyrdquo characteristic value is based on following interaction between the Host MCUand the ATBTLC1000Figure 5-7 Characteristic Notification

                                                              521 Setting a Characteristic Value ( at_ble_characteristic_value_set)Prototype ndashat_ble_status_t at_ble_characteristic_value_setat_ble_handle_t handleuint8_t valueuint16_t len)

                                                              Description ndash Sets a characteristic value in ATBTLC1000 memory

                                                              Parameters ndash

                                                              ATBTLC1000Setting up and Handling Custom Service

                                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 43

                                                              bull handle [inout] ndash Pointer to Characteristic handle to be changedbull value [in] ndash New valuebull len [in] ndash Value length in bytes

                                                              Return ndash Execution Status

                                                              522 Sending a Notification (at_ble_notification_send)Prototype ndashat_ble_status_t at_ble_notification_send(at_ble_handle_t conn_handleat_ble_handle_t attr_handle)

                                                              Description ndash Sends a Notification

                                                              Parameters ndash

                                                              bull conn_handle[in] ndash handle of the connection to be notifiedbull attr_handle [in] ndash handle of the attribute originating the notification

                                                              Return ndash Execution Status

                                                              523 Sending Temperature Information Once in Every 10 Seconds to Central1 Modify the following ldquotimer_callback_fnrdquo callback function from the startup_templatec

                                                              filestatic void timer_callback_fn(void)timer_flag = true

                                                              2 hw_timer_init()in main routine of startup_templatec initializes the hardware timer3 If a client (Central) enables the notifications for a server the server (Peripheral) receives an

                                                              AT_BLE_CHARACTERISTIC_CHANGED event callback then start the periodic 10 second timer forsending the notification Add the following code in previously definedcustom_char_changed_app_event function Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))timer_flag = falsehw_timer_start(10)printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

                                                              4 Declare the following Temperature_value global variable in startup_templatec staticuint8_t Temperature_value = 25 as static

                                                              5 Add the following send_temperature_notification function in startup_templatec tosend temperature every 10 seconds Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++

                                                              ATBTLC1000Setting up and Handling Custom Service

                                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 44

                                                              if(Temperature_value gt 75)Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set(environment_service_characs[0]char_val_handle(uint8_t )ampTemperature_valuesizeof(Temperature_value))ble_status = at_ble_notification_send(0environment_service_characs[0]char_val_handle)if(ble_status = AT_BLE_SUCCESS)printf(fail to send temperature update notification )

                                                              6 Add the following code in main routine to send temperature data every 10 secondswhile (1) ble_event_task()if(connected_flag == true ampamp timer_flag == truetimer_flag = falsesend_temperature_notification()

                                                              7 Click to save the project ltCtrl+Sgt

                                                              8 Compile the project by pressing the button ltF7gt9 Verify that no build error appears in Atmel Studio output window

                                                              Figure 5-8 Atmel Studio Output Window

                                                              10 Click to program the project binary on the L21 Xplained XSTK11 Open ldquoMicrochip SmartConnectrdquo Application on Android or iOS device12 Connect and pair to the peripheral (pass key 123456)13 Click NOTIFY to start the notification14 Temperature information in HEX values must be displayed in Microchip SmartConnect application

                                                              ATBTLC1000Setting up and Handling Custom Service

                                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 45

                                                              Figure 5-9 Notification Window

                                                              15 Serial terminal must display the following log outputFigure 5-10 Log Output Window

                                                              ATBTLC1000Setting up and Handling Custom Service

                                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 46

                                                              6 Appendix A Software Solution - Pre-Defined SvcThe following is the code implementation for handling of pre-defined service done in 4 SettingHandlingof Pre-Defined Service

                                                              - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehinclude device_infoh

                                                              volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false Services handlers dis_gatt_service_handler_t dis_service_handler

                                                              static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

                                                              void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                                                              Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                                                              Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                                                              static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                                                              Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void) Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks)

                                                              ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

                                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 47

                                                              ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                                              timer callback function static void timer_callback_fn(void) Add timer callback functionality here

                                                              void button_cb(void) Add button callback functionality here

                                                              int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                                                              Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                                                              DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks()

                                                              Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service) dis_init_service(ampdis_service_handler) Define the primary service in the GATT server database if((dis_primary_service_define(ampdis_service_handler)) = AT_BLE_SUCCESS) printf(Device Information Service definition failed)

                                                              Start Advertising process start_advertisement() while(true) ble_event_task()

                                                              ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

                                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 48

                                                              7 Appendix B Software Solution - Custom ServiceThe following is the code implementation for handling of pre-defined service done in 5 Setting up andHandling Custom Service

                                                              - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templateh

                                                              volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false

                                                              static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

                                                              define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0

                                                              define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

                                                              Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

                                                              void custom_environment_service_init(void) at_ble_uuid_t environment_service_uuid uint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUID uint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128 memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperature environment_service_characs[0]user_desc_len = 10 environment_service_characs[0]user_desc_max_len = 10 environment_service_characs[0]uuidtype = AT_BLE_UUID_128 memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16) environment_service_characs[0]properties = AT_BLE_CHAR_READ | AT_BLE_CHAR_NOTIFY environment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature value environment_service_characs[0]value_permissions = (AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuid ampenvironment_service_handlerNULL0 environment_service_characs1)=AT_BLE_SUCCESS) printf(n Assignment 41 Failed to Initialize custom environment service) else printf(n Assignment 41 Initialize custom environment service)

                                                              Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param) at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )param if (event_param-gtstatus == AT_BLE_SUCCESS) printf(n Assignment 41Notification Successfully sent over the air)

                                                              ATBTLC1000Appendix B Software Solution - Custom Service

                                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 49

                                                              else printf(n Assignment 41Sending Notification over the air failed) return AT_BLE_SUCCESS

                                                              static at_ble_status_t custom_char_changed_app_event(void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle -gt char_new_value[0])) timer_flag = false hw_timer_start(10) printf(n Assignment 41Characteristic changed event) return AT_BLE_SUCCESS

                                                              static const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handler characteristic_changed = custom_char_changed_app_event

                                                              Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                                              void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                                                              Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                                                              Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                                                              static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                                                              Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void)

                                                              ATBTLC1000Appendix B Software Solution - Custom Service

                                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 50

                                                              Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                                              timer callback function static void timer_callback_fn(void) Add timer callback functionality here timer_flag = true

                                                              void button_cb(void) Add button callback functionality here

                                                              static uint8_t Temperature_value = 25

                                                              Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++ if(Temperature_value gt 75) Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set( environment_service_characs[0]char_val_handle (uint8_t )ampTemperature_value sizeof(Temperature_value)) ble_status = at_ble_notification_send(0 environment_service_characs[0]char_val_handle) if(ble_status = AT_BLE_SUCCESS) printf(fail to send temperature update notification )

                                                              int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                                                              Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                                                              DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register Gap ATBTLC1000 Callbacks register_btlc1000_callbacks()

                                                              Custom service init custom_environment_service_init()

                                                              ATBTLC1000Appendix B Software Solution - Custom Service

                                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 51

                                                              Register Gatt server callback register_gatt_server_callbacks()

                                                              Start Advertising process start_advertisement() while(true) ble_event_task() if(connected_flag == true ampamp timer_flag == true) timer_flag = false send_temperature_notification()

                                                              ATBTLC1000Appendix B Software Solution - Custom Service

                                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 52

                                                              8 Document Revision HistoryRev B - 42018

                                                              Section Changes

                                                              Document Revised contents to match various Bluetooth Low Energy standard versions

                                                              Rev A - 122017

                                                              Section Changes

                                                              Document Initial release

                                                              ATBTLC1000Document Revision History

                                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 53

                                                              The Microchip Web Site

                                                              Microchip provides online support via our web site at httpwwwmicrochipcom This web site is used asa means to make files and information easily available to customers Accessible by using your favoriteInternet browser the web site contains the following information

                                                              bull Product Support ndash Data sheets and errata application notes and sample programs designresources userrsquos guides and hardware support documents latest software releases and archivedsoftware

                                                              bull General Technical Support ndash Frequently Asked Questions (FAQ) technical support requestsonline discussion groups Microchip consultant program member listing

                                                              bull Business of Microchip ndash Product selector and ordering guides latest Microchip press releaseslisting of seminars and events listings of Microchip sales offices distributors and factoryrepresentatives

                                                              Customer Change Notification Service

                                                              Microchiprsquos customer notification service helps keep customers current on Microchip productsSubscribers will receive e-mail notification whenever there are changes updates revisions or erratarelated to a specified product family or development tool of interest

                                                              To register access the Microchip web site at httpwwwmicrochipcom Under ldquoSupportrdquo click onldquoCustomer Change Notificationrdquo and follow the registration instructions

                                                              Customer Support

                                                              Users of Microchip products can receive assistance through several channels

                                                              bull Distributor or Representativebull Local Sales Officebull Field Application Engineer (FAE)bull Technical Support

                                                              Customers should contact their distributor representative or Field Application Engineer (FAE) for supportLocal sales offices are also available to help customers A listing of sales offices and locations is includedin the back of this document

                                                              Technical support is available through the web site at httpwwwmicrochipcomsupport

                                                              Microchip Devices Code Protection Feature

                                                              Note the following details of the code protection feature on Microchip devices

                                                              bull Microchip products meet the specification contained in their particular Microchip Data Sheetbull Microchip believes that its family of products is one of the most secure families of its kind on the

                                                              market today when used in the intended manner and under normal conditionsbull There are dishonest and possibly illegal methods used to breach the code protection feature All of

                                                              these methods to our knowledge require using the Microchip products in a manner outside theoperating specifications contained in Microchiprsquos Data Sheets Most likely the person doing so isengaged in theft of intellectual property

                                                              bull Microchip is willing to work with the customer who is concerned about the integrity of their code

                                                              ATBTLC1000

                                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 54

                                                              bull Neither Microchip nor any other semiconductor manufacturer can guarantee the security of theircode Code protection does not mean that we are guaranteeing the product as ldquounbreakablerdquo

                                                              Code protection is constantly evolving We at Microchip are committed to continuously improving thecode protection features of our products Attempts to break Microchiprsquos code protection feature may be aviolation of the Digital Millennium Copyright Act If such acts allow unauthorized access to your softwareor other copyrighted work you may have a right to sue for relief under that Act

                                                              Legal Notice

                                                              Information contained in this publication regarding device applications and the like is provided only foryour convenience and may be superseded by updates It is your responsibility to ensure that yourapplication meets with your specifications MICROCHIP MAKES NO REPRESENTATIONS ORWARRANTIES OF ANY KIND WHETHER EXPRESS OR IMPLIED WRITTEN OR ORAL STATUTORYOR OTHERWISE RELATED TO THE INFORMATION INCLUDING BUT NOT LIMITED TO ITSCONDITION QUALITY PERFORMANCE MERCHANTABILITY OR FITNESS FOR PURPOSEMicrochip disclaims all liability arising from this information and its use Use of Microchip devices in lifesupport andor safety applications is entirely at the buyerrsquos risk and the buyer agrees to defendindemnify and hold harmless Microchip from any and all damages claims suits or expenses resultingfrom such use No licenses are conveyed implicitly or otherwise under any Microchip intellectualproperty rights unless otherwise stated

                                                              Trademarks

                                                              The Microchip name and logo the Microchip logo AnyRate AVR AVR logo AVR Freaks BeaconThingsBitCloud CryptoMemory CryptoRF dsPIC FlashFlex flexPWR Heldo JukeBlox KeeLoq KeeLoq logoKleer LANCheck LINK MD maXStylus maXTouch MediaLB megaAVR MOST MOST logo MPLABOptoLyzer PIC picoPower PICSTART PIC32 logo Prochip Designer QTouch RightTouch SAM-BASpyNIC SST SST Logo SuperFlash tinyAVR UNIO and XMEGA are registered trademarks ofMicrochip Technology Incorporated in the USA and other countries

                                                              ClockWorks The Embedded Control Solutions Company EtherSynch Hyper Speed Control HyperLightLoad IntelliMOS mTouch Precision Edge and Quiet-Wire are registered trademarks of MicrochipTechnology Incorporated in the USA

                                                              Adjacent Key Suppression AKS Analog-for-the-Digital Age Any Capacitor AnyIn AnyOut BodyComchipKIT chipKIT logo CodeGuard CryptoAuthentication CryptoCompanion CryptoControllerdsPICDEM dsPICDEMnet Dynamic Average Matching DAM ECAN EtherGREEN In-Circuit SerialProgramming ICSP Inter-Chip Connectivity JitterBlocker KleerNet KleerNet logo Mindi MiWimotorBench MPASM MPF MPLAB Certified logo MPLIB MPLINK MultiTRAK NetDetach OmniscientCode Generation PICDEM PICDEMnet PICkit PICtail PureSilicon QMatrix RightTouch logo REALICE Ripple Blocker SAM-ICE Serial Quad IO SMART-IS SQI SuperSwitcher SuperSwitcher II TotalEndurance TSHARC USBCheck VariSense ViewSpan WiperLock Wireless DNA and ZENA aretrademarks of Microchip Technology Incorporated in the USA and other countries

                                                              SQTP is a service mark of Microchip Technology Incorporated in the USA

                                                              Silicon Storage Technology is a registered trademark of Microchip Technology Inc in other countries

                                                              GestIC is a registered trademark of Microchip Technology Germany II GmbH amp Co KG a subsidiary ofMicrochip Technology Inc in other countries

                                                              All other trademarks mentioned herein are property of their respective companies

                                                              ATBTLC1000

                                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 55

                                                              copy 2018 Microchip Technology Incorporated Printed in the USA All Rights Reserved

                                                              ISBN 978-1-5224-2921-0

                                                              Quality Management System Certified by DNV

                                                              ISOTS 16949Microchip received ISOTS-169492009 certification for its worldwide headquarters design and waferfabrication facilities in Chandler and Tempe Arizona Gresham Oregon and design centers in Californiaand India The Companyrsquos quality system processes and procedures are for its PICreg MCUs and dsPICreg

                                                              DSCs KEELOQreg code hopping devices Serial EEPROMs microperipherals nonvolatile memory andanalog products In addition Microchiprsquos quality system for the design and manufacture of developmentsystems is ISO 90012000 certified

                                                              ATBTLC1000

                                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 56

                                                              AMERICAS ASIAPACIFIC ASIAPACIFIC EUROPECorporate Office2355 West Chandler BlvdChandler AZ 85224-6199Tel 480-792-7200Fax 480-792-7277Technical SupporthttpwwwmicrochipcomsupportWeb AddresswwwmicrochipcomAtlantaDuluth GATel 678-957-9614Fax 678-957-1455Austin TXTel 512-257-3370BostonWestborough MATel 774-760-0087Fax 774-760-0088ChicagoItasca ILTel 630-285-0071Fax 630-285-0075DallasAddison TXTel 972-818-7423Fax 972-818-2924DetroitNovi MITel 248-848-4000Houston TXTel 281-894-5983IndianapolisNoblesville INTel 317-773-8323Fax 317-773-5453Tel 317-536-2380Los AngelesMission Viejo CATel 949-462-9523Fax 949-462-9608Tel 951-273-7800Raleigh NCTel 919-844-7510New York NYTel 631-435-6000San Jose CATel 408-735-9110Tel 408-436-4270Canada - TorontoTel 905-695-1980Fax 905-695-2078

                                                              Australia - SydneyTel 61-2-9868-6733China - BeijingTel 86-10-8569-7000China - ChengduTel 86-28-8665-5511China - ChongqingTel 86-23-8980-9588China - DongguanTel 86-769-8702-9880China - GuangzhouTel 86-20-8755-8029China - HangzhouTel 86-571-8792-8115China - Hong Kong SARTel 852-2943-5100China - NanjingTel 86-25-8473-2460China - QingdaoTel 86-532-8502-7355China - ShanghaiTel 86-21-3326-8000China - ShenyangTel 86-24-2334-2829China - ShenzhenTel 86-755-8864-2200China - SuzhouTel 86-186-6233-1526China - WuhanTel 86-27-5980-5300China - XianTel 86-29-8833-7252China - XiamenTel 86-592-2388138China - ZhuhaiTel 86-756-3210040

                                                              India - BangaloreTel 91-80-3090-4444India - New DelhiTel 91-11-4160-8631India - PuneTel 91-20-4121-0141Japan - OsakaTel 81-6-6152-7160Japan - TokyoTel 81-3-6880- 3770Korea - DaeguTel 82-53-744-4301Korea - SeoulTel 82-2-554-7200Malaysia - Kuala LumpurTel 60-3-7651-7906Malaysia - PenangTel 60-4-227-8870Philippines - ManilaTel 63-2-634-9065SingaporeTel 65-6334-8870Taiwan - Hsin ChuTel 886-3-577-8366Taiwan - KaohsiungTel 886-7-213-7830Taiwan - TaipeiTel 886-2-2508-8600Thailand - BangkokTel 66-2-694-1351Vietnam - Ho Chi MinhTel 84-28-5448-2100

                                                              Austria - WelsTel 43-7242-2244-39Fax 43-7242-2244-393Denmark - CopenhagenTel 45-4450-2828Fax 45-4485-2829Finland - EspooTel 358-9-4520-820France - ParisTel 33-1-69-53-63-20Fax 33-1-69-30-90-79Germany - GarchingTel 49-8931-9700Germany - HaanTel 49-2129-3766400Germany - HeilbronnTel 49-7131-67-3636Germany - KarlsruheTel 49-721-625370Germany - MunichTel 49-89-627-144-0Fax 49-89-627-144-44Germany - RosenheimTel 49-8031-354-560Israel - RarsquoananaTel 972-9-744-7705Italy - MilanTel 39-0331-742611Fax 39-0331-466781Italy - PadovaTel 39-049-7625286Netherlands - DrunenTel 31-416-690399Fax 31-416-690340Norway - TrondheimTel 47-7289-7561Poland - WarsawTel 48-22-3325737Romania - BucharestTel 40-21-407-87-50Spain - MadridTel 34-91-708-08-90Fax 34-91-708-08-91Sweden - GothenbergTel 46-31-704-60-40Sweden - StockholmTel 46-8-5090-4654UK - WokinghamTel 44-118-921-5800Fax 44-118-921-5820

                                                              Worldwide Sales and Service

                                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 57

                                                              • Introduction
                                                              • Table of Contents
                                                              • 1 Getting Started
                                                                • 11 Software Prerequisites
                                                                  • 111 Installation Steps of Atmel Studio 7
                                                                    • 12 Software Setup
                                                                      • 121 Installation of Microchip SmartConnect application on a Mobile device
                                                                        • 13 ATBTLC1000 Embedded Firmware
                                                                        • 14 ATBTLC1000 Host Software API
                                                                        • 15 Hardware Prerequisites
                                                                          • 151 SMARTtrade SAM L21 Xplained Pro
                                                                          • 152 ATBTLC1000ZR Xplained Pro Extension board
                                                                            • 16 Hardware Setup
                                                                              • 2 Creating the Project and Initializing
                                                                                • 21 Creating Project from ASF
                                                                                • 22 Configuring ASF for ATBTLC1000-ZR
                                                                                • 23 Compiling and Testing the Project
                                                                                  • 3 Establishing Connection with Central Device
                                                                                    • 31 Configuring and Starting the Advertisement Process
                                                                                      • 311 Flags (AD Type 0x00)
                                                                                      • 312 Available Service UUID (AD Types 0x02 to 0x07)
                                                                                      • 313 Device Name (AD Types 0x08 to 0x09)
                                                                                        • 3131 Setting the Advertisement Payload (ble_advertisement_data_set)
                                                                                        • 3132 Starting the Advertisement Process (at_ble_adv_start)
                                                                                          • 314 Advertisement Process
                                                                                            • 3141 Starting the Advertisement Process
                                                                                                • 32 Managing GAP events
                                                                                                  • 321 Handling of Connected and Disconnected GAP Events
                                                                                                      • 4 SettingHandling of Pre-Defined Service
                                                                                                        • 41 Adding Device Info Service Component from ASF Wizard to Project
                                                                                                        • 42 Configuring and Loading Device Information Service
                                                                                                          • 421 Procedure to Configure and Load Device Info Service
                                                                                                              • 5 Setting up and Handling Custom Service
                                                                                                                • 51 Configuring and Loading the Custom Environment Service
                                                                                                                  • 511 Procedure to Configure and Load Custom Environment Service
                                                                                                                    • 52 Updating the Temperature Characteristic
                                                                                                                      • 521 Setting a Characteristic Value ( at_ble_characteristic_value_set)
                                                                                                                      • 522 Sending a Notification (at_ble_notification_send)
                                                                                                                      • 523 Sending Temperature Information Once in Every 10 Seconds to Central
                                                                                                                          • 6 Appendix A Software Solution - Pre-Defined Svc
                                                                                                                          • 7 Appendix B Software Solution - Custom Service
                                                                                                                          • 8 Document Revision History
                                                                                                                          • The Microchip Web Site
                                                                                                                          • Customer Change Notification Service
                                                                                                                          • Customer Support
                                                                                                                          • Microchip Devices Code Protection Feature
                                                                                                                          • Legal Notice
                                                                                                                          • Trademarks
                                                                                                                          • Quality Management System Certified by DNV
                                                                                                                          • Worldwide Sales and Service

                                                                Figure 4-3 Available Modules

                                                                3 Now ldquoBLE-Device Information Servicesrdquo (component) appears in ldquoSelected ModulesrdquoFigure 4-4 Selected Modules

                                                                4 Click Apply to add the component to the projectFigure 4-5 Adding the Modules to Project

                                                                5 The ldquoDevice Information Servicerdquo component is added to the project and is confirmed bydevice_information folder added in Solution Explorer

                                                                ATBTLC1000SettingHandling of Pre-Defined Service

                                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 32

                                                                Figure 4-6 Device Information Service Added to Project

                                                                42 Configuring and Loading Device Information ServiceThe ATBTLC1000 Host driver provides a set of GATT functions that allows storing and updating theservices in ATBTLC1000 memories

                                                                Prototype at_ble_status_t at_ble_primary_service_define(at_ble_uuid_t uuidat_ble_handle_t service_handleat_ble_included_service_t included_service_listuint16_t included_service_countat_ble_characteristic_t charactristic_listuint16_t charactristic_count)

                                                                Description Defines a new primary service along with its included services and characteristics inATBTLC1000

                                                                Parameters

                                                                bull Uuid [In] ndash primary service UUIDbull service_handle [Out] ndash Service handle is returned herebull included_service_list [In] ndash an array of included service referencesbull included_service_count [In] ndash number of elements in included_service_listbull charactristic_list [InOut] ndash an array of characteristics included in the service this array

                                                                is updated with respective characteristics handlesbull charactristic_count[In] ndash number of elements in charactristic_list

                                                                Return Execution Status

                                                                This function requires an argument as GATT description structure of the service that is implemented Thepreviously added Device Info service component provides Bluetooth Low Energy service middlewareincluding the init functions that predefine the services See below ldquodis_init_servicerdquo from device infoBLE service (device_infohc)

                                                                Prototype ndash void dis_init_service(dis_gatt_service_handler_t device_info_serv)Description ndash Initialize the device information service handler in the host MCU memory

                                                                Parameters ndash

                                                                ATBTLC1000SettingHandling of Pre-Defined Service

                                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 33

                                                                bull device_info_serv [Inout] pointer to device info GATT description handler to beupdated

                                                                Return None

                                                                Here is a picture of GATT device info service descriptor definition in Host memory

                                                                device_info_serv-gtserv_handle = 0device_info_serv-gtserv_uuidtype = AT_BLE_UUID_16device_info_serv-gtserv_uuiduuid[0] = (uint8_t) DIS_SERVICE_UUIDdevice_info_serv-gtserv_uuiduuid[1] = (uint8_t) (DIS_SERVICE_UUID gtgt 8)Characteristic Info for Manufacturer Name Stringdevice_info_serv-gtserv_chars[0]char_val_handle = 0 handle stored here device_info_serv-gtserv_chars[0]uuidtype = AT_BLE_UUID_16device_info_serv-gtserv_chars[0]uuiduuid[0] = (uint8_t) IS_CHAR_MANUFACTURER_NAME_UUID UUID Manufacturer Name String device_info_serv-gtserv_chars[0]uuiduuid[1] = (uint8_t) (DIS_CHAR_MANUFACTURER_NAME_UUID gtgt 8) UUID Manufacturer Name String device_info_serv-gtserv_chars[0]properties = AT_BLE_CHAR_READ Properties memcpy(char_valuemanufacturer_nameDEFAULT_MANUFACTURER_NAMEDIS_CHAR_MANUFACTURER_NAME_INIT_LEN)device_info_serv-gtserv_chars[0]init_value = char_valuemanufacturer_namedevice_info_serv-gtserv_chars[0]value_init_len = DIS_CHAR_MANUFACTURER_NAME_INIT_LENdevice_info_serv-gtserv_chars[0]value_max_len = DIS_CHAR_MANUFACTURER_NAME_MAX_LENif BLE_PAIR_ENABLEdevice_info_serv-gtserv_chars[0]value_permissions = AT_BLE_ATTR_READABLE_REQ_AUTHN_NO_AUTHR permissions elsedevice_info_serv-gtserv_chars[0]value_permissions = AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR permissions endifdevice_info_serv-gtserv_chars[0]user_desc = NULL user defined name device_info_serv-gtserv_chars[0]user_desc_len = 0device_info_serv-gtserv_chars[0]user_desc_max_len = 0device_info_serv-gtserv_chars[0]user_desc_permissions = AT_BLE_ATTR_NO_PERMISSIONS user description permissionsdevice_info_serv-gtserv_chars[0]client_config_permissions = AT_BLE_ATTR_NO_PERMISSIONS client config permissionsdevice_info_serm hdsv-gtserv_chars[0]server_config_permissions = AT_BLE_ATTR_NO_PERMISSIONS server config permissionsdevice_info_serv-gtserv_chars[0]user_desc_handle = 0 user desc handlesdevice_info_serv-gtserv_chars[0]client_config_handle = 0 client config handlesdevice_info_serv-gtserv_chars[0]server_config_handle = 0 server config handlesdevice_info_serv-gtserv_chars[0]presentation_format = NULL presentation format

                                                                Note  In case of custom service the above definition initialization must be taken care of by thedeveloper

                                                                421 Procedure to Configure and Load Device Info Service1 Include device info service header file (device_infoh) at the beginning of

                                                                startup_templatec fileinclude ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehinclude device_infoh

                                                                2 Define a device info service handler as global in startup_templatec file Serviceshandlers dis_gatt_service_handler_t dis_service_handler

                                                                ATBTLC1000SettingHandling of Pre-Defined Service

                                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 34

                                                                3 Add dis_init_service and at_ble_primary_service_define functions as called abovethe advertisement start in main routine Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service)dis_init_service (ampdis_service_handler) Define the primary service in the GATT server database if ((dis_primary_service_define (ampdis_service_handler)) = AT_BLE_SUCCESS)printf(Device Information Service definition failed) Start Advertising process start_advertisement()

                                                                4 Click to save the project ltCtrl+Sgt and compile the project by pressing button ltF7gt5 Verify that no build error appears in Atmel Studio output window

                                                                Figure 4-7 Atmel Studio Output Window

                                                                6 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt7 Open ldquoMicrochip SmartConnectrdquo application on Android or iOS device8 Press ltStart Scangt button and connect to peripheral

                                                                Note  The device name is a characteristic and contains the name of the device This device namecan be read by the central device to know the name of the device in order to differentiate thedevices This is being set using at_ble_device_name_set()API The device name is set bydefault when ble_device_init is called and the value is pre-defined using BLE_DEVICE_NAMEThe device name can also be sent as part of advertisement payload to be same as the oneconfigured in at_ble_adv_data_set() API It is the responsibility of users to keep the devicename set in advertisement payload the same as that configured inat_ble_device_name_set()

                                                                9 The Service must now be visible after pairing with peripheral under Microchip SmartConnectapplication

                                                                ATBTLC1000SettingHandling of Pre-Defined Service

                                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 35

                                                                Figure 4-8 Service List in Microchip SmartConnect Application

                                                                Note  If the pairing of ATBTLC1000 with Microchip Smart connect is not successful then removethe pairing information from mobile by selecting ldquoForget Devicerdquo from the mobile settings Thereason for this is that the mobile app stores the previous pairing information but the ATBTLC1000device lost the previous pairing information due to RESET since it was stored on temporary storage(RAM)

                                                                10 The serial terminal must display the following log output windowFigure 4-9 Console Log Window

                                                                ATBTLC1000SettingHandling of Pre-Defined Service

                                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 36

                                                                5 Setting up and Handling Custom ServiceThe previous assignment describes the handling of Bluetooth Low Energy SIG defined device infoservice which is the predefined service available in ASF component This assignment describes thecustom service So the service initialization needs to be implemented In the context of customizedenvironment service the following service description is pushed in ATBTLC1000 memory

                                                                Figure 5-1 Custom Service

                                                                Custom Environment Service Description

                                                                bull UUID type ndash Custom UUID (128-bit)bull UUID ndash 1bc5d5a5-0200-a687-e511-3639c1ba5af0

                                                                Characteristic 0 (Temperature)

                                                                bull User Description ndash Temperaturebull UUID type ndash Custom UUID (128-bit)bull UUID ndash 1bc5d5a5-0200-a687-e511-3639d8ba5af0bull Properties ndash Read Notifybull Value permission ndash No authorization requiredbull Client config permission ndash No permissionbull Server config permission ndash No permission

                                                                Note  In this definition UUIDs are generated randomly Custom servicescharacteristics are free to useany 128-bit UUID less than the base UUID There is no reserved space for vendors to use 16-bit or 32-bitUUIDs

                                                                With this definition any temperature change is notified to the central The notify mechanism allows thecentral to know when the data changes When notify property of the Client Characteristic ConfigurationDescriptor is enabled by the central and the device writes the new value then this updated value isautomatically sent to the central through a notification The central is not required to send readcharacteristic commands explicitly to the peripheral (GATT server)

                                                                To setup and handle the custom environment service in ATBTLC1000 module the following steps areadded to the Host MCU application

                                                                bull Configure and load the custom servicebull Update Temperature characteristic and notify to the central devicebull Receive and handle notification from the Host device

                                                                ATBTLC1000Setting up and Handling Custom Service

                                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 37

                                                                Figure 5-2 Custom Service Flowchart

                                                                51 Configuring and Loading the Custom Environment ServiceThe ATBTLC1000 Host driver provides the following set of GATT functions that allows it to push andupdate the service descriptions in the ATBTLC1000 SRAM memory

                                                                Note  Before starting this assignment be sure to follow the steps mentioned in 2 Creating the Projectand Initializing and 3 Establishing Connection with Central Device

                                                                Prototype ndashat_ble_status_t at_ble_primary_service_define(at_ble_uuid_t uuidat_ble_handle_t service_handleat_ble_included_service_t included_service_listuint16_t included_service_countat_ble_characteristic_t charactristic_listuint16_t charactristic_count)

                                                                Description ndash Defines a new primary service along with its included services and characteristics inATBTLC1000 module

                                                                Parameters

                                                                bull Uuid [In] ndash primary service UUIDbull service_handle [Out] ndash service handle is returned herebull included_service_list [In] ndash array of included service referencesbull included_service_count [In] ndash number of elements in included_service_listbull charactristic_list [InOut] ndash an array of characteristics included in the service this array

                                                                is update with respective characteristics handlesbull charactristic_count[In] ndash number of elements in charactristic_list

                                                                ATBTLC1000Setting up and Handling Custom Service

                                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 38

                                                                Return ndash Execution Status

                                                                bull Characteristics ndashndash Characteristics definition is done through specific array of following

                                                                ldquoat_ble_characteristic_trdquo structure instancestypedef structat_ble_handle_t char_val_handle Handler (returned during service initialisation)at_ble_uuid_t uuid Characteristic UUID (type and value)at_ble_char_properties_t propertiesCharac Properties (read write notify)uint8_t init_value initial valueuint16_t value_init_len initial value lengthuint16_t value_max_len value max lengthat_ble_attr_permissions_t value_permissions access authorization and authenticationuint8_t user_desc User descriptionuint16_t user_desc_len User description lengthuint16_t user_desc_max_len User description max lengthat_ble_char_presentation_t presentation_format Presentation formatat_ble_attr_permissions_t user_desc_permissions User description permissionat_ble_attr_permissions_t client_config_permissions client permissionat_ble_attr_permissions_t server_config_permissions server permissionat_ble_handle_t user_desc_handle description handlerat_ble_handle_t client_config_handle Client config handlerat_ble_handle_t server_config_handle Server config handler at_ble_characteristic_t

                                                                511 Procedure to Configure and Load Custom Environment Service1 Define the following service UUID and characteristic UUID in startup_templatec file

                                                                define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

                                                                2 Define the following environment service handler and characteristics variable as global instartup_templatec file Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

                                                                3 Add the following service initialization function custom_environment_service_init instartup_templatecvoid custom_environment_service_init(void) at_ble_uuid_t environment_service_uuiduint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUIDuint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperatureenvironment_service_characs[0]user_desc_len = 10environment_service_characs[0]user_desc_max_len = 10environment_service_characs[0]uuidtype = AT_BLE_UUID_128memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16)environment_service_characs[0]properties = AT_BLE_CHAR_READ |AT_BLE_CHAR_NOTIFYenvironment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature valueenvironment_service_characs[0]value_permissions =(AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuidampenvironment_service_handlerNULL0environment_service_characs1)=AT_BLE_SUCCESS)printf(n Assignment 41 Failed to Initialize custom environment service)

                                                                ATBTLC1000Setting up and Handling Custom Service

                                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 39

                                                                elseprintf(n Assignment 41 Initialize custom environment service)

                                                                4 Declare and implement the following GATT event callback functioncustom_char_changed_app_event in startup_templatec file If a client (central) enablesnotifications for a server the server (peripheral) receives an AT_BLE_CHARACTERISTIC_CHANGEDevent and this event callback is called Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

                                                                5 Declare and implement the following custom_notification_confirmation_handlerfunction in startup_templatec file Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param)at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )paramif (event_param-gtstatus == AT_BLE_SUCCESS)printf(n Assignment 41Notification Successfully sent over the air) else printf(n Assignment 41Sending Notification over the air failed)return AT_BLE_SUCCESS

                                                                6 Declare the following GATT server callback structure in startup_templatec file Thisassignment uses two GATT callbacksstatic const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handlercharacteristic_changed = custom_char_changed_app_event

                                                                7 Add the following register_gatt_server_callbacks function in startup_templatec toregister GATT server callback for notification confirmation event Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks)ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACKBLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle)if (ble_status = true)printf(nError when Registering ATBTLC1000 callbacks)

                                                                8 Add custom_environment_service_init and register_gatt_server_callbacksfunction calls prior to start advertisement in the application main routine to initialize custom serviceand to register the GATT server callbacksint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()

                                                                ATBTLC1000Setting up and Handling Custom Service

                                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 40

                                                                endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks() Custom service init custom_environment_service_init ( ) Register Gatt server callbacks register_gatt_server_callbacks ( ) Start Advertising process start_advertisement()while(true)ble_event_task()

                                                                9 Click to save the project ltCtrl+Sgt

                                                                10 Compile the project by pressing button ltF7gt11 Verify that no build error appears in the Atmel Studio output window

                                                                Figure 5-3 Atmel Studio Output Window

                                                                12 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt13 Open the ldquoMicrochip SmartConnectrdquo application on Android or iOS device14 Connect and pair to the peripheral (pass key 123456)15 Custom service must now be visible after pairing with peripheral under Microchip SmartConnect

                                                                application

                                                                ATBTLC1000Setting up and Handling Custom Service

                                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 41

                                                                Figure 5-4 Service List in Microchip SmartConnect Application

                                                                Note  Custom service is displayed as unknown service in the above figure as this service is not aSIG-defined service

                                                                Figure 5-5 General Information

                                                                16 Serial terminal client must display the following Log output

                                                                ATBTLC1000Setting up and Handling Custom Service

                                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 42

                                                                Figure 5-6 Log Output Window

                                                                52 Updating the Temperature CharacteristicIn the previous assignment the custom Temperature characteristic is defined with a notify attribute Thistype of attribute requires notification to be sent to central when a new characteristic value is availableThe update of any ldquonotifyrdquo characteristic value is based on following interaction between the Host MCUand the ATBTLC1000Figure 5-7 Characteristic Notification

                                                                521 Setting a Characteristic Value ( at_ble_characteristic_value_set)Prototype ndashat_ble_status_t at_ble_characteristic_value_setat_ble_handle_t handleuint8_t valueuint16_t len)

                                                                Description ndash Sets a characteristic value in ATBTLC1000 memory

                                                                Parameters ndash

                                                                ATBTLC1000Setting up and Handling Custom Service

                                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 43

                                                                bull handle [inout] ndash Pointer to Characteristic handle to be changedbull value [in] ndash New valuebull len [in] ndash Value length in bytes

                                                                Return ndash Execution Status

                                                                522 Sending a Notification (at_ble_notification_send)Prototype ndashat_ble_status_t at_ble_notification_send(at_ble_handle_t conn_handleat_ble_handle_t attr_handle)

                                                                Description ndash Sends a Notification

                                                                Parameters ndash

                                                                bull conn_handle[in] ndash handle of the connection to be notifiedbull attr_handle [in] ndash handle of the attribute originating the notification

                                                                Return ndash Execution Status

                                                                523 Sending Temperature Information Once in Every 10 Seconds to Central1 Modify the following ldquotimer_callback_fnrdquo callback function from the startup_templatec

                                                                filestatic void timer_callback_fn(void)timer_flag = true

                                                                2 hw_timer_init()in main routine of startup_templatec initializes the hardware timer3 If a client (Central) enables the notifications for a server the server (Peripheral) receives an

                                                                AT_BLE_CHARACTERISTIC_CHANGED event callback then start the periodic 10 second timer forsending the notification Add the following code in previously definedcustom_char_changed_app_event function Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))timer_flag = falsehw_timer_start(10)printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

                                                                4 Declare the following Temperature_value global variable in startup_templatec staticuint8_t Temperature_value = 25 as static

                                                                5 Add the following send_temperature_notification function in startup_templatec tosend temperature every 10 seconds Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++

                                                                ATBTLC1000Setting up and Handling Custom Service

                                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 44

                                                                if(Temperature_value gt 75)Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set(environment_service_characs[0]char_val_handle(uint8_t )ampTemperature_valuesizeof(Temperature_value))ble_status = at_ble_notification_send(0environment_service_characs[0]char_val_handle)if(ble_status = AT_BLE_SUCCESS)printf(fail to send temperature update notification )

                                                                6 Add the following code in main routine to send temperature data every 10 secondswhile (1) ble_event_task()if(connected_flag == true ampamp timer_flag == truetimer_flag = falsesend_temperature_notification()

                                                                7 Click to save the project ltCtrl+Sgt

                                                                8 Compile the project by pressing the button ltF7gt9 Verify that no build error appears in Atmel Studio output window

                                                                Figure 5-8 Atmel Studio Output Window

                                                                10 Click to program the project binary on the L21 Xplained XSTK11 Open ldquoMicrochip SmartConnectrdquo Application on Android or iOS device12 Connect and pair to the peripheral (pass key 123456)13 Click NOTIFY to start the notification14 Temperature information in HEX values must be displayed in Microchip SmartConnect application

                                                                ATBTLC1000Setting up and Handling Custom Service

                                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 45

                                                                Figure 5-9 Notification Window

                                                                15 Serial terminal must display the following log outputFigure 5-10 Log Output Window

                                                                ATBTLC1000Setting up and Handling Custom Service

                                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 46

                                                                6 Appendix A Software Solution - Pre-Defined SvcThe following is the code implementation for handling of pre-defined service done in 4 SettingHandlingof Pre-Defined Service

                                                                - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehinclude device_infoh

                                                                volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false Services handlers dis_gatt_service_handler_t dis_service_handler

                                                                static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

                                                                void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                                                                Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                                                                Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                                                                static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                                                                Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void) Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks)

                                                                ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

                                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 47

                                                                ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                                                timer callback function static void timer_callback_fn(void) Add timer callback functionality here

                                                                void button_cb(void) Add button callback functionality here

                                                                int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                                                                Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                                                                DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks()

                                                                Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service) dis_init_service(ampdis_service_handler) Define the primary service in the GATT server database if((dis_primary_service_define(ampdis_service_handler)) = AT_BLE_SUCCESS) printf(Device Information Service definition failed)

                                                                Start Advertising process start_advertisement() while(true) ble_event_task()

                                                                ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

                                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 48

                                                                7 Appendix B Software Solution - Custom ServiceThe following is the code implementation for handling of pre-defined service done in 5 Setting up andHandling Custom Service

                                                                - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templateh

                                                                volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false

                                                                static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

                                                                define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0

                                                                define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

                                                                Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

                                                                void custom_environment_service_init(void) at_ble_uuid_t environment_service_uuid uint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUID uint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128 memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperature environment_service_characs[0]user_desc_len = 10 environment_service_characs[0]user_desc_max_len = 10 environment_service_characs[0]uuidtype = AT_BLE_UUID_128 memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16) environment_service_characs[0]properties = AT_BLE_CHAR_READ | AT_BLE_CHAR_NOTIFY environment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature value environment_service_characs[0]value_permissions = (AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuid ampenvironment_service_handlerNULL0 environment_service_characs1)=AT_BLE_SUCCESS) printf(n Assignment 41 Failed to Initialize custom environment service) else printf(n Assignment 41 Initialize custom environment service)

                                                                Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param) at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )param if (event_param-gtstatus == AT_BLE_SUCCESS) printf(n Assignment 41Notification Successfully sent over the air)

                                                                ATBTLC1000Appendix B Software Solution - Custom Service

                                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 49

                                                                else printf(n Assignment 41Sending Notification over the air failed) return AT_BLE_SUCCESS

                                                                static at_ble_status_t custom_char_changed_app_event(void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle -gt char_new_value[0])) timer_flag = false hw_timer_start(10) printf(n Assignment 41Characteristic changed event) return AT_BLE_SUCCESS

                                                                static const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handler characteristic_changed = custom_char_changed_app_event

                                                                Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                                                void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                                                                Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                                                                Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                                                                static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                                                                Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void)

                                                                ATBTLC1000Appendix B Software Solution - Custom Service

                                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 50

                                                                Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                                                timer callback function static void timer_callback_fn(void) Add timer callback functionality here timer_flag = true

                                                                void button_cb(void) Add button callback functionality here

                                                                static uint8_t Temperature_value = 25

                                                                Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++ if(Temperature_value gt 75) Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set( environment_service_characs[0]char_val_handle (uint8_t )ampTemperature_value sizeof(Temperature_value)) ble_status = at_ble_notification_send(0 environment_service_characs[0]char_val_handle) if(ble_status = AT_BLE_SUCCESS) printf(fail to send temperature update notification )

                                                                int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                                                                Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                                                                DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register Gap ATBTLC1000 Callbacks register_btlc1000_callbacks()

                                                                Custom service init custom_environment_service_init()

                                                                ATBTLC1000Appendix B Software Solution - Custom Service

                                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 51

                                                                Register Gatt server callback register_gatt_server_callbacks()

                                                                Start Advertising process start_advertisement() while(true) ble_event_task() if(connected_flag == true ampamp timer_flag == true) timer_flag = false send_temperature_notification()

                                                                ATBTLC1000Appendix B Software Solution - Custom Service

                                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 52

                                                                8 Document Revision HistoryRev B - 42018

                                                                Section Changes

                                                                Document Revised contents to match various Bluetooth Low Energy standard versions

                                                                Rev A - 122017

                                                                Section Changes

                                                                Document Initial release

                                                                ATBTLC1000Document Revision History

                                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 53

                                                                The Microchip Web Site

                                                                Microchip provides online support via our web site at httpwwwmicrochipcom This web site is used asa means to make files and information easily available to customers Accessible by using your favoriteInternet browser the web site contains the following information

                                                                bull Product Support ndash Data sheets and errata application notes and sample programs designresources userrsquos guides and hardware support documents latest software releases and archivedsoftware

                                                                bull General Technical Support ndash Frequently Asked Questions (FAQ) technical support requestsonline discussion groups Microchip consultant program member listing

                                                                bull Business of Microchip ndash Product selector and ordering guides latest Microchip press releaseslisting of seminars and events listings of Microchip sales offices distributors and factoryrepresentatives

                                                                Customer Change Notification Service

                                                                Microchiprsquos customer notification service helps keep customers current on Microchip productsSubscribers will receive e-mail notification whenever there are changes updates revisions or erratarelated to a specified product family or development tool of interest

                                                                To register access the Microchip web site at httpwwwmicrochipcom Under ldquoSupportrdquo click onldquoCustomer Change Notificationrdquo and follow the registration instructions

                                                                Customer Support

                                                                Users of Microchip products can receive assistance through several channels

                                                                bull Distributor or Representativebull Local Sales Officebull Field Application Engineer (FAE)bull Technical Support

                                                                Customers should contact their distributor representative or Field Application Engineer (FAE) for supportLocal sales offices are also available to help customers A listing of sales offices and locations is includedin the back of this document

                                                                Technical support is available through the web site at httpwwwmicrochipcomsupport

                                                                Microchip Devices Code Protection Feature

                                                                Note the following details of the code protection feature on Microchip devices

                                                                bull Microchip products meet the specification contained in their particular Microchip Data Sheetbull Microchip believes that its family of products is one of the most secure families of its kind on the

                                                                market today when used in the intended manner and under normal conditionsbull There are dishonest and possibly illegal methods used to breach the code protection feature All of

                                                                these methods to our knowledge require using the Microchip products in a manner outside theoperating specifications contained in Microchiprsquos Data Sheets Most likely the person doing so isengaged in theft of intellectual property

                                                                bull Microchip is willing to work with the customer who is concerned about the integrity of their code

                                                                ATBTLC1000

                                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 54

                                                                bull Neither Microchip nor any other semiconductor manufacturer can guarantee the security of theircode Code protection does not mean that we are guaranteeing the product as ldquounbreakablerdquo

                                                                Code protection is constantly evolving We at Microchip are committed to continuously improving thecode protection features of our products Attempts to break Microchiprsquos code protection feature may be aviolation of the Digital Millennium Copyright Act If such acts allow unauthorized access to your softwareor other copyrighted work you may have a right to sue for relief under that Act

                                                                Legal Notice

                                                                Information contained in this publication regarding device applications and the like is provided only foryour convenience and may be superseded by updates It is your responsibility to ensure that yourapplication meets with your specifications MICROCHIP MAKES NO REPRESENTATIONS ORWARRANTIES OF ANY KIND WHETHER EXPRESS OR IMPLIED WRITTEN OR ORAL STATUTORYOR OTHERWISE RELATED TO THE INFORMATION INCLUDING BUT NOT LIMITED TO ITSCONDITION QUALITY PERFORMANCE MERCHANTABILITY OR FITNESS FOR PURPOSEMicrochip disclaims all liability arising from this information and its use Use of Microchip devices in lifesupport andor safety applications is entirely at the buyerrsquos risk and the buyer agrees to defendindemnify and hold harmless Microchip from any and all damages claims suits or expenses resultingfrom such use No licenses are conveyed implicitly or otherwise under any Microchip intellectualproperty rights unless otherwise stated

                                                                Trademarks

                                                                The Microchip name and logo the Microchip logo AnyRate AVR AVR logo AVR Freaks BeaconThingsBitCloud CryptoMemory CryptoRF dsPIC FlashFlex flexPWR Heldo JukeBlox KeeLoq KeeLoq logoKleer LANCheck LINK MD maXStylus maXTouch MediaLB megaAVR MOST MOST logo MPLABOptoLyzer PIC picoPower PICSTART PIC32 logo Prochip Designer QTouch RightTouch SAM-BASpyNIC SST SST Logo SuperFlash tinyAVR UNIO and XMEGA are registered trademarks ofMicrochip Technology Incorporated in the USA and other countries

                                                                ClockWorks The Embedded Control Solutions Company EtherSynch Hyper Speed Control HyperLightLoad IntelliMOS mTouch Precision Edge and Quiet-Wire are registered trademarks of MicrochipTechnology Incorporated in the USA

                                                                Adjacent Key Suppression AKS Analog-for-the-Digital Age Any Capacitor AnyIn AnyOut BodyComchipKIT chipKIT logo CodeGuard CryptoAuthentication CryptoCompanion CryptoControllerdsPICDEM dsPICDEMnet Dynamic Average Matching DAM ECAN EtherGREEN In-Circuit SerialProgramming ICSP Inter-Chip Connectivity JitterBlocker KleerNet KleerNet logo Mindi MiWimotorBench MPASM MPF MPLAB Certified logo MPLIB MPLINK MultiTRAK NetDetach OmniscientCode Generation PICDEM PICDEMnet PICkit PICtail PureSilicon QMatrix RightTouch logo REALICE Ripple Blocker SAM-ICE Serial Quad IO SMART-IS SQI SuperSwitcher SuperSwitcher II TotalEndurance TSHARC USBCheck VariSense ViewSpan WiperLock Wireless DNA and ZENA aretrademarks of Microchip Technology Incorporated in the USA and other countries

                                                                SQTP is a service mark of Microchip Technology Incorporated in the USA

                                                                Silicon Storage Technology is a registered trademark of Microchip Technology Inc in other countries

                                                                GestIC is a registered trademark of Microchip Technology Germany II GmbH amp Co KG a subsidiary ofMicrochip Technology Inc in other countries

                                                                All other trademarks mentioned herein are property of their respective companies

                                                                ATBTLC1000

                                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 55

                                                                copy 2018 Microchip Technology Incorporated Printed in the USA All Rights Reserved

                                                                ISBN 978-1-5224-2921-0

                                                                Quality Management System Certified by DNV

                                                                ISOTS 16949Microchip received ISOTS-169492009 certification for its worldwide headquarters design and waferfabrication facilities in Chandler and Tempe Arizona Gresham Oregon and design centers in Californiaand India The Companyrsquos quality system processes and procedures are for its PICreg MCUs and dsPICreg

                                                                DSCs KEELOQreg code hopping devices Serial EEPROMs microperipherals nonvolatile memory andanalog products In addition Microchiprsquos quality system for the design and manufacture of developmentsystems is ISO 90012000 certified

                                                                ATBTLC1000

                                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 56

                                                                AMERICAS ASIAPACIFIC ASIAPACIFIC EUROPECorporate Office2355 West Chandler BlvdChandler AZ 85224-6199Tel 480-792-7200Fax 480-792-7277Technical SupporthttpwwwmicrochipcomsupportWeb AddresswwwmicrochipcomAtlantaDuluth GATel 678-957-9614Fax 678-957-1455Austin TXTel 512-257-3370BostonWestborough MATel 774-760-0087Fax 774-760-0088ChicagoItasca ILTel 630-285-0071Fax 630-285-0075DallasAddison TXTel 972-818-7423Fax 972-818-2924DetroitNovi MITel 248-848-4000Houston TXTel 281-894-5983IndianapolisNoblesville INTel 317-773-8323Fax 317-773-5453Tel 317-536-2380Los AngelesMission Viejo CATel 949-462-9523Fax 949-462-9608Tel 951-273-7800Raleigh NCTel 919-844-7510New York NYTel 631-435-6000San Jose CATel 408-735-9110Tel 408-436-4270Canada - TorontoTel 905-695-1980Fax 905-695-2078

                                                                Australia - SydneyTel 61-2-9868-6733China - BeijingTel 86-10-8569-7000China - ChengduTel 86-28-8665-5511China - ChongqingTel 86-23-8980-9588China - DongguanTel 86-769-8702-9880China - GuangzhouTel 86-20-8755-8029China - HangzhouTel 86-571-8792-8115China - Hong Kong SARTel 852-2943-5100China - NanjingTel 86-25-8473-2460China - QingdaoTel 86-532-8502-7355China - ShanghaiTel 86-21-3326-8000China - ShenyangTel 86-24-2334-2829China - ShenzhenTel 86-755-8864-2200China - SuzhouTel 86-186-6233-1526China - WuhanTel 86-27-5980-5300China - XianTel 86-29-8833-7252China - XiamenTel 86-592-2388138China - ZhuhaiTel 86-756-3210040

                                                                India - BangaloreTel 91-80-3090-4444India - New DelhiTel 91-11-4160-8631India - PuneTel 91-20-4121-0141Japan - OsakaTel 81-6-6152-7160Japan - TokyoTel 81-3-6880- 3770Korea - DaeguTel 82-53-744-4301Korea - SeoulTel 82-2-554-7200Malaysia - Kuala LumpurTel 60-3-7651-7906Malaysia - PenangTel 60-4-227-8870Philippines - ManilaTel 63-2-634-9065SingaporeTel 65-6334-8870Taiwan - Hsin ChuTel 886-3-577-8366Taiwan - KaohsiungTel 886-7-213-7830Taiwan - TaipeiTel 886-2-2508-8600Thailand - BangkokTel 66-2-694-1351Vietnam - Ho Chi MinhTel 84-28-5448-2100

                                                                Austria - WelsTel 43-7242-2244-39Fax 43-7242-2244-393Denmark - CopenhagenTel 45-4450-2828Fax 45-4485-2829Finland - EspooTel 358-9-4520-820France - ParisTel 33-1-69-53-63-20Fax 33-1-69-30-90-79Germany - GarchingTel 49-8931-9700Germany - HaanTel 49-2129-3766400Germany - HeilbronnTel 49-7131-67-3636Germany - KarlsruheTel 49-721-625370Germany - MunichTel 49-89-627-144-0Fax 49-89-627-144-44Germany - RosenheimTel 49-8031-354-560Israel - RarsquoananaTel 972-9-744-7705Italy - MilanTel 39-0331-742611Fax 39-0331-466781Italy - PadovaTel 39-049-7625286Netherlands - DrunenTel 31-416-690399Fax 31-416-690340Norway - TrondheimTel 47-7289-7561Poland - WarsawTel 48-22-3325737Romania - BucharestTel 40-21-407-87-50Spain - MadridTel 34-91-708-08-90Fax 34-91-708-08-91Sweden - GothenbergTel 46-31-704-60-40Sweden - StockholmTel 46-8-5090-4654UK - WokinghamTel 44-118-921-5800Fax 44-118-921-5820

                                                                Worldwide Sales and Service

                                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 57

                                                                • Introduction
                                                                • Table of Contents
                                                                • 1 Getting Started
                                                                  • 11 Software Prerequisites
                                                                    • 111 Installation Steps of Atmel Studio 7
                                                                      • 12 Software Setup
                                                                        • 121 Installation of Microchip SmartConnect application on a Mobile device
                                                                          • 13 ATBTLC1000 Embedded Firmware
                                                                          • 14 ATBTLC1000 Host Software API
                                                                          • 15 Hardware Prerequisites
                                                                            • 151 SMARTtrade SAM L21 Xplained Pro
                                                                            • 152 ATBTLC1000ZR Xplained Pro Extension board
                                                                              • 16 Hardware Setup
                                                                                • 2 Creating the Project and Initializing
                                                                                  • 21 Creating Project from ASF
                                                                                  • 22 Configuring ASF for ATBTLC1000-ZR
                                                                                  • 23 Compiling and Testing the Project
                                                                                    • 3 Establishing Connection with Central Device
                                                                                      • 31 Configuring and Starting the Advertisement Process
                                                                                        • 311 Flags (AD Type 0x00)
                                                                                        • 312 Available Service UUID (AD Types 0x02 to 0x07)
                                                                                        • 313 Device Name (AD Types 0x08 to 0x09)
                                                                                          • 3131 Setting the Advertisement Payload (ble_advertisement_data_set)
                                                                                          • 3132 Starting the Advertisement Process (at_ble_adv_start)
                                                                                            • 314 Advertisement Process
                                                                                              • 3141 Starting the Advertisement Process
                                                                                                  • 32 Managing GAP events
                                                                                                    • 321 Handling of Connected and Disconnected GAP Events
                                                                                                        • 4 SettingHandling of Pre-Defined Service
                                                                                                          • 41 Adding Device Info Service Component from ASF Wizard to Project
                                                                                                          • 42 Configuring and Loading Device Information Service
                                                                                                            • 421 Procedure to Configure and Load Device Info Service
                                                                                                                • 5 Setting up and Handling Custom Service
                                                                                                                  • 51 Configuring and Loading the Custom Environment Service
                                                                                                                    • 511 Procedure to Configure and Load Custom Environment Service
                                                                                                                      • 52 Updating the Temperature Characteristic
                                                                                                                        • 521 Setting a Characteristic Value ( at_ble_characteristic_value_set)
                                                                                                                        • 522 Sending a Notification (at_ble_notification_send)
                                                                                                                        • 523 Sending Temperature Information Once in Every 10 Seconds to Central
                                                                                                                            • 6 Appendix A Software Solution - Pre-Defined Svc
                                                                                                                            • 7 Appendix B Software Solution - Custom Service
                                                                                                                            • 8 Document Revision History
                                                                                                                            • The Microchip Web Site
                                                                                                                            • Customer Change Notification Service
                                                                                                                            • Customer Support
                                                                                                                            • Microchip Devices Code Protection Feature
                                                                                                                            • Legal Notice
                                                                                                                            • Trademarks
                                                                                                                            • Quality Management System Certified by DNV
                                                                                                                            • Worldwide Sales and Service

                                                                  Figure 4-6 Device Information Service Added to Project

                                                                  42 Configuring and Loading Device Information ServiceThe ATBTLC1000 Host driver provides a set of GATT functions that allows storing and updating theservices in ATBTLC1000 memories

                                                                  Prototype at_ble_status_t at_ble_primary_service_define(at_ble_uuid_t uuidat_ble_handle_t service_handleat_ble_included_service_t included_service_listuint16_t included_service_countat_ble_characteristic_t charactristic_listuint16_t charactristic_count)

                                                                  Description Defines a new primary service along with its included services and characteristics inATBTLC1000

                                                                  Parameters

                                                                  bull Uuid [In] ndash primary service UUIDbull service_handle [Out] ndash Service handle is returned herebull included_service_list [In] ndash an array of included service referencesbull included_service_count [In] ndash number of elements in included_service_listbull charactristic_list [InOut] ndash an array of characteristics included in the service this array

                                                                  is updated with respective characteristics handlesbull charactristic_count[In] ndash number of elements in charactristic_list

                                                                  Return Execution Status

                                                                  This function requires an argument as GATT description structure of the service that is implemented Thepreviously added Device Info service component provides Bluetooth Low Energy service middlewareincluding the init functions that predefine the services See below ldquodis_init_servicerdquo from device infoBLE service (device_infohc)

                                                                  Prototype ndash void dis_init_service(dis_gatt_service_handler_t device_info_serv)Description ndash Initialize the device information service handler in the host MCU memory

                                                                  Parameters ndash

                                                                  ATBTLC1000SettingHandling of Pre-Defined Service

                                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 33

                                                                  bull device_info_serv [Inout] pointer to device info GATT description handler to beupdated

                                                                  Return None

                                                                  Here is a picture of GATT device info service descriptor definition in Host memory

                                                                  device_info_serv-gtserv_handle = 0device_info_serv-gtserv_uuidtype = AT_BLE_UUID_16device_info_serv-gtserv_uuiduuid[0] = (uint8_t) DIS_SERVICE_UUIDdevice_info_serv-gtserv_uuiduuid[1] = (uint8_t) (DIS_SERVICE_UUID gtgt 8)Characteristic Info for Manufacturer Name Stringdevice_info_serv-gtserv_chars[0]char_val_handle = 0 handle stored here device_info_serv-gtserv_chars[0]uuidtype = AT_BLE_UUID_16device_info_serv-gtserv_chars[0]uuiduuid[0] = (uint8_t) IS_CHAR_MANUFACTURER_NAME_UUID UUID Manufacturer Name String device_info_serv-gtserv_chars[0]uuiduuid[1] = (uint8_t) (DIS_CHAR_MANUFACTURER_NAME_UUID gtgt 8) UUID Manufacturer Name String device_info_serv-gtserv_chars[0]properties = AT_BLE_CHAR_READ Properties memcpy(char_valuemanufacturer_nameDEFAULT_MANUFACTURER_NAMEDIS_CHAR_MANUFACTURER_NAME_INIT_LEN)device_info_serv-gtserv_chars[0]init_value = char_valuemanufacturer_namedevice_info_serv-gtserv_chars[0]value_init_len = DIS_CHAR_MANUFACTURER_NAME_INIT_LENdevice_info_serv-gtserv_chars[0]value_max_len = DIS_CHAR_MANUFACTURER_NAME_MAX_LENif BLE_PAIR_ENABLEdevice_info_serv-gtserv_chars[0]value_permissions = AT_BLE_ATTR_READABLE_REQ_AUTHN_NO_AUTHR permissions elsedevice_info_serv-gtserv_chars[0]value_permissions = AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR permissions endifdevice_info_serv-gtserv_chars[0]user_desc = NULL user defined name device_info_serv-gtserv_chars[0]user_desc_len = 0device_info_serv-gtserv_chars[0]user_desc_max_len = 0device_info_serv-gtserv_chars[0]user_desc_permissions = AT_BLE_ATTR_NO_PERMISSIONS user description permissionsdevice_info_serv-gtserv_chars[0]client_config_permissions = AT_BLE_ATTR_NO_PERMISSIONS client config permissionsdevice_info_serm hdsv-gtserv_chars[0]server_config_permissions = AT_BLE_ATTR_NO_PERMISSIONS server config permissionsdevice_info_serv-gtserv_chars[0]user_desc_handle = 0 user desc handlesdevice_info_serv-gtserv_chars[0]client_config_handle = 0 client config handlesdevice_info_serv-gtserv_chars[0]server_config_handle = 0 server config handlesdevice_info_serv-gtserv_chars[0]presentation_format = NULL presentation format

                                                                  Note  In case of custom service the above definition initialization must be taken care of by thedeveloper

                                                                  421 Procedure to Configure and Load Device Info Service1 Include device info service header file (device_infoh) at the beginning of

                                                                  startup_templatec fileinclude ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehinclude device_infoh

                                                                  2 Define a device info service handler as global in startup_templatec file Serviceshandlers dis_gatt_service_handler_t dis_service_handler

                                                                  ATBTLC1000SettingHandling of Pre-Defined Service

                                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 34

                                                                  3 Add dis_init_service and at_ble_primary_service_define functions as called abovethe advertisement start in main routine Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service)dis_init_service (ampdis_service_handler) Define the primary service in the GATT server database if ((dis_primary_service_define (ampdis_service_handler)) = AT_BLE_SUCCESS)printf(Device Information Service definition failed) Start Advertising process start_advertisement()

                                                                  4 Click to save the project ltCtrl+Sgt and compile the project by pressing button ltF7gt5 Verify that no build error appears in Atmel Studio output window

                                                                  Figure 4-7 Atmel Studio Output Window

                                                                  6 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt7 Open ldquoMicrochip SmartConnectrdquo application on Android or iOS device8 Press ltStart Scangt button and connect to peripheral

                                                                  Note  The device name is a characteristic and contains the name of the device This device namecan be read by the central device to know the name of the device in order to differentiate thedevices This is being set using at_ble_device_name_set()API The device name is set bydefault when ble_device_init is called and the value is pre-defined using BLE_DEVICE_NAMEThe device name can also be sent as part of advertisement payload to be same as the oneconfigured in at_ble_adv_data_set() API It is the responsibility of users to keep the devicename set in advertisement payload the same as that configured inat_ble_device_name_set()

                                                                  9 The Service must now be visible after pairing with peripheral under Microchip SmartConnectapplication

                                                                  ATBTLC1000SettingHandling of Pre-Defined Service

                                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 35

                                                                  Figure 4-8 Service List in Microchip SmartConnect Application

                                                                  Note  If the pairing of ATBTLC1000 with Microchip Smart connect is not successful then removethe pairing information from mobile by selecting ldquoForget Devicerdquo from the mobile settings Thereason for this is that the mobile app stores the previous pairing information but the ATBTLC1000device lost the previous pairing information due to RESET since it was stored on temporary storage(RAM)

                                                                  10 The serial terminal must display the following log output windowFigure 4-9 Console Log Window

                                                                  ATBTLC1000SettingHandling of Pre-Defined Service

                                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 36

                                                                  5 Setting up and Handling Custom ServiceThe previous assignment describes the handling of Bluetooth Low Energy SIG defined device infoservice which is the predefined service available in ASF component This assignment describes thecustom service So the service initialization needs to be implemented In the context of customizedenvironment service the following service description is pushed in ATBTLC1000 memory

                                                                  Figure 5-1 Custom Service

                                                                  Custom Environment Service Description

                                                                  bull UUID type ndash Custom UUID (128-bit)bull UUID ndash 1bc5d5a5-0200-a687-e511-3639c1ba5af0

                                                                  Characteristic 0 (Temperature)

                                                                  bull User Description ndash Temperaturebull UUID type ndash Custom UUID (128-bit)bull UUID ndash 1bc5d5a5-0200-a687-e511-3639d8ba5af0bull Properties ndash Read Notifybull Value permission ndash No authorization requiredbull Client config permission ndash No permissionbull Server config permission ndash No permission

                                                                  Note  In this definition UUIDs are generated randomly Custom servicescharacteristics are free to useany 128-bit UUID less than the base UUID There is no reserved space for vendors to use 16-bit or 32-bitUUIDs

                                                                  With this definition any temperature change is notified to the central The notify mechanism allows thecentral to know when the data changes When notify property of the Client Characteristic ConfigurationDescriptor is enabled by the central and the device writes the new value then this updated value isautomatically sent to the central through a notification The central is not required to send readcharacteristic commands explicitly to the peripheral (GATT server)

                                                                  To setup and handle the custom environment service in ATBTLC1000 module the following steps areadded to the Host MCU application

                                                                  bull Configure and load the custom servicebull Update Temperature characteristic and notify to the central devicebull Receive and handle notification from the Host device

                                                                  ATBTLC1000Setting up and Handling Custom Service

                                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 37

                                                                  Figure 5-2 Custom Service Flowchart

                                                                  51 Configuring and Loading the Custom Environment ServiceThe ATBTLC1000 Host driver provides the following set of GATT functions that allows it to push andupdate the service descriptions in the ATBTLC1000 SRAM memory

                                                                  Note  Before starting this assignment be sure to follow the steps mentioned in 2 Creating the Projectand Initializing and 3 Establishing Connection with Central Device

                                                                  Prototype ndashat_ble_status_t at_ble_primary_service_define(at_ble_uuid_t uuidat_ble_handle_t service_handleat_ble_included_service_t included_service_listuint16_t included_service_countat_ble_characteristic_t charactristic_listuint16_t charactristic_count)

                                                                  Description ndash Defines a new primary service along with its included services and characteristics inATBTLC1000 module

                                                                  Parameters

                                                                  bull Uuid [In] ndash primary service UUIDbull service_handle [Out] ndash service handle is returned herebull included_service_list [In] ndash array of included service referencesbull included_service_count [In] ndash number of elements in included_service_listbull charactristic_list [InOut] ndash an array of characteristics included in the service this array

                                                                  is update with respective characteristics handlesbull charactristic_count[In] ndash number of elements in charactristic_list

                                                                  ATBTLC1000Setting up and Handling Custom Service

                                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 38

                                                                  Return ndash Execution Status

                                                                  bull Characteristics ndashndash Characteristics definition is done through specific array of following

                                                                  ldquoat_ble_characteristic_trdquo structure instancestypedef structat_ble_handle_t char_val_handle Handler (returned during service initialisation)at_ble_uuid_t uuid Characteristic UUID (type and value)at_ble_char_properties_t propertiesCharac Properties (read write notify)uint8_t init_value initial valueuint16_t value_init_len initial value lengthuint16_t value_max_len value max lengthat_ble_attr_permissions_t value_permissions access authorization and authenticationuint8_t user_desc User descriptionuint16_t user_desc_len User description lengthuint16_t user_desc_max_len User description max lengthat_ble_char_presentation_t presentation_format Presentation formatat_ble_attr_permissions_t user_desc_permissions User description permissionat_ble_attr_permissions_t client_config_permissions client permissionat_ble_attr_permissions_t server_config_permissions server permissionat_ble_handle_t user_desc_handle description handlerat_ble_handle_t client_config_handle Client config handlerat_ble_handle_t server_config_handle Server config handler at_ble_characteristic_t

                                                                  511 Procedure to Configure and Load Custom Environment Service1 Define the following service UUID and characteristic UUID in startup_templatec file

                                                                  define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

                                                                  2 Define the following environment service handler and characteristics variable as global instartup_templatec file Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

                                                                  3 Add the following service initialization function custom_environment_service_init instartup_templatecvoid custom_environment_service_init(void) at_ble_uuid_t environment_service_uuiduint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUIDuint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperatureenvironment_service_characs[0]user_desc_len = 10environment_service_characs[0]user_desc_max_len = 10environment_service_characs[0]uuidtype = AT_BLE_UUID_128memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16)environment_service_characs[0]properties = AT_BLE_CHAR_READ |AT_BLE_CHAR_NOTIFYenvironment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature valueenvironment_service_characs[0]value_permissions =(AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuidampenvironment_service_handlerNULL0environment_service_characs1)=AT_BLE_SUCCESS)printf(n Assignment 41 Failed to Initialize custom environment service)

                                                                  ATBTLC1000Setting up and Handling Custom Service

                                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 39

                                                                  elseprintf(n Assignment 41 Initialize custom environment service)

                                                                  4 Declare and implement the following GATT event callback functioncustom_char_changed_app_event in startup_templatec file If a client (central) enablesnotifications for a server the server (peripheral) receives an AT_BLE_CHARACTERISTIC_CHANGEDevent and this event callback is called Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

                                                                  5 Declare and implement the following custom_notification_confirmation_handlerfunction in startup_templatec file Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param)at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )paramif (event_param-gtstatus == AT_BLE_SUCCESS)printf(n Assignment 41Notification Successfully sent over the air) else printf(n Assignment 41Sending Notification over the air failed)return AT_BLE_SUCCESS

                                                                  6 Declare the following GATT server callback structure in startup_templatec file Thisassignment uses two GATT callbacksstatic const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handlercharacteristic_changed = custom_char_changed_app_event

                                                                  7 Add the following register_gatt_server_callbacks function in startup_templatec toregister GATT server callback for notification confirmation event Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks)ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACKBLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle)if (ble_status = true)printf(nError when Registering ATBTLC1000 callbacks)

                                                                  8 Add custom_environment_service_init and register_gatt_server_callbacksfunction calls prior to start advertisement in the application main routine to initialize custom serviceand to register the GATT server callbacksint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()

                                                                  ATBTLC1000Setting up and Handling Custom Service

                                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 40

                                                                  endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks() Custom service init custom_environment_service_init ( ) Register Gatt server callbacks register_gatt_server_callbacks ( ) Start Advertising process start_advertisement()while(true)ble_event_task()

                                                                  9 Click to save the project ltCtrl+Sgt

                                                                  10 Compile the project by pressing button ltF7gt11 Verify that no build error appears in the Atmel Studio output window

                                                                  Figure 5-3 Atmel Studio Output Window

                                                                  12 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt13 Open the ldquoMicrochip SmartConnectrdquo application on Android or iOS device14 Connect and pair to the peripheral (pass key 123456)15 Custom service must now be visible after pairing with peripheral under Microchip SmartConnect

                                                                  application

                                                                  ATBTLC1000Setting up and Handling Custom Service

                                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 41

                                                                  Figure 5-4 Service List in Microchip SmartConnect Application

                                                                  Note  Custom service is displayed as unknown service in the above figure as this service is not aSIG-defined service

                                                                  Figure 5-5 General Information

                                                                  16 Serial terminal client must display the following Log output

                                                                  ATBTLC1000Setting up and Handling Custom Service

                                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 42

                                                                  Figure 5-6 Log Output Window

                                                                  52 Updating the Temperature CharacteristicIn the previous assignment the custom Temperature characteristic is defined with a notify attribute Thistype of attribute requires notification to be sent to central when a new characteristic value is availableThe update of any ldquonotifyrdquo characteristic value is based on following interaction between the Host MCUand the ATBTLC1000Figure 5-7 Characteristic Notification

                                                                  521 Setting a Characteristic Value ( at_ble_characteristic_value_set)Prototype ndashat_ble_status_t at_ble_characteristic_value_setat_ble_handle_t handleuint8_t valueuint16_t len)

                                                                  Description ndash Sets a characteristic value in ATBTLC1000 memory

                                                                  Parameters ndash

                                                                  ATBTLC1000Setting up and Handling Custom Service

                                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 43

                                                                  bull handle [inout] ndash Pointer to Characteristic handle to be changedbull value [in] ndash New valuebull len [in] ndash Value length in bytes

                                                                  Return ndash Execution Status

                                                                  522 Sending a Notification (at_ble_notification_send)Prototype ndashat_ble_status_t at_ble_notification_send(at_ble_handle_t conn_handleat_ble_handle_t attr_handle)

                                                                  Description ndash Sends a Notification

                                                                  Parameters ndash

                                                                  bull conn_handle[in] ndash handle of the connection to be notifiedbull attr_handle [in] ndash handle of the attribute originating the notification

                                                                  Return ndash Execution Status

                                                                  523 Sending Temperature Information Once in Every 10 Seconds to Central1 Modify the following ldquotimer_callback_fnrdquo callback function from the startup_templatec

                                                                  filestatic void timer_callback_fn(void)timer_flag = true

                                                                  2 hw_timer_init()in main routine of startup_templatec initializes the hardware timer3 If a client (Central) enables the notifications for a server the server (Peripheral) receives an

                                                                  AT_BLE_CHARACTERISTIC_CHANGED event callback then start the periodic 10 second timer forsending the notification Add the following code in previously definedcustom_char_changed_app_event function Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))timer_flag = falsehw_timer_start(10)printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

                                                                  4 Declare the following Temperature_value global variable in startup_templatec staticuint8_t Temperature_value = 25 as static

                                                                  5 Add the following send_temperature_notification function in startup_templatec tosend temperature every 10 seconds Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++

                                                                  ATBTLC1000Setting up and Handling Custom Service

                                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 44

                                                                  if(Temperature_value gt 75)Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set(environment_service_characs[0]char_val_handle(uint8_t )ampTemperature_valuesizeof(Temperature_value))ble_status = at_ble_notification_send(0environment_service_characs[0]char_val_handle)if(ble_status = AT_BLE_SUCCESS)printf(fail to send temperature update notification )

                                                                  6 Add the following code in main routine to send temperature data every 10 secondswhile (1) ble_event_task()if(connected_flag == true ampamp timer_flag == truetimer_flag = falsesend_temperature_notification()

                                                                  7 Click to save the project ltCtrl+Sgt

                                                                  8 Compile the project by pressing the button ltF7gt9 Verify that no build error appears in Atmel Studio output window

                                                                  Figure 5-8 Atmel Studio Output Window

                                                                  10 Click to program the project binary on the L21 Xplained XSTK11 Open ldquoMicrochip SmartConnectrdquo Application on Android or iOS device12 Connect and pair to the peripheral (pass key 123456)13 Click NOTIFY to start the notification14 Temperature information in HEX values must be displayed in Microchip SmartConnect application

                                                                  ATBTLC1000Setting up and Handling Custom Service

                                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 45

                                                                  Figure 5-9 Notification Window

                                                                  15 Serial terminal must display the following log outputFigure 5-10 Log Output Window

                                                                  ATBTLC1000Setting up and Handling Custom Service

                                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 46

                                                                  6 Appendix A Software Solution - Pre-Defined SvcThe following is the code implementation for handling of pre-defined service done in 4 SettingHandlingof Pre-Defined Service

                                                                  - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehinclude device_infoh

                                                                  volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false Services handlers dis_gatt_service_handler_t dis_service_handler

                                                                  static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

                                                                  void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                                                                  Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                                                                  Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                                                                  static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                                                                  Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void) Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks)

                                                                  ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

                                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 47

                                                                  ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                                                  timer callback function static void timer_callback_fn(void) Add timer callback functionality here

                                                                  void button_cb(void) Add button callback functionality here

                                                                  int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                                                                  Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                                                                  DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks()

                                                                  Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service) dis_init_service(ampdis_service_handler) Define the primary service in the GATT server database if((dis_primary_service_define(ampdis_service_handler)) = AT_BLE_SUCCESS) printf(Device Information Service definition failed)

                                                                  Start Advertising process start_advertisement() while(true) ble_event_task()

                                                                  ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

                                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 48

                                                                  7 Appendix B Software Solution - Custom ServiceThe following is the code implementation for handling of pre-defined service done in 5 Setting up andHandling Custom Service

                                                                  - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templateh

                                                                  volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false

                                                                  static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

                                                                  define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0

                                                                  define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

                                                                  Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

                                                                  void custom_environment_service_init(void) at_ble_uuid_t environment_service_uuid uint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUID uint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128 memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperature environment_service_characs[0]user_desc_len = 10 environment_service_characs[0]user_desc_max_len = 10 environment_service_characs[0]uuidtype = AT_BLE_UUID_128 memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16) environment_service_characs[0]properties = AT_BLE_CHAR_READ | AT_BLE_CHAR_NOTIFY environment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature value environment_service_characs[0]value_permissions = (AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuid ampenvironment_service_handlerNULL0 environment_service_characs1)=AT_BLE_SUCCESS) printf(n Assignment 41 Failed to Initialize custom environment service) else printf(n Assignment 41 Initialize custom environment service)

                                                                  Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param) at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )param if (event_param-gtstatus == AT_BLE_SUCCESS) printf(n Assignment 41Notification Successfully sent over the air)

                                                                  ATBTLC1000Appendix B Software Solution - Custom Service

                                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 49

                                                                  else printf(n Assignment 41Sending Notification over the air failed) return AT_BLE_SUCCESS

                                                                  static at_ble_status_t custom_char_changed_app_event(void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle -gt char_new_value[0])) timer_flag = false hw_timer_start(10) printf(n Assignment 41Characteristic changed event) return AT_BLE_SUCCESS

                                                                  static const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handler characteristic_changed = custom_char_changed_app_event

                                                                  Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                                                  void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                                                                  Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                                                                  Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                                                                  static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                                                                  Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void)

                                                                  ATBTLC1000Appendix B Software Solution - Custom Service

                                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 50

                                                                  Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                                                  timer callback function static void timer_callback_fn(void) Add timer callback functionality here timer_flag = true

                                                                  void button_cb(void) Add button callback functionality here

                                                                  static uint8_t Temperature_value = 25

                                                                  Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++ if(Temperature_value gt 75) Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set( environment_service_characs[0]char_val_handle (uint8_t )ampTemperature_value sizeof(Temperature_value)) ble_status = at_ble_notification_send(0 environment_service_characs[0]char_val_handle) if(ble_status = AT_BLE_SUCCESS) printf(fail to send temperature update notification )

                                                                  int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                                                                  Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                                                                  DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register Gap ATBTLC1000 Callbacks register_btlc1000_callbacks()

                                                                  Custom service init custom_environment_service_init()

                                                                  ATBTLC1000Appendix B Software Solution - Custom Service

                                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 51

                                                                  Register Gatt server callback register_gatt_server_callbacks()

                                                                  Start Advertising process start_advertisement() while(true) ble_event_task() if(connected_flag == true ampamp timer_flag == true) timer_flag = false send_temperature_notification()

                                                                  ATBTLC1000Appendix B Software Solution - Custom Service

                                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 52

                                                                  8 Document Revision HistoryRev B - 42018

                                                                  Section Changes

                                                                  Document Revised contents to match various Bluetooth Low Energy standard versions

                                                                  Rev A - 122017

                                                                  Section Changes

                                                                  Document Initial release

                                                                  ATBTLC1000Document Revision History

                                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 53

                                                                  The Microchip Web Site

                                                                  Microchip provides online support via our web site at httpwwwmicrochipcom This web site is used asa means to make files and information easily available to customers Accessible by using your favoriteInternet browser the web site contains the following information

                                                                  bull Product Support ndash Data sheets and errata application notes and sample programs designresources userrsquos guides and hardware support documents latest software releases and archivedsoftware

                                                                  bull General Technical Support ndash Frequently Asked Questions (FAQ) technical support requestsonline discussion groups Microchip consultant program member listing

                                                                  bull Business of Microchip ndash Product selector and ordering guides latest Microchip press releaseslisting of seminars and events listings of Microchip sales offices distributors and factoryrepresentatives

                                                                  Customer Change Notification Service

                                                                  Microchiprsquos customer notification service helps keep customers current on Microchip productsSubscribers will receive e-mail notification whenever there are changes updates revisions or erratarelated to a specified product family or development tool of interest

                                                                  To register access the Microchip web site at httpwwwmicrochipcom Under ldquoSupportrdquo click onldquoCustomer Change Notificationrdquo and follow the registration instructions

                                                                  Customer Support

                                                                  Users of Microchip products can receive assistance through several channels

                                                                  bull Distributor or Representativebull Local Sales Officebull Field Application Engineer (FAE)bull Technical Support

                                                                  Customers should contact their distributor representative or Field Application Engineer (FAE) for supportLocal sales offices are also available to help customers A listing of sales offices and locations is includedin the back of this document

                                                                  Technical support is available through the web site at httpwwwmicrochipcomsupport

                                                                  Microchip Devices Code Protection Feature

                                                                  Note the following details of the code protection feature on Microchip devices

                                                                  bull Microchip products meet the specification contained in their particular Microchip Data Sheetbull Microchip believes that its family of products is one of the most secure families of its kind on the

                                                                  market today when used in the intended manner and under normal conditionsbull There are dishonest and possibly illegal methods used to breach the code protection feature All of

                                                                  these methods to our knowledge require using the Microchip products in a manner outside theoperating specifications contained in Microchiprsquos Data Sheets Most likely the person doing so isengaged in theft of intellectual property

                                                                  bull Microchip is willing to work with the customer who is concerned about the integrity of their code

                                                                  ATBTLC1000

                                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 54

                                                                  bull Neither Microchip nor any other semiconductor manufacturer can guarantee the security of theircode Code protection does not mean that we are guaranteeing the product as ldquounbreakablerdquo

                                                                  Code protection is constantly evolving We at Microchip are committed to continuously improving thecode protection features of our products Attempts to break Microchiprsquos code protection feature may be aviolation of the Digital Millennium Copyright Act If such acts allow unauthorized access to your softwareor other copyrighted work you may have a right to sue for relief under that Act

                                                                  Legal Notice

                                                                  Information contained in this publication regarding device applications and the like is provided only foryour convenience and may be superseded by updates It is your responsibility to ensure that yourapplication meets with your specifications MICROCHIP MAKES NO REPRESENTATIONS ORWARRANTIES OF ANY KIND WHETHER EXPRESS OR IMPLIED WRITTEN OR ORAL STATUTORYOR OTHERWISE RELATED TO THE INFORMATION INCLUDING BUT NOT LIMITED TO ITSCONDITION QUALITY PERFORMANCE MERCHANTABILITY OR FITNESS FOR PURPOSEMicrochip disclaims all liability arising from this information and its use Use of Microchip devices in lifesupport andor safety applications is entirely at the buyerrsquos risk and the buyer agrees to defendindemnify and hold harmless Microchip from any and all damages claims suits or expenses resultingfrom such use No licenses are conveyed implicitly or otherwise under any Microchip intellectualproperty rights unless otherwise stated

                                                                  Trademarks

                                                                  The Microchip name and logo the Microchip logo AnyRate AVR AVR logo AVR Freaks BeaconThingsBitCloud CryptoMemory CryptoRF dsPIC FlashFlex flexPWR Heldo JukeBlox KeeLoq KeeLoq logoKleer LANCheck LINK MD maXStylus maXTouch MediaLB megaAVR MOST MOST logo MPLABOptoLyzer PIC picoPower PICSTART PIC32 logo Prochip Designer QTouch RightTouch SAM-BASpyNIC SST SST Logo SuperFlash tinyAVR UNIO and XMEGA are registered trademarks ofMicrochip Technology Incorporated in the USA and other countries

                                                                  ClockWorks The Embedded Control Solutions Company EtherSynch Hyper Speed Control HyperLightLoad IntelliMOS mTouch Precision Edge and Quiet-Wire are registered trademarks of MicrochipTechnology Incorporated in the USA

                                                                  Adjacent Key Suppression AKS Analog-for-the-Digital Age Any Capacitor AnyIn AnyOut BodyComchipKIT chipKIT logo CodeGuard CryptoAuthentication CryptoCompanion CryptoControllerdsPICDEM dsPICDEMnet Dynamic Average Matching DAM ECAN EtherGREEN In-Circuit SerialProgramming ICSP Inter-Chip Connectivity JitterBlocker KleerNet KleerNet logo Mindi MiWimotorBench MPASM MPF MPLAB Certified logo MPLIB MPLINK MultiTRAK NetDetach OmniscientCode Generation PICDEM PICDEMnet PICkit PICtail PureSilicon QMatrix RightTouch logo REALICE Ripple Blocker SAM-ICE Serial Quad IO SMART-IS SQI SuperSwitcher SuperSwitcher II TotalEndurance TSHARC USBCheck VariSense ViewSpan WiperLock Wireless DNA and ZENA aretrademarks of Microchip Technology Incorporated in the USA and other countries

                                                                  SQTP is a service mark of Microchip Technology Incorporated in the USA

                                                                  Silicon Storage Technology is a registered trademark of Microchip Technology Inc in other countries

                                                                  GestIC is a registered trademark of Microchip Technology Germany II GmbH amp Co KG a subsidiary ofMicrochip Technology Inc in other countries

                                                                  All other trademarks mentioned herein are property of their respective companies

                                                                  ATBTLC1000

                                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 55

                                                                  copy 2018 Microchip Technology Incorporated Printed in the USA All Rights Reserved

                                                                  ISBN 978-1-5224-2921-0

                                                                  Quality Management System Certified by DNV

                                                                  ISOTS 16949Microchip received ISOTS-169492009 certification for its worldwide headquarters design and waferfabrication facilities in Chandler and Tempe Arizona Gresham Oregon and design centers in Californiaand India The Companyrsquos quality system processes and procedures are for its PICreg MCUs and dsPICreg

                                                                  DSCs KEELOQreg code hopping devices Serial EEPROMs microperipherals nonvolatile memory andanalog products In addition Microchiprsquos quality system for the design and manufacture of developmentsystems is ISO 90012000 certified

                                                                  ATBTLC1000

                                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 56

                                                                  AMERICAS ASIAPACIFIC ASIAPACIFIC EUROPECorporate Office2355 West Chandler BlvdChandler AZ 85224-6199Tel 480-792-7200Fax 480-792-7277Technical SupporthttpwwwmicrochipcomsupportWeb AddresswwwmicrochipcomAtlantaDuluth GATel 678-957-9614Fax 678-957-1455Austin TXTel 512-257-3370BostonWestborough MATel 774-760-0087Fax 774-760-0088ChicagoItasca ILTel 630-285-0071Fax 630-285-0075DallasAddison TXTel 972-818-7423Fax 972-818-2924DetroitNovi MITel 248-848-4000Houston TXTel 281-894-5983IndianapolisNoblesville INTel 317-773-8323Fax 317-773-5453Tel 317-536-2380Los AngelesMission Viejo CATel 949-462-9523Fax 949-462-9608Tel 951-273-7800Raleigh NCTel 919-844-7510New York NYTel 631-435-6000San Jose CATel 408-735-9110Tel 408-436-4270Canada - TorontoTel 905-695-1980Fax 905-695-2078

                                                                  Australia - SydneyTel 61-2-9868-6733China - BeijingTel 86-10-8569-7000China - ChengduTel 86-28-8665-5511China - ChongqingTel 86-23-8980-9588China - DongguanTel 86-769-8702-9880China - GuangzhouTel 86-20-8755-8029China - HangzhouTel 86-571-8792-8115China - Hong Kong SARTel 852-2943-5100China - NanjingTel 86-25-8473-2460China - QingdaoTel 86-532-8502-7355China - ShanghaiTel 86-21-3326-8000China - ShenyangTel 86-24-2334-2829China - ShenzhenTel 86-755-8864-2200China - SuzhouTel 86-186-6233-1526China - WuhanTel 86-27-5980-5300China - XianTel 86-29-8833-7252China - XiamenTel 86-592-2388138China - ZhuhaiTel 86-756-3210040

                                                                  India - BangaloreTel 91-80-3090-4444India - New DelhiTel 91-11-4160-8631India - PuneTel 91-20-4121-0141Japan - OsakaTel 81-6-6152-7160Japan - TokyoTel 81-3-6880- 3770Korea - DaeguTel 82-53-744-4301Korea - SeoulTel 82-2-554-7200Malaysia - Kuala LumpurTel 60-3-7651-7906Malaysia - PenangTel 60-4-227-8870Philippines - ManilaTel 63-2-634-9065SingaporeTel 65-6334-8870Taiwan - Hsin ChuTel 886-3-577-8366Taiwan - KaohsiungTel 886-7-213-7830Taiwan - TaipeiTel 886-2-2508-8600Thailand - BangkokTel 66-2-694-1351Vietnam - Ho Chi MinhTel 84-28-5448-2100

                                                                  Austria - WelsTel 43-7242-2244-39Fax 43-7242-2244-393Denmark - CopenhagenTel 45-4450-2828Fax 45-4485-2829Finland - EspooTel 358-9-4520-820France - ParisTel 33-1-69-53-63-20Fax 33-1-69-30-90-79Germany - GarchingTel 49-8931-9700Germany - HaanTel 49-2129-3766400Germany - HeilbronnTel 49-7131-67-3636Germany - KarlsruheTel 49-721-625370Germany - MunichTel 49-89-627-144-0Fax 49-89-627-144-44Germany - RosenheimTel 49-8031-354-560Israel - RarsquoananaTel 972-9-744-7705Italy - MilanTel 39-0331-742611Fax 39-0331-466781Italy - PadovaTel 39-049-7625286Netherlands - DrunenTel 31-416-690399Fax 31-416-690340Norway - TrondheimTel 47-7289-7561Poland - WarsawTel 48-22-3325737Romania - BucharestTel 40-21-407-87-50Spain - MadridTel 34-91-708-08-90Fax 34-91-708-08-91Sweden - GothenbergTel 46-31-704-60-40Sweden - StockholmTel 46-8-5090-4654UK - WokinghamTel 44-118-921-5800Fax 44-118-921-5820

                                                                  Worldwide Sales and Service

                                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 57

                                                                  • Introduction
                                                                  • Table of Contents
                                                                  • 1 Getting Started
                                                                    • 11 Software Prerequisites
                                                                      • 111 Installation Steps of Atmel Studio 7
                                                                        • 12 Software Setup
                                                                          • 121 Installation of Microchip SmartConnect application on a Mobile device
                                                                            • 13 ATBTLC1000 Embedded Firmware
                                                                            • 14 ATBTLC1000 Host Software API
                                                                            • 15 Hardware Prerequisites
                                                                              • 151 SMARTtrade SAM L21 Xplained Pro
                                                                              • 152 ATBTLC1000ZR Xplained Pro Extension board
                                                                                • 16 Hardware Setup
                                                                                  • 2 Creating the Project and Initializing
                                                                                    • 21 Creating Project from ASF
                                                                                    • 22 Configuring ASF for ATBTLC1000-ZR
                                                                                    • 23 Compiling and Testing the Project
                                                                                      • 3 Establishing Connection with Central Device
                                                                                        • 31 Configuring and Starting the Advertisement Process
                                                                                          • 311 Flags (AD Type 0x00)
                                                                                          • 312 Available Service UUID (AD Types 0x02 to 0x07)
                                                                                          • 313 Device Name (AD Types 0x08 to 0x09)
                                                                                            • 3131 Setting the Advertisement Payload (ble_advertisement_data_set)
                                                                                            • 3132 Starting the Advertisement Process (at_ble_adv_start)
                                                                                              • 314 Advertisement Process
                                                                                                • 3141 Starting the Advertisement Process
                                                                                                    • 32 Managing GAP events
                                                                                                      • 321 Handling of Connected and Disconnected GAP Events
                                                                                                          • 4 SettingHandling of Pre-Defined Service
                                                                                                            • 41 Adding Device Info Service Component from ASF Wizard to Project
                                                                                                            • 42 Configuring and Loading Device Information Service
                                                                                                              • 421 Procedure to Configure and Load Device Info Service
                                                                                                                  • 5 Setting up and Handling Custom Service
                                                                                                                    • 51 Configuring and Loading the Custom Environment Service
                                                                                                                      • 511 Procedure to Configure and Load Custom Environment Service
                                                                                                                        • 52 Updating the Temperature Characteristic
                                                                                                                          • 521 Setting a Characteristic Value ( at_ble_characteristic_value_set)
                                                                                                                          • 522 Sending a Notification (at_ble_notification_send)
                                                                                                                          • 523 Sending Temperature Information Once in Every 10 Seconds to Central
                                                                                                                              • 6 Appendix A Software Solution - Pre-Defined Svc
                                                                                                                              • 7 Appendix B Software Solution - Custom Service
                                                                                                                              • 8 Document Revision History
                                                                                                                              • The Microchip Web Site
                                                                                                                              • Customer Change Notification Service
                                                                                                                              • Customer Support
                                                                                                                              • Microchip Devices Code Protection Feature
                                                                                                                              • Legal Notice
                                                                                                                              • Trademarks
                                                                                                                              • Quality Management System Certified by DNV
                                                                                                                              • Worldwide Sales and Service

                                                                    bull device_info_serv [Inout] pointer to device info GATT description handler to beupdated

                                                                    Return None

                                                                    Here is a picture of GATT device info service descriptor definition in Host memory

                                                                    device_info_serv-gtserv_handle = 0device_info_serv-gtserv_uuidtype = AT_BLE_UUID_16device_info_serv-gtserv_uuiduuid[0] = (uint8_t) DIS_SERVICE_UUIDdevice_info_serv-gtserv_uuiduuid[1] = (uint8_t) (DIS_SERVICE_UUID gtgt 8)Characteristic Info for Manufacturer Name Stringdevice_info_serv-gtserv_chars[0]char_val_handle = 0 handle stored here device_info_serv-gtserv_chars[0]uuidtype = AT_BLE_UUID_16device_info_serv-gtserv_chars[0]uuiduuid[0] = (uint8_t) IS_CHAR_MANUFACTURER_NAME_UUID UUID Manufacturer Name String device_info_serv-gtserv_chars[0]uuiduuid[1] = (uint8_t) (DIS_CHAR_MANUFACTURER_NAME_UUID gtgt 8) UUID Manufacturer Name String device_info_serv-gtserv_chars[0]properties = AT_BLE_CHAR_READ Properties memcpy(char_valuemanufacturer_nameDEFAULT_MANUFACTURER_NAMEDIS_CHAR_MANUFACTURER_NAME_INIT_LEN)device_info_serv-gtserv_chars[0]init_value = char_valuemanufacturer_namedevice_info_serv-gtserv_chars[0]value_init_len = DIS_CHAR_MANUFACTURER_NAME_INIT_LENdevice_info_serv-gtserv_chars[0]value_max_len = DIS_CHAR_MANUFACTURER_NAME_MAX_LENif BLE_PAIR_ENABLEdevice_info_serv-gtserv_chars[0]value_permissions = AT_BLE_ATTR_READABLE_REQ_AUTHN_NO_AUTHR permissions elsedevice_info_serv-gtserv_chars[0]value_permissions = AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR permissions endifdevice_info_serv-gtserv_chars[0]user_desc = NULL user defined name device_info_serv-gtserv_chars[0]user_desc_len = 0device_info_serv-gtserv_chars[0]user_desc_max_len = 0device_info_serv-gtserv_chars[0]user_desc_permissions = AT_BLE_ATTR_NO_PERMISSIONS user description permissionsdevice_info_serv-gtserv_chars[0]client_config_permissions = AT_BLE_ATTR_NO_PERMISSIONS client config permissionsdevice_info_serm hdsv-gtserv_chars[0]server_config_permissions = AT_BLE_ATTR_NO_PERMISSIONS server config permissionsdevice_info_serv-gtserv_chars[0]user_desc_handle = 0 user desc handlesdevice_info_serv-gtserv_chars[0]client_config_handle = 0 client config handlesdevice_info_serv-gtserv_chars[0]server_config_handle = 0 server config handlesdevice_info_serv-gtserv_chars[0]presentation_format = NULL presentation format

                                                                    Note  In case of custom service the above definition initialization must be taken care of by thedeveloper

                                                                    421 Procedure to Configure and Load Device Info Service1 Include device info service header file (device_infoh) at the beginning of

                                                                    startup_templatec fileinclude ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehinclude device_infoh

                                                                    2 Define a device info service handler as global in startup_templatec file Serviceshandlers dis_gatt_service_handler_t dis_service_handler

                                                                    ATBTLC1000SettingHandling of Pre-Defined Service

                                                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 34

                                                                    3 Add dis_init_service and at_ble_primary_service_define functions as called abovethe advertisement start in main routine Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service)dis_init_service (ampdis_service_handler) Define the primary service in the GATT server database if ((dis_primary_service_define (ampdis_service_handler)) = AT_BLE_SUCCESS)printf(Device Information Service definition failed) Start Advertising process start_advertisement()

                                                                    4 Click to save the project ltCtrl+Sgt and compile the project by pressing button ltF7gt5 Verify that no build error appears in Atmel Studio output window

                                                                    Figure 4-7 Atmel Studio Output Window

                                                                    6 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt7 Open ldquoMicrochip SmartConnectrdquo application on Android or iOS device8 Press ltStart Scangt button and connect to peripheral

                                                                    Note  The device name is a characteristic and contains the name of the device This device namecan be read by the central device to know the name of the device in order to differentiate thedevices This is being set using at_ble_device_name_set()API The device name is set bydefault when ble_device_init is called and the value is pre-defined using BLE_DEVICE_NAMEThe device name can also be sent as part of advertisement payload to be same as the oneconfigured in at_ble_adv_data_set() API It is the responsibility of users to keep the devicename set in advertisement payload the same as that configured inat_ble_device_name_set()

                                                                    9 The Service must now be visible after pairing with peripheral under Microchip SmartConnectapplication

                                                                    ATBTLC1000SettingHandling of Pre-Defined Service

                                                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 35

                                                                    Figure 4-8 Service List in Microchip SmartConnect Application

                                                                    Note  If the pairing of ATBTLC1000 with Microchip Smart connect is not successful then removethe pairing information from mobile by selecting ldquoForget Devicerdquo from the mobile settings Thereason for this is that the mobile app stores the previous pairing information but the ATBTLC1000device lost the previous pairing information due to RESET since it was stored on temporary storage(RAM)

                                                                    10 The serial terminal must display the following log output windowFigure 4-9 Console Log Window

                                                                    ATBTLC1000SettingHandling of Pre-Defined Service

                                                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 36

                                                                    5 Setting up and Handling Custom ServiceThe previous assignment describes the handling of Bluetooth Low Energy SIG defined device infoservice which is the predefined service available in ASF component This assignment describes thecustom service So the service initialization needs to be implemented In the context of customizedenvironment service the following service description is pushed in ATBTLC1000 memory

                                                                    Figure 5-1 Custom Service

                                                                    Custom Environment Service Description

                                                                    bull UUID type ndash Custom UUID (128-bit)bull UUID ndash 1bc5d5a5-0200-a687-e511-3639c1ba5af0

                                                                    Characteristic 0 (Temperature)

                                                                    bull User Description ndash Temperaturebull UUID type ndash Custom UUID (128-bit)bull UUID ndash 1bc5d5a5-0200-a687-e511-3639d8ba5af0bull Properties ndash Read Notifybull Value permission ndash No authorization requiredbull Client config permission ndash No permissionbull Server config permission ndash No permission

                                                                    Note  In this definition UUIDs are generated randomly Custom servicescharacteristics are free to useany 128-bit UUID less than the base UUID There is no reserved space for vendors to use 16-bit or 32-bitUUIDs

                                                                    With this definition any temperature change is notified to the central The notify mechanism allows thecentral to know when the data changes When notify property of the Client Characteristic ConfigurationDescriptor is enabled by the central and the device writes the new value then this updated value isautomatically sent to the central through a notification The central is not required to send readcharacteristic commands explicitly to the peripheral (GATT server)

                                                                    To setup and handle the custom environment service in ATBTLC1000 module the following steps areadded to the Host MCU application

                                                                    bull Configure and load the custom servicebull Update Temperature characteristic and notify to the central devicebull Receive and handle notification from the Host device

                                                                    ATBTLC1000Setting up and Handling Custom Service

                                                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 37

                                                                    Figure 5-2 Custom Service Flowchart

                                                                    51 Configuring and Loading the Custom Environment ServiceThe ATBTLC1000 Host driver provides the following set of GATT functions that allows it to push andupdate the service descriptions in the ATBTLC1000 SRAM memory

                                                                    Note  Before starting this assignment be sure to follow the steps mentioned in 2 Creating the Projectand Initializing and 3 Establishing Connection with Central Device

                                                                    Prototype ndashat_ble_status_t at_ble_primary_service_define(at_ble_uuid_t uuidat_ble_handle_t service_handleat_ble_included_service_t included_service_listuint16_t included_service_countat_ble_characteristic_t charactristic_listuint16_t charactristic_count)

                                                                    Description ndash Defines a new primary service along with its included services and characteristics inATBTLC1000 module

                                                                    Parameters

                                                                    bull Uuid [In] ndash primary service UUIDbull service_handle [Out] ndash service handle is returned herebull included_service_list [In] ndash array of included service referencesbull included_service_count [In] ndash number of elements in included_service_listbull charactristic_list [InOut] ndash an array of characteristics included in the service this array

                                                                    is update with respective characteristics handlesbull charactristic_count[In] ndash number of elements in charactristic_list

                                                                    ATBTLC1000Setting up and Handling Custom Service

                                                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 38

                                                                    Return ndash Execution Status

                                                                    bull Characteristics ndashndash Characteristics definition is done through specific array of following

                                                                    ldquoat_ble_characteristic_trdquo structure instancestypedef structat_ble_handle_t char_val_handle Handler (returned during service initialisation)at_ble_uuid_t uuid Characteristic UUID (type and value)at_ble_char_properties_t propertiesCharac Properties (read write notify)uint8_t init_value initial valueuint16_t value_init_len initial value lengthuint16_t value_max_len value max lengthat_ble_attr_permissions_t value_permissions access authorization and authenticationuint8_t user_desc User descriptionuint16_t user_desc_len User description lengthuint16_t user_desc_max_len User description max lengthat_ble_char_presentation_t presentation_format Presentation formatat_ble_attr_permissions_t user_desc_permissions User description permissionat_ble_attr_permissions_t client_config_permissions client permissionat_ble_attr_permissions_t server_config_permissions server permissionat_ble_handle_t user_desc_handle description handlerat_ble_handle_t client_config_handle Client config handlerat_ble_handle_t server_config_handle Server config handler at_ble_characteristic_t

                                                                    511 Procedure to Configure and Load Custom Environment Service1 Define the following service UUID and characteristic UUID in startup_templatec file

                                                                    define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

                                                                    2 Define the following environment service handler and characteristics variable as global instartup_templatec file Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

                                                                    3 Add the following service initialization function custom_environment_service_init instartup_templatecvoid custom_environment_service_init(void) at_ble_uuid_t environment_service_uuiduint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUIDuint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperatureenvironment_service_characs[0]user_desc_len = 10environment_service_characs[0]user_desc_max_len = 10environment_service_characs[0]uuidtype = AT_BLE_UUID_128memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16)environment_service_characs[0]properties = AT_BLE_CHAR_READ |AT_BLE_CHAR_NOTIFYenvironment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature valueenvironment_service_characs[0]value_permissions =(AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuidampenvironment_service_handlerNULL0environment_service_characs1)=AT_BLE_SUCCESS)printf(n Assignment 41 Failed to Initialize custom environment service)

                                                                    ATBTLC1000Setting up and Handling Custom Service

                                                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 39

                                                                    elseprintf(n Assignment 41 Initialize custom environment service)

                                                                    4 Declare and implement the following GATT event callback functioncustom_char_changed_app_event in startup_templatec file If a client (central) enablesnotifications for a server the server (peripheral) receives an AT_BLE_CHARACTERISTIC_CHANGEDevent and this event callback is called Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

                                                                    5 Declare and implement the following custom_notification_confirmation_handlerfunction in startup_templatec file Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param)at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )paramif (event_param-gtstatus == AT_BLE_SUCCESS)printf(n Assignment 41Notification Successfully sent over the air) else printf(n Assignment 41Sending Notification over the air failed)return AT_BLE_SUCCESS

                                                                    6 Declare the following GATT server callback structure in startup_templatec file Thisassignment uses two GATT callbacksstatic const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handlercharacteristic_changed = custom_char_changed_app_event

                                                                    7 Add the following register_gatt_server_callbacks function in startup_templatec toregister GATT server callback for notification confirmation event Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks)ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACKBLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle)if (ble_status = true)printf(nError when Registering ATBTLC1000 callbacks)

                                                                    8 Add custom_environment_service_init and register_gatt_server_callbacksfunction calls prior to start advertisement in the application main routine to initialize custom serviceand to register the GATT server callbacksint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()

                                                                    ATBTLC1000Setting up and Handling Custom Service

                                                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 40

                                                                    endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks() Custom service init custom_environment_service_init ( ) Register Gatt server callbacks register_gatt_server_callbacks ( ) Start Advertising process start_advertisement()while(true)ble_event_task()

                                                                    9 Click to save the project ltCtrl+Sgt

                                                                    10 Compile the project by pressing button ltF7gt11 Verify that no build error appears in the Atmel Studio output window

                                                                    Figure 5-3 Atmel Studio Output Window

                                                                    12 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt13 Open the ldquoMicrochip SmartConnectrdquo application on Android or iOS device14 Connect and pair to the peripheral (pass key 123456)15 Custom service must now be visible after pairing with peripheral under Microchip SmartConnect

                                                                    application

                                                                    ATBTLC1000Setting up and Handling Custom Service

                                                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 41

                                                                    Figure 5-4 Service List in Microchip SmartConnect Application

                                                                    Note  Custom service is displayed as unknown service in the above figure as this service is not aSIG-defined service

                                                                    Figure 5-5 General Information

                                                                    16 Serial terminal client must display the following Log output

                                                                    ATBTLC1000Setting up and Handling Custom Service

                                                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 42

                                                                    Figure 5-6 Log Output Window

                                                                    52 Updating the Temperature CharacteristicIn the previous assignment the custom Temperature characteristic is defined with a notify attribute Thistype of attribute requires notification to be sent to central when a new characteristic value is availableThe update of any ldquonotifyrdquo characteristic value is based on following interaction between the Host MCUand the ATBTLC1000Figure 5-7 Characteristic Notification

                                                                    521 Setting a Characteristic Value ( at_ble_characteristic_value_set)Prototype ndashat_ble_status_t at_ble_characteristic_value_setat_ble_handle_t handleuint8_t valueuint16_t len)

                                                                    Description ndash Sets a characteristic value in ATBTLC1000 memory

                                                                    Parameters ndash

                                                                    ATBTLC1000Setting up and Handling Custom Service

                                                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 43

                                                                    bull handle [inout] ndash Pointer to Characteristic handle to be changedbull value [in] ndash New valuebull len [in] ndash Value length in bytes

                                                                    Return ndash Execution Status

                                                                    522 Sending a Notification (at_ble_notification_send)Prototype ndashat_ble_status_t at_ble_notification_send(at_ble_handle_t conn_handleat_ble_handle_t attr_handle)

                                                                    Description ndash Sends a Notification

                                                                    Parameters ndash

                                                                    bull conn_handle[in] ndash handle of the connection to be notifiedbull attr_handle [in] ndash handle of the attribute originating the notification

                                                                    Return ndash Execution Status

                                                                    523 Sending Temperature Information Once in Every 10 Seconds to Central1 Modify the following ldquotimer_callback_fnrdquo callback function from the startup_templatec

                                                                    filestatic void timer_callback_fn(void)timer_flag = true

                                                                    2 hw_timer_init()in main routine of startup_templatec initializes the hardware timer3 If a client (Central) enables the notifications for a server the server (Peripheral) receives an

                                                                    AT_BLE_CHARACTERISTIC_CHANGED event callback then start the periodic 10 second timer forsending the notification Add the following code in previously definedcustom_char_changed_app_event function Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))timer_flag = falsehw_timer_start(10)printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

                                                                    4 Declare the following Temperature_value global variable in startup_templatec staticuint8_t Temperature_value = 25 as static

                                                                    5 Add the following send_temperature_notification function in startup_templatec tosend temperature every 10 seconds Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++

                                                                    ATBTLC1000Setting up and Handling Custom Service

                                                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 44

                                                                    if(Temperature_value gt 75)Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set(environment_service_characs[0]char_val_handle(uint8_t )ampTemperature_valuesizeof(Temperature_value))ble_status = at_ble_notification_send(0environment_service_characs[0]char_val_handle)if(ble_status = AT_BLE_SUCCESS)printf(fail to send temperature update notification )

                                                                    6 Add the following code in main routine to send temperature data every 10 secondswhile (1) ble_event_task()if(connected_flag == true ampamp timer_flag == truetimer_flag = falsesend_temperature_notification()

                                                                    7 Click to save the project ltCtrl+Sgt

                                                                    8 Compile the project by pressing the button ltF7gt9 Verify that no build error appears in Atmel Studio output window

                                                                    Figure 5-8 Atmel Studio Output Window

                                                                    10 Click to program the project binary on the L21 Xplained XSTK11 Open ldquoMicrochip SmartConnectrdquo Application on Android or iOS device12 Connect and pair to the peripheral (pass key 123456)13 Click NOTIFY to start the notification14 Temperature information in HEX values must be displayed in Microchip SmartConnect application

                                                                    ATBTLC1000Setting up and Handling Custom Service

                                                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 45

                                                                    Figure 5-9 Notification Window

                                                                    15 Serial terminal must display the following log outputFigure 5-10 Log Output Window

                                                                    ATBTLC1000Setting up and Handling Custom Service

                                                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 46

                                                                    6 Appendix A Software Solution - Pre-Defined SvcThe following is the code implementation for handling of pre-defined service done in 4 SettingHandlingof Pre-Defined Service

                                                                    - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehinclude device_infoh

                                                                    volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false Services handlers dis_gatt_service_handler_t dis_service_handler

                                                                    static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

                                                                    void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                                                                    Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                                                                    Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                                                                    static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                                                                    Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void) Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks)

                                                                    ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

                                                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 47

                                                                    ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                                                    timer callback function static void timer_callback_fn(void) Add timer callback functionality here

                                                                    void button_cb(void) Add button callback functionality here

                                                                    int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                                                                    Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                                                                    DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks()

                                                                    Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service) dis_init_service(ampdis_service_handler) Define the primary service in the GATT server database if((dis_primary_service_define(ampdis_service_handler)) = AT_BLE_SUCCESS) printf(Device Information Service definition failed)

                                                                    Start Advertising process start_advertisement() while(true) ble_event_task()

                                                                    ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

                                                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 48

                                                                    7 Appendix B Software Solution - Custom ServiceThe following is the code implementation for handling of pre-defined service done in 5 Setting up andHandling Custom Service

                                                                    - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templateh

                                                                    volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false

                                                                    static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

                                                                    define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0

                                                                    define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

                                                                    Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

                                                                    void custom_environment_service_init(void) at_ble_uuid_t environment_service_uuid uint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUID uint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128 memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperature environment_service_characs[0]user_desc_len = 10 environment_service_characs[0]user_desc_max_len = 10 environment_service_characs[0]uuidtype = AT_BLE_UUID_128 memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16) environment_service_characs[0]properties = AT_BLE_CHAR_READ | AT_BLE_CHAR_NOTIFY environment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature value environment_service_characs[0]value_permissions = (AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuid ampenvironment_service_handlerNULL0 environment_service_characs1)=AT_BLE_SUCCESS) printf(n Assignment 41 Failed to Initialize custom environment service) else printf(n Assignment 41 Initialize custom environment service)

                                                                    Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param) at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )param if (event_param-gtstatus == AT_BLE_SUCCESS) printf(n Assignment 41Notification Successfully sent over the air)

                                                                    ATBTLC1000Appendix B Software Solution - Custom Service

                                                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 49

                                                                    else printf(n Assignment 41Sending Notification over the air failed) return AT_BLE_SUCCESS

                                                                    static at_ble_status_t custom_char_changed_app_event(void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle -gt char_new_value[0])) timer_flag = false hw_timer_start(10) printf(n Assignment 41Characteristic changed event) return AT_BLE_SUCCESS

                                                                    static const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handler characteristic_changed = custom_char_changed_app_event

                                                                    Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                                                    void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                                                                    Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                                                                    Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                                                                    static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                                                                    Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void)

                                                                    ATBTLC1000Appendix B Software Solution - Custom Service

                                                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 50

                                                                    Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                                                    timer callback function static void timer_callback_fn(void) Add timer callback functionality here timer_flag = true

                                                                    void button_cb(void) Add button callback functionality here

                                                                    static uint8_t Temperature_value = 25

                                                                    Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++ if(Temperature_value gt 75) Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set( environment_service_characs[0]char_val_handle (uint8_t )ampTemperature_value sizeof(Temperature_value)) ble_status = at_ble_notification_send(0 environment_service_characs[0]char_val_handle) if(ble_status = AT_BLE_SUCCESS) printf(fail to send temperature update notification )

                                                                    int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                                                                    Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                                                                    DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register Gap ATBTLC1000 Callbacks register_btlc1000_callbacks()

                                                                    Custom service init custom_environment_service_init()

                                                                    ATBTLC1000Appendix B Software Solution - Custom Service

                                                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 51

                                                                    Register Gatt server callback register_gatt_server_callbacks()

                                                                    Start Advertising process start_advertisement() while(true) ble_event_task() if(connected_flag == true ampamp timer_flag == true) timer_flag = false send_temperature_notification()

                                                                    ATBTLC1000Appendix B Software Solution - Custom Service

                                                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 52

                                                                    8 Document Revision HistoryRev B - 42018

                                                                    Section Changes

                                                                    Document Revised contents to match various Bluetooth Low Energy standard versions

                                                                    Rev A - 122017

                                                                    Section Changes

                                                                    Document Initial release

                                                                    ATBTLC1000Document Revision History

                                                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 53

                                                                    The Microchip Web Site

                                                                    Microchip provides online support via our web site at httpwwwmicrochipcom This web site is used asa means to make files and information easily available to customers Accessible by using your favoriteInternet browser the web site contains the following information

                                                                    bull Product Support ndash Data sheets and errata application notes and sample programs designresources userrsquos guides and hardware support documents latest software releases and archivedsoftware

                                                                    bull General Technical Support ndash Frequently Asked Questions (FAQ) technical support requestsonline discussion groups Microchip consultant program member listing

                                                                    bull Business of Microchip ndash Product selector and ordering guides latest Microchip press releaseslisting of seminars and events listings of Microchip sales offices distributors and factoryrepresentatives

                                                                    Customer Change Notification Service

                                                                    Microchiprsquos customer notification service helps keep customers current on Microchip productsSubscribers will receive e-mail notification whenever there are changes updates revisions or erratarelated to a specified product family or development tool of interest

                                                                    To register access the Microchip web site at httpwwwmicrochipcom Under ldquoSupportrdquo click onldquoCustomer Change Notificationrdquo and follow the registration instructions

                                                                    Customer Support

                                                                    Users of Microchip products can receive assistance through several channels

                                                                    bull Distributor or Representativebull Local Sales Officebull Field Application Engineer (FAE)bull Technical Support

                                                                    Customers should contact their distributor representative or Field Application Engineer (FAE) for supportLocal sales offices are also available to help customers A listing of sales offices and locations is includedin the back of this document

                                                                    Technical support is available through the web site at httpwwwmicrochipcomsupport

                                                                    Microchip Devices Code Protection Feature

                                                                    Note the following details of the code protection feature on Microchip devices

                                                                    bull Microchip products meet the specification contained in their particular Microchip Data Sheetbull Microchip believes that its family of products is one of the most secure families of its kind on the

                                                                    market today when used in the intended manner and under normal conditionsbull There are dishonest and possibly illegal methods used to breach the code protection feature All of

                                                                    these methods to our knowledge require using the Microchip products in a manner outside theoperating specifications contained in Microchiprsquos Data Sheets Most likely the person doing so isengaged in theft of intellectual property

                                                                    bull Microchip is willing to work with the customer who is concerned about the integrity of their code

                                                                    ATBTLC1000

                                                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 54

                                                                    bull Neither Microchip nor any other semiconductor manufacturer can guarantee the security of theircode Code protection does not mean that we are guaranteeing the product as ldquounbreakablerdquo

                                                                    Code protection is constantly evolving We at Microchip are committed to continuously improving thecode protection features of our products Attempts to break Microchiprsquos code protection feature may be aviolation of the Digital Millennium Copyright Act If such acts allow unauthorized access to your softwareor other copyrighted work you may have a right to sue for relief under that Act

                                                                    Legal Notice

                                                                    Information contained in this publication regarding device applications and the like is provided only foryour convenience and may be superseded by updates It is your responsibility to ensure that yourapplication meets with your specifications MICROCHIP MAKES NO REPRESENTATIONS ORWARRANTIES OF ANY KIND WHETHER EXPRESS OR IMPLIED WRITTEN OR ORAL STATUTORYOR OTHERWISE RELATED TO THE INFORMATION INCLUDING BUT NOT LIMITED TO ITSCONDITION QUALITY PERFORMANCE MERCHANTABILITY OR FITNESS FOR PURPOSEMicrochip disclaims all liability arising from this information and its use Use of Microchip devices in lifesupport andor safety applications is entirely at the buyerrsquos risk and the buyer agrees to defendindemnify and hold harmless Microchip from any and all damages claims suits or expenses resultingfrom such use No licenses are conveyed implicitly or otherwise under any Microchip intellectualproperty rights unless otherwise stated

                                                                    Trademarks

                                                                    The Microchip name and logo the Microchip logo AnyRate AVR AVR logo AVR Freaks BeaconThingsBitCloud CryptoMemory CryptoRF dsPIC FlashFlex flexPWR Heldo JukeBlox KeeLoq KeeLoq logoKleer LANCheck LINK MD maXStylus maXTouch MediaLB megaAVR MOST MOST logo MPLABOptoLyzer PIC picoPower PICSTART PIC32 logo Prochip Designer QTouch RightTouch SAM-BASpyNIC SST SST Logo SuperFlash tinyAVR UNIO and XMEGA are registered trademarks ofMicrochip Technology Incorporated in the USA and other countries

                                                                    ClockWorks The Embedded Control Solutions Company EtherSynch Hyper Speed Control HyperLightLoad IntelliMOS mTouch Precision Edge and Quiet-Wire are registered trademarks of MicrochipTechnology Incorporated in the USA

                                                                    Adjacent Key Suppression AKS Analog-for-the-Digital Age Any Capacitor AnyIn AnyOut BodyComchipKIT chipKIT logo CodeGuard CryptoAuthentication CryptoCompanion CryptoControllerdsPICDEM dsPICDEMnet Dynamic Average Matching DAM ECAN EtherGREEN In-Circuit SerialProgramming ICSP Inter-Chip Connectivity JitterBlocker KleerNet KleerNet logo Mindi MiWimotorBench MPASM MPF MPLAB Certified logo MPLIB MPLINK MultiTRAK NetDetach OmniscientCode Generation PICDEM PICDEMnet PICkit PICtail PureSilicon QMatrix RightTouch logo REALICE Ripple Blocker SAM-ICE Serial Quad IO SMART-IS SQI SuperSwitcher SuperSwitcher II TotalEndurance TSHARC USBCheck VariSense ViewSpan WiperLock Wireless DNA and ZENA aretrademarks of Microchip Technology Incorporated in the USA and other countries

                                                                    SQTP is a service mark of Microchip Technology Incorporated in the USA

                                                                    Silicon Storage Technology is a registered trademark of Microchip Technology Inc in other countries

                                                                    GestIC is a registered trademark of Microchip Technology Germany II GmbH amp Co KG a subsidiary ofMicrochip Technology Inc in other countries

                                                                    All other trademarks mentioned herein are property of their respective companies

                                                                    ATBTLC1000

                                                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 55

                                                                    copy 2018 Microchip Technology Incorporated Printed in the USA All Rights Reserved

                                                                    ISBN 978-1-5224-2921-0

                                                                    Quality Management System Certified by DNV

                                                                    ISOTS 16949Microchip received ISOTS-169492009 certification for its worldwide headquarters design and waferfabrication facilities in Chandler and Tempe Arizona Gresham Oregon and design centers in Californiaand India The Companyrsquos quality system processes and procedures are for its PICreg MCUs and dsPICreg

                                                                    DSCs KEELOQreg code hopping devices Serial EEPROMs microperipherals nonvolatile memory andanalog products In addition Microchiprsquos quality system for the design and manufacture of developmentsystems is ISO 90012000 certified

                                                                    ATBTLC1000

                                                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 56

                                                                    AMERICAS ASIAPACIFIC ASIAPACIFIC EUROPECorporate Office2355 West Chandler BlvdChandler AZ 85224-6199Tel 480-792-7200Fax 480-792-7277Technical SupporthttpwwwmicrochipcomsupportWeb AddresswwwmicrochipcomAtlantaDuluth GATel 678-957-9614Fax 678-957-1455Austin TXTel 512-257-3370BostonWestborough MATel 774-760-0087Fax 774-760-0088ChicagoItasca ILTel 630-285-0071Fax 630-285-0075DallasAddison TXTel 972-818-7423Fax 972-818-2924DetroitNovi MITel 248-848-4000Houston TXTel 281-894-5983IndianapolisNoblesville INTel 317-773-8323Fax 317-773-5453Tel 317-536-2380Los AngelesMission Viejo CATel 949-462-9523Fax 949-462-9608Tel 951-273-7800Raleigh NCTel 919-844-7510New York NYTel 631-435-6000San Jose CATel 408-735-9110Tel 408-436-4270Canada - TorontoTel 905-695-1980Fax 905-695-2078

                                                                    Australia - SydneyTel 61-2-9868-6733China - BeijingTel 86-10-8569-7000China - ChengduTel 86-28-8665-5511China - ChongqingTel 86-23-8980-9588China - DongguanTel 86-769-8702-9880China - GuangzhouTel 86-20-8755-8029China - HangzhouTel 86-571-8792-8115China - Hong Kong SARTel 852-2943-5100China - NanjingTel 86-25-8473-2460China - QingdaoTel 86-532-8502-7355China - ShanghaiTel 86-21-3326-8000China - ShenyangTel 86-24-2334-2829China - ShenzhenTel 86-755-8864-2200China - SuzhouTel 86-186-6233-1526China - WuhanTel 86-27-5980-5300China - XianTel 86-29-8833-7252China - XiamenTel 86-592-2388138China - ZhuhaiTel 86-756-3210040

                                                                    India - BangaloreTel 91-80-3090-4444India - New DelhiTel 91-11-4160-8631India - PuneTel 91-20-4121-0141Japan - OsakaTel 81-6-6152-7160Japan - TokyoTel 81-3-6880- 3770Korea - DaeguTel 82-53-744-4301Korea - SeoulTel 82-2-554-7200Malaysia - Kuala LumpurTel 60-3-7651-7906Malaysia - PenangTel 60-4-227-8870Philippines - ManilaTel 63-2-634-9065SingaporeTel 65-6334-8870Taiwan - Hsin ChuTel 886-3-577-8366Taiwan - KaohsiungTel 886-7-213-7830Taiwan - TaipeiTel 886-2-2508-8600Thailand - BangkokTel 66-2-694-1351Vietnam - Ho Chi MinhTel 84-28-5448-2100

                                                                    Austria - WelsTel 43-7242-2244-39Fax 43-7242-2244-393Denmark - CopenhagenTel 45-4450-2828Fax 45-4485-2829Finland - EspooTel 358-9-4520-820France - ParisTel 33-1-69-53-63-20Fax 33-1-69-30-90-79Germany - GarchingTel 49-8931-9700Germany - HaanTel 49-2129-3766400Germany - HeilbronnTel 49-7131-67-3636Germany - KarlsruheTel 49-721-625370Germany - MunichTel 49-89-627-144-0Fax 49-89-627-144-44Germany - RosenheimTel 49-8031-354-560Israel - RarsquoananaTel 972-9-744-7705Italy - MilanTel 39-0331-742611Fax 39-0331-466781Italy - PadovaTel 39-049-7625286Netherlands - DrunenTel 31-416-690399Fax 31-416-690340Norway - TrondheimTel 47-7289-7561Poland - WarsawTel 48-22-3325737Romania - BucharestTel 40-21-407-87-50Spain - MadridTel 34-91-708-08-90Fax 34-91-708-08-91Sweden - GothenbergTel 46-31-704-60-40Sweden - StockholmTel 46-8-5090-4654UK - WokinghamTel 44-118-921-5800Fax 44-118-921-5820

                                                                    Worldwide Sales and Service

                                                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 57

                                                                    • Introduction
                                                                    • Table of Contents
                                                                    • 1 Getting Started
                                                                      • 11 Software Prerequisites
                                                                        • 111 Installation Steps of Atmel Studio 7
                                                                          • 12 Software Setup
                                                                            • 121 Installation of Microchip SmartConnect application on a Mobile device
                                                                              • 13 ATBTLC1000 Embedded Firmware
                                                                              • 14 ATBTLC1000 Host Software API
                                                                              • 15 Hardware Prerequisites
                                                                                • 151 SMARTtrade SAM L21 Xplained Pro
                                                                                • 152 ATBTLC1000ZR Xplained Pro Extension board
                                                                                  • 16 Hardware Setup
                                                                                    • 2 Creating the Project and Initializing
                                                                                      • 21 Creating Project from ASF
                                                                                      • 22 Configuring ASF for ATBTLC1000-ZR
                                                                                      • 23 Compiling and Testing the Project
                                                                                        • 3 Establishing Connection with Central Device
                                                                                          • 31 Configuring and Starting the Advertisement Process
                                                                                            • 311 Flags (AD Type 0x00)
                                                                                            • 312 Available Service UUID (AD Types 0x02 to 0x07)
                                                                                            • 313 Device Name (AD Types 0x08 to 0x09)
                                                                                              • 3131 Setting the Advertisement Payload (ble_advertisement_data_set)
                                                                                              • 3132 Starting the Advertisement Process (at_ble_adv_start)
                                                                                                • 314 Advertisement Process
                                                                                                  • 3141 Starting the Advertisement Process
                                                                                                      • 32 Managing GAP events
                                                                                                        • 321 Handling of Connected and Disconnected GAP Events
                                                                                                            • 4 SettingHandling of Pre-Defined Service
                                                                                                              • 41 Adding Device Info Service Component from ASF Wizard to Project
                                                                                                              • 42 Configuring and Loading Device Information Service
                                                                                                                • 421 Procedure to Configure and Load Device Info Service
                                                                                                                    • 5 Setting up and Handling Custom Service
                                                                                                                      • 51 Configuring and Loading the Custom Environment Service
                                                                                                                        • 511 Procedure to Configure and Load Custom Environment Service
                                                                                                                          • 52 Updating the Temperature Characteristic
                                                                                                                            • 521 Setting a Characteristic Value ( at_ble_characteristic_value_set)
                                                                                                                            • 522 Sending a Notification (at_ble_notification_send)
                                                                                                                            • 523 Sending Temperature Information Once in Every 10 Seconds to Central
                                                                                                                                • 6 Appendix A Software Solution - Pre-Defined Svc
                                                                                                                                • 7 Appendix B Software Solution - Custom Service
                                                                                                                                • 8 Document Revision History
                                                                                                                                • The Microchip Web Site
                                                                                                                                • Customer Change Notification Service
                                                                                                                                • Customer Support
                                                                                                                                • Microchip Devices Code Protection Feature
                                                                                                                                • Legal Notice
                                                                                                                                • Trademarks
                                                                                                                                • Quality Management System Certified by DNV
                                                                                                                                • Worldwide Sales and Service

                                                                      3 Add dis_init_service and at_ble_primary_service_define functions as called abovethe advertisement start in main routine Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service)dis_init_service (ampdis_service_handler) Define the primary service in the GATT server database if ((dis_primary_service_define (ampdis_service_handler)) = AT_BLE_SUCCESS)printf(Device Information Service definition failed) Start Advertising process start_advertisement()

                                                                      4 Click to save the project ltCtrl+Sgt and compile the project by pressing button ltF7gt5 Verify that no build error appears in Atmel Studio output window

                                                                      Figure 4-7 Atmel Studio Output Window

                                                                      6 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt7 Open ldquoMicrochip SmartConnectrdquo application on Android or iOS device8 Press ltStart Scangt button and connect to peripheral

                                                                      Note  The device name is a characteristic and contains the name of the device This device namecan be read by the central device to know the name of the device in order to differentiate thedevices This is being set using at_ble_device_name_set()API The device name is set bydefault when ble_device_init is called and the value is pre-defined using BLE_DEVICE_NAMEThe device name can also be sent as part of advertisement payload to be same as the oneconfigured in at_ble_adv_data_set() API It is the responsibility of users to keep the devicename set in advertisement payload the same as that configured inat_ble_device_name_set()

                                                                      9 The Service must now be visible after pairing with peripheral under Microchip SmartConnectapplication

                                                                      ATBTLC1000SettingHandling of Pre-Defined Service

                                                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 35

                                                                      Figure 4-8 Service List in Microchip SmartConnect Application

                                                                      Note  If the pairing of ATBTLC1000 with Microchip Smart connect is not successful then removethe pairing information from mobile by selecting ldquoForget Devicerdquo from the mobile settings Thereason for this is that the mobile app stores the previous pairing information but the ATBTLC1000device lost the previous pairing information due to RESET since it was stored on temporary storage(RAM)

                                                                      10 The serial terminal must display the following log output windowFigure 4-9 Console Log Window

                                                                      ATBTLC1000SettingHandling of Pre-Defined Service

                                                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 36

                                                                      5 Setting up and Handling Custom ServiceThe previous assignment describes the handling of Bluetooth Low Energy SIG defined device infoservice which is the predefined service available in ASF component This assignment describes thecustom service So the service initialization needs to be implemented In the context of customizedenvironment service the following service description is pushed in ATBTLC1000 memory

                                                                      Figure 5-1 Custom Service

                                                                      Custom Environment Service Description

                                                                      bull UUID type ndash Custom UUID (128-bit)bull UUID ndash 1bc5d5a5-0200-a687-e511-3639c1ba5af0

                                                                      Characteristic 0 (Temperature)

                                                                      bull User Description ndash Temperaturebull UUID type ndash Custom UUID (128-bit)bull UUID ndash 1bc5d5a5-0200-a687-e511-3639d8ba5af0bull Properties ndash Read Notifybull Value permission ndash No authorization requiredbull Client config permission ndash No permissionbull Server config permission ndash No permission

                                                                      Note  In this definition UUIDs are generated randomly Custom servicescharacteristics are free to useany 128-bit UUID less than the base UUID There is no reserved space for vendors to use 16-bit or 32-bitUUIDs

                                                                      With this definition any temperature change is notified to the central The notify mechanism allows thecentral to know when the data changes When notify property of the Client Characteristic ConfigurationDescriptor is enabled by the central and the device writes the new value then this updated value isautomatically sent to the central through a notification The central is not required to send readcharacteristic commands explicitly to the peripheral (GATT server)

                                                                      To setup and handle the custom environment service in ATBTLC1000 module the following steps areadded to the Host MCU application

                                                                      bull Configure and load the custom servicebull Update Temperature characteristic and notify to the central devicebull Receive and handle notification from the Host device

                                                                      ATBTLC1000Setting up and Handling Custom Service

                                                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 37

                                                                      Figure 5-2 Custom Service Flowchart

                                                                      51 Configuring and Loading the Custom Environment ServiceThe ATBTLC1000 Host driver provides the following set of GATT functions that allows it to push andupdate the service descriptions in the ATBTLC1000 SRAM memory

                                                                      Note  Before starting this assignment be sure to follow the steps mentioned in 2 Creating the Projectand Initializing and 3 Establishing Connection with Central Device

                                                                      Prototype ndashat_ble_status_t at_ble_primary_service_define(at_ble_uuid_t uuidat_ble_handle_t service_handleat_ble_included_service_t included_service_listuint16_t included_service_countat_ble_characteristic_t charactristic_listuint16_t charactristic_count)

                                                                      Description ndash Defines a new primary service along with its included services and characteristics inATBTLC1000 module

                                                                      Parameters

                                                                      bull Uuid [In] ndash primary service UUIDbull service_handle [Out] ndash service handle is returned herebull included_service_list [In] ndash array of included service referencesbull included_service_count [In] ndash number of elements in included_service_listbull charactristic_list [InOut] ndash an array of characteristics included in the service this array

                                                                      is update with respective characteristics handlesbull charactristic_count[In] ndash number of elements in charactristic_list

                                                                      ATBTLC1000Setting up and Handling Custom Service

                                                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 38

                                                                      Return ndash Execution Status

                                                                      bull Characteristics ndashndash Characteristics definition is done through specific array of following

                                                                      ldquoat_ble_characteristic_trdquo structure instancestypedef structat_ble_handle_t char_val_handle Handler (returned during service initialisation)at_ble_uuid_t uuid Characteristic UUID (type and value)at_ble_char_properties_t propertiesCharac Properties (read write notify)uint8_t init_value initial valueuint16_t value_init_len initial value lengthuint16_t value_max_len value max lengthat_ble_attr_permissions_t value_permissions access authorization and authenticationuint8_t user_desc User descriptionuint16_t user_desc_len User description lengthuint16_t user_desc_max_len User description max lengthat_ble_char_presentation_t presentation_format Presentation formatat_ble_attr_permissions_t user_desc_permissions User description permissionat_ble_attr_permissions_t client_config_permissions client permissionat_ble_attr_permissions_t server_config_permissions server permissionat_ble_handle_t user_desc_handle description handlerat_ble_handle_t client_config_handle Client config handlerat_ble_handle_t server_config_handle Server config handler at_ble_characteristic_t

                                                                      511 Procedure to Configure and Load Custom Environment Service1 Define the following service UUID and characteristic UUID in startup_templatec file

                                                                      define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

                                                                      2 Define the following environment service handler and characteristics variable as global instartup_templatec file Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

                                                                      3 Add the following service initialization function custom_environment_service_init instartup_templatecvoid custom_environment_service_init(void) at_ble_uuid_t environment_service_uuiduint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUIDuint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperatureenvironment_service_characs[0]user_desc_len = 10environment_service_characs[0]user_desc_max_len = 10environment_service_characs[0]uuidtype = AT_BLE_UUID_128memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16)environment_service_characs[0]properties = AT_BLE_CHAR_READ |AT_BLE_CHAR_NOTIFYenvironment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature valueenvironment_service_characs[0]value_permissions =(AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuidampenvironment_service_handlerNULL0environment_service_characs1)=AT_BLE_SUCCESS)printf(n Assignment 41 Failed to Initialize custom environment service)

                                                                      ATBTLC1000Setting up and Handling Custom Service

                                                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 39

                                                                      elseprintf(n Assignment 41 Initialize custom environment service)

                                                                      4 Declare and implement the following GATT event callback functioncustom_char_changed_app_event in startup_templatec file If a client (central) enablesnotifications for a server the server (peripheral) receives an AT_BLE_CHARACTERISTIC_CHANGEDevent and this event callback is called Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

                                                                      5 Declare and implement the following custom_notification_confirmation_handlerfunction in startup_templatec file Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param)at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )paramif (event_param-gtstatus == AT_BLE_SUCCESS)printf(n Assignment 41Notification Successfully sent over the air) else printf(n Assignment 41Sending Notification over the air failed)return AT_BLE_SUCCESS

                                                                      6 Declare the following GATT server callback structure in startup_templatec file Thisassignment uses two GATT callbacksstatic const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handlercharacteristic_changed = custom_char_changed_app_event

                                                                      7 Add the following register_gatt_server_callbacks function in startup_templatec toregister GATT server callback for notification confirmation event Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks)ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACKBLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle)if (ble_status = true)printf(nError when Registering ATBTLC1000 callbacks)

                                                                      8 Add custom_environment_service_init and register_gatt_server_callbacksfunction calls prior to start advertisement in the application main routine to initialize custom serviceand to register the GATT server callbacksint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()

                                                                      ATBTLC1000Setting up and Handling Custom Service

                                                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 40

                                                                      endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks() Custom service init custom_environment_service_init ( ) Register Gatt server callbacks register_gatt_server_callbacks ( ) Start Advertising process start_advertisement()while(true)ble_event_task()

                                                                      9 Click to save the project ltCtrl+Sgt

                                                                      10 Compile the project by pressing button ltF7gt11 Verify that no build error appears in the Atmel Studio output window

                                                                      Figure 5-3 Atmel Studio Output Window

                                                                      12 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt13 Open the ldquoMicrochip SmartConnectrdquo application on Android or iOS device14 Connect and pair to the peripheral (pass key 123456)15 Custom service must now be visible after pairing with peripheral under Microchip SmartConnect

                                                                      application

                                                                      ATBTLC1000Setting up and Handling Custom Service

                                                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 41

                                                                      Figure 5-4 Service List in Microchip SmartConnect Application

                                                                      Note  Custom service is displayed as unknown service in the above figure as this service is not aSIG-defined service

                                                                      Figure 5-5 General Information

                                                                      16 Serial terminal client must display the following Log output

                                                                      ATBTLC1000Setting up and Handling Custom Service

                                                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 42

                                                                      Figure 5-6 Log Output Window

                                                                      52 Updating the Temperature CharacteristicIn the previous assignment the custom Temperature characteristic is defined with a notify attribute Thistype of attribute requires notification to be sent to central when a new characteristic value is availableThe update of any ldquonotifyrdquo characteristic value is based on following interaction between the Host MCUand the ATBTLC1000Figure 5-7 Characteristic Notification

                                                                      521 Setting a Characteristic Value ( at_ble_characteristic_value_set)Prototype ndashat_ble_status_t at_ble_characteristic_value_setat_ble_handle_t handleuint8_t valueuint16_t len)

                                                                      Description ndash Sets a characteristic value in ATBTLC1000 memory

                                                                      Parameters ndash

                                                                      ATBTLC1000Setting up and Handling Custom Service

                                                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 43

                                                                      bull handle [inout] ndash Pointer to Characteristic handle to be changedbull value [in] ndash New valuebull len [in] ndash Value length in bytes

                                                                      Return ndash Execution Status

                                                                      522 Sending a Notification (at_ble_notification_send)Prototype ndashat_ble_status_t at_ble_notification_send(at_ble_handle_t conn_handleat_ble_handle_t attr_handle)

                                                                      Description ndash Sends a Notification

                                                                      Parameters ndash

                                                                      bull conn_handle[in] ndash handle of the connection to be notifiedbull attr_handle [in] ndash handle of the attribute originating the notification

                                                                      Return ndash Execution Status

                                                                      523 Sending Temperature Information Once in Every 10 Seconds to Central1 Modify the following ldquotimer_callback_fnrdquo callback function from the startup_templatec

                                                                      filestatic void timer_callback_fn(void)timer_flag = true

                                                                      2 hw_timer_init()in main routine of startup_templatec initializes the hardware timer3 If a client (Central) enables the notifications for a server the server (Peripheral) receives an

                                                                      AT_BLE_CHARACTERISTIC_CHANGED event callback then start the periodic 10 second timer forsending the notification Add the following code in previously definedcustom_char_changed_app_event function Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))timer_flag = falsehw_timer_start(10)printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

                                                                      4 Declare the following Temperature_value global variable in startup_templatec staticuint8_t Temperature_value = 25 as static

                                                                      5 Add the following send_temperature_notification function in startup_templatec tosend temperature every 10 seconds Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++

                                                                      ATBTLC1000Setting up and Handling Custom Service

                                                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 44

                                                                      if(Temperature_value gt 75)Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set(environment_service_characs[0]char_val_handle(uint8_t )ampTemperature_valuesizeof(Temperature_value))ble_status = at_ble_notification_send(0environment_service_characs[0]char_val_handle)if(ble_status = AT_BLE_SUCCESS)printf(fail to send temperature update notification )

                                                                      6 Add the following code in main routine to send temperature data every 10 secondswhile (1) ble_event_task()if(connected_flag == true ampamp timer_flag == truetimer_flag = falsesend_temperature_notification()

                                                                      7 Click to save the project ltCtrl+Sgt

                                                                      8 Compile the project by pressing the button ltF7gt9 Verify that no build error appears in Atmel Studio output window

                                                                      Figure 5-8 Atmel Studio Output Window

                                                                      10 Click to program the project binary on the L21 Xplained XSTK11 Open ldquoMicrochip SmartConnectrdquo Application on Android or iOS device12 Connect and pair to the peripheral (pass key 123456)13 Click NOTIFY to start the notification14 Temperature information in HEX values must be displayed in Microchip SmartConnect application

                                                                      ATBTLC1000Setting up and Handling Custom Service

                                                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 45

                                                                      Figure 5-9 Notification Window

                                                                      15 Serial terminal must display the following log outputFigure 5-10 Log Output Window

                                                                      ATBTLC1000Setting up and Handling Custom Service

                                                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 46

                                                                      6 Appendix A Software Solution - Pre-Defined SvcThe following is the code implementation for handling of pre-defined service done in 4 SettingHandlingof Pre-Defined Service

                                                                      - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehinclude device_infoh

                                                                      volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false Services handlers dis_gatt_service_handler_t dis_service_handler

                                                                      static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

                                                                      void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                                                                      Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                                                                      Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                                                                      static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                                                                      Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void) Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks)

                                                                      ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

                                                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 47

                                                                      ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                                                      timer callback function static void timer_callback_fn(void) Add timer callback functionality here

                                                                      void button_cb(void) Add button callback functionality here

                                                                      int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                                                                      Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                                                                      DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks()

                                                                      Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service) dis_init_service(ampdis_service_handler) Define the primary service in the GATT server database if((dis_primary_service_define(ampdis_service_handler)) = AT_BLE_SUCCESS) printf(Device Information Service definition failed)

                                                                      Start Advertising process start_advertisement() while(true) ble_event_task()

                                                                      ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

                                                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 48

                                                                      7 Appendix B Software Solution - Custom ServiceThe following is the code implementation for handling of pre-defined service done in 5 Setting up andHandling Custom Service

                                                                      - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templateh

                                                                      volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false

                                                                      static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

                                                                      define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0

                                                                      define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

                                                                      Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

                                                                      void custom_environment_service_init(void) at_ble_uuid_t environment_service_uuid uint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUID uint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128 memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperature environment_service_characs[0]user_desc_len = 10 environment_service_characs[0]user_desc_max_len = 10 environment_service_characs[0]uuidtype = AT_BLE_UUID_128 memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16) environment_service_characs[0]properties = AT_BLE_CHAR_READ | AT_BLE_CHAR_NOTIFY environment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature value environment_service_characs[0]value_permissions = (AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuid ampenvironment_service_handlerNULL0 environment_service_characs1)=AT_BLE_SUCCESS) printf(n Assignment 41 Failed to Initialize custom environment service) else printf(n Assignment 41 Initialize custom environment service)

                                                                      Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param) at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )param if (event_param-gtstatus == AT_BLE_SUCCESS) printf(n Assignment 41Notification Successfully sent over the air)

                                                                      ATBTLC1000Appendix B Software Solution - Custom Service

                                                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 49

                                                                      else printf(n Assignment 41Sending Notification over the air failed) return AT_BLE_SUCCESS

                                                                      static at_ble_status_t custom_char_changed_app_event(void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle -gt char_new_value[0])) timer_flag = false hw_timer_start(10) printf(n Assignment 41Characteristic changed event) return AT_BLE_SUCCESS

                                                                      static const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handler characteristic_changed = custom_char_changed_app_event

                                                                      Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                                                      void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                                                                      Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                                                                      Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                                                                      static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                                                                      Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void)

                                                                      ATBTLC1000Appendix B Software Solution - Custom Service

                                                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 50

                                                                      Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                                                      timer callback function static void timer_callback_fn(void) Add timer callback functionality here timer_flag = true

                                                                      void button_cb(void) Add button callback functionality here

                                                                      static uint8_t Temperature_value = 25

                                                                      Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++ if(Temperature_value gt 75) Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set( environment_service_characs[0]char_val_handle (uint8_t )ampTemperature_value sizeof(Temperature_value)) ble_status = at_ble_notification_send(0 environment_service_characs[0]char_val_handle) if(ble_status = AT_BLE_SUCCESS) printf(fail to send temperature update notification )

                                                                      int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                                                                      Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                                                                      DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register Gap ATBTLC1000 Callbacks register_btlc1000_callbacks()

                                                                      Custom service init custom_environment_service_init()

                                                                      ATBTLC1000Appendix B Software Solution - Custom Service

                                                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 51

                                                                      Register Gatt server callback register_gatt_server_callbacks()

                                                                      Start Advertising process start_advertisement() while(true) ble_event_task() if(connected_flag == true ampamp timer_flag == true) timer_flag = false send_temperature_notification()

                                                                      ATBTLC1000Appendix B Software Solution - Custom Service

                                                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 52

                                                                      8 Document Revision HistoryRev B - 42018

                                                                      Section Changes

                                                                      Document Revised contents to match various Bluetooth Low Energy standard versions

                                                                      Rev A - 122017

                                                                      Section Changes

                                                                      Document Initial release

                                                                      ATBTLC1000Document Revision History

                                                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 53

                                                                      The Microchip Web Site

                                                                      Microchip provides online support via our web site at httpwwwmicrochipcom This web site is used asa means to make files and information easily available to customers Accessible by using your favoriteInternet browser the web site contains the following information

                                                                      bull Product Support ndash Data sheets and errata application notes and sample programs designresources userrsquos guides and hardware support documents latest software releases and archivedsoftware

                                                                      bull General Technical Support ndash Frequently Asked Questions (FAQ) technical support requestsonline discussion groups Microchip consultant program member listing

                                                                      bull Business of Microchip ndash Product selector and ordering guides latest Microchip press releaseslisting of seminars and events listings of Microchip sales offices distributors and factoryrepresentatives

                                                                      Customer Change Notification Service

                                                                      Microchiprsquos customer notification service helps keep customers current on Microchip productsSubscribers will receive e-mail notification whenever there are changes updates revisions or erratarelated to a specified product family or development tool of interest

                                                                      To register access the Microchip web site at httpwwwmicrochipcom Under ldquoSupportrdquo click onldquoCustomer Change Notificationrdquo and follow the registration instructions

                                                                      Customer Support

                                                                      Users of Microchip products can receive assistance through several channels

                                                                      bull Distributor or Representativebull Local Sales Officebull Field Application Engineer (FAE)bull Technical Support

                                                                      Customers should contact their distributor representative or Field Application Engineer (FAE) for supportLocal sales offices are also available to help customers A listing of sales offices and locations is includedin the back of this document

                                                                      Technical support is available through the web site at httpwwwmicrochipcomsupport

                                                                      Microchip Devices Code Protection Feature

                                                                      Note the following details of the code protection feature on Microchip devices

                                                                      bull Microchip products meet the specification contained in their particular Microchip Data Sheetbull Microchip believes that its family of products is one of the most secure families of its kind on the

                                                                      market today when used in the intended manner and under normal conditionsbull There are dishonest and possibly illegal methods used to breach the code protection feature All of

                                                                      these methods to our knowledge require using the Microchip products in a manner outside theoperating specifications contained in Microchiprsquos Data Sheets Most likely the person doing so isengaged in theft of intellectual property

                                                                      bull Microchip is willing to work with the customer who is concerned about the integrity of their code

                                                                      ATBTLC1000

                                                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 54

                                                                      bull Neither Microchip nor any other semiconductor manufacturer can guarantee the security of theircode Code protection does not mean that we are guaranteeing the product as ldquounbreakablerdquo

                                                                      Code protection is constantly evolving We at Microchip are committed to continuously improving thecode protection features of our products Attempts to break Microchiprsquos code protection feature may be aviolation of the Digital Millennium Copyright Act If such acts allow unauthorized access to your softwareor other copyrighted work you may have a right to sue for relief under that Act

                                                                      Legal Notice

                                                                      Information contained in this publication regarding device applications and the like is provided only foryour convenience and may be superseded by updates It is your responsibility to ensure that yourapplication meets with your specifications MICROCHIP MAKES NO REPRESENTATIONS ORWARRANTIES OF ANY KIND WHETHER EXPRESS OR IMPLIED WRITTEN OR ORAL STATUTORYOR OTHERWISE RELATED TO THE INFORMATION INCLUDING BUT NOT LIMITED TO ITSCONDITION QUALITY PERFORMANCE MERCHANTABILITY OR FITNESS FOR PURPOSEMicrochip disclaims all liability arising from this information and its use Use of Microchip devices in lifesupport andor safety applications is entirely at the buyerrsquos risk and the buyer agrees to defendindemnify and hold harmless Microchip from any and all damages claims suits or expenses resultingfrom such use No licenses are conveyed implicitly or otherwise under any Microchip intellectualproperty rights unless otherwise stated

                                                                      Trademarks

                                                                      The Microchip name and logo the Microchip logo AnyRate AVR AVR logo AVR Freaks BeaconThingsBitCloud CryptoMemory CryptoRF dsPIC FlashFlex flexPWR Heldo JukeBlox KeeLoq KeeLoq logoKleer LANCheck LINK MD maXStylus maXTouch MediaLB megaAVR MOST MOST logo MPLABOptoLyzer PIC picoPower PICSTART PIC32 logo Prochip Designer QTouch RightTouch SAM-BASpyNIC SST SST Logo SuperFlash tinyAVR UNIO and XMEGA are registered trademarks ofMicrochip Technology Incorporated in the USA and other countries

                                                                      ClockWorks The Embedded Control Solutions Company EtherSynch Hyper Speed Control HyperLightLoad IntelliMOS mTouch Precision Edge and Quiet-Wire are registered trademarks of MicrochipTechnology Incorporated in the USA

                                                                      Adjacent Key Suppression AKS Analog-for-the-Digital Age Any Capacitor AnyIn AnyOut BodyComchipKIT chipKIT logo CodeGuard CryptoAuthentication CryptoCompanion CryptoControllerdsPICDEM dsPICDEMnet Dynamic Average Matching DAM ECAN EtherGREEN In-Circuit SerialProgramming ICSP Inter-Chip Connectivity JitterBlocker KleerNet KleerNet logo Mindi MiWimotorBench MPASM MPF MPLAB Certified logo MPLIB MPLINK MultiTRAK NetDetach OmniscientCode Generation PICDEM PICDEMnet PICkit PICtail PureSilicon QMatrix RightTouch logo REALICE Ripple Blocker SAM-ICE Serial Quad IO SMART-IS SQI SuperSwitcher SuperSwitcher II TotalEndurance TSHARC USBCheck VariSense ViewSpan WiperLock Wireless DNA and ZENA aretrademarks of Microchip Technology Incorporated in the USA and other countries

                                                                      SQTP is a service mark of Microchip Technology Incorporated in the USA

                                                                      Silicon Storage Technology is a registered trademark of Microchip Technology Inc in other countries

                                                                      GestIC is a registered trademark of Microchip Technology Germany II GmbH amp Co KG a subsidiary ofMicrochip Technology Inc in other countries

                                                                      All other trademarks mentioned herein are property of their respective companies

                                                                      ATBTLC1000

                                                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 55

                                                                      copy 2018 Microchip Technology Incorporated Printed in the USA All Rights Reserved

                                                                      ISBN 978-1-5224-2921-0

                                                                      Quality Management System Certified by DNV

                                                                      ISOTS 16949Microchip received ISOTS-169492009 certification for its worldwide headquarters design and waferfabrication facilities in Chandler and Tempe Arizona Gresham Oregon and design centers in Californiaand India The Companyrsquos quality system processes and procedures are for its PICreg MCUs and dsPICreg

                                                                      DSCs KEELOQreg code hopping devices Serial EEPROMs microperipherals nonvolatile memory andanalog products In addition Microchiprsquos quality system for the design and manufacture of developmentsystems is ISO 90012000 certified

                                                                      ATBTLC1000

                                                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 56

                                                                      AMERICAS ASIAPACIFIC ASIAPACIFIC EUROPECorporate Office2355 West Chandler BlvdChandler AZ 85224-6199Tel 480-792-7200Fax 480-792-7277Technical SupporthttpwwwmicrochipcomsupportWeb AddresswwwmicrochipcomAtlantaDuluth GATel 678-957-9614Fax 678-957-1455Austin TXTel 512-257-3370BostonWestborough MATel 774-760-0087Fax 774-760-0088ChicagoItasca ILTel 630-285-0071Fax 630-285-0075DallasAddison TXTel 972-818-7423Fax 972-818-2924DetroitNovi MITel 248-848-4000Houston TXTel 281-894-5983IndianapolisNoblesville INTel 317-773-8323Fax 317-773-5453Tel 317-536-2380Los AngelesMission Viejo CATel 949-462-9523Fax 949-462-9608Tel 951-273-7800Raleigh NCTel 919-844-7510New York NYTel 631-435-6000San Jose CATel 408-735-9110Tel 408-436-4270Canada - TorontoTel 905-695-1980Fax 905-695-2078

                                                                      Australia - SydneyTel 61-2-9868-6733China - BeijingTel 86-10-8569-7000China - ChengduTel 86-28-8665-5511China - ChongqingTel 86-23-8980-9588China - DongguanTel 86-769-8702-9880China - GuangzhouTel 86-20-8755-8029China - HangzhouTel 86-571-8792-8115China - Hong Kong SARTel 852-2943-5100China - NanjingTel 86-25-8473-2460China - QingdaoTel 86-532-8502-7355China - ShanghaiTel 86-21-3326-8000China - ShenyangTel 86-24-2334-2829China - ShenzhenTel 86-755-8864-2200China - SuzhouTel 86-186-6233-1526China - WuhanTel 86-27-5980-5300China - XianTel 86-29-8833-7252China - XiamenTel 86-592-2388138China - ZhuhaiTel 86-756-3210040

                                                                      India - BangaloreTel 91-80-3090-4444India - New DelhiTel 91-11-4160-8631India - PuneTel 91-20-4121-0141Japan - OsakaTel 81-6-6152-7160Japan - TokyoTel 81-3-6880- 3770Korea - DaeguTel 82-53-744-4301Korea - SeoulTel 82-2-554-7200Malaysia - Kuala LumpurTel 60-3-7651-7906Malaysia - PenangTel 60-4-227-8870Philippines - ManilaTel 63-2-634-9065SingaporeTel 65-6334-8870Taiwan - Hsin ChuTel 886-3-577-8366Taiwan - KaohsiungTel 886-7-213-7830Taiwan - TaipeiTel 886-2-2508-8600Thailand - BangkokTel 66-2-694-1351Vietnam - Ho Chi MinhTel 84-28-5448-2100

                                                                      Austria - WelsTel 43-7242-2244-39Fax 43-7242-2244-393Denmark - CopenhagenTel 45-4450-2828Fax 45-4485-2829Finland - EspooTel 358-9-4520-820France - ParisTel 33-1-69-53-63-20Fax 33-1-69-30-90-79Germany - GarchingTel 49-8931-9700Germany - HaanTel 49-2129-3766400Germany - HeilbronnTel 49-7131-67-3636Germany - KarlsruheTel 49-721-625370Germany - MunichTel 49-89-627-144-0Fax 49-89-627-144-44Germany - RosenheimTel 49-8031-354-560Israel - RarsquoananaTel 972-9-744-7705Italy - MilanTel 39-0331-742611Fax 39-0331-466781Italy - PadovaTel 39-049-7625286Netherlands - DrunenTel 31-416-690399Fax 31-416-690340Norway - TrondheimTel 47-7289-7561Poland - WarsawTel 48-22-3325737Romania - BucharestTel 40-21-407-87-50Spain - MadridTel 34-91-708-08-90Fax 34-91-708-08-91Sweden - GothenbergTel 46-31-704-60-40Sweden - StockholmTel 46-8-5090-4654UK - WokinghamTel 44-118-921-5800Fax 44-118-921-5820

                                                                      Worldwide Sales and Service

                                                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 57

                                                                      • Introduction
                                                                      • Table of Contents
                                                                      • 1 Getting Started
                                                                        • 11 Software Prerequisites
                                                                          • 111 Installation Steps of Atmel Studio 7
                                                                            • 12 Software Setup
                                                                              • 121 Installation of Microchip SmartConnect application on a Mobile device
                                                                                • 13 ATBTLC1000 Embedded Firmware
                                                                                • 14 ATBTLC1000 Host Software API
                                                                                • 15 Hardware Prerequisites
                                                                                  • 151 SMARTtrade SAM L21 Xplained Pro
                                                                                  • 152 ATBTLC1000ZR Xplained Pro Extension board
                                                                                    • 16 Hardware Setup
                                                                                      • 2 Creating the Project and Initializing
                                                                                        • 21 Creating Project from ASF
                                                                                        • 22 Configuring ASF for ATBTLC1000-ZR
                                                                                        • 23 Compiling and Testing the Project
                                                                                          • 3 Establishing Connection with Central Device
                                                                                            • 31 Configuring and Starting the Advertisement Process
                                                                                              • 311 Flags (AD Type 0x00)
                                                                                              • 312 Available Service UUID (AD Types 0x02 to 0x07)
                                                                                              • 313 Device Name (AD Types 0x08 to 0x09)
                                                                                                • 3131 Setting the Advertisement Payload (ble_advertisement_data_set)
                                                                                                • 3132 Starting the Advertisement Process (at_ble_adv_start)
                                                                                                  • 314 Advertisement Process
                                                                                                    • 3141 Starting the Advertisement Process
                                                                                                        • 32 Managing GAP events
                                                                                                          • 321 Handling of Connected and Disconnected GAP Events
                                                                                                              • 4 SettingHandling of Pre-Defined Service
                                                                                                                • 41 Adding Device Info Service Component from ASF Wizard to Project
                                                                                                                • 42 Configuring and Loading Device Information Service
                                                                                                                  • 421 Procedure to Configure and Load Device Info Service
                                                                                                                      • 5 Setting up and Handling Custom Service
                                                                                                                        • 51 Configuring and Loading the Custom Environment Service
                                                                                                                          • 511 Procedure to Configure and Load Custom Environment Service
                                                                                                                            • 52 Updating the Temperature Characteristic
                                                                                                                              • 521 Setting a Characteristic Value ( at_ble_characteristic_value_set)
                                                                                                                              • 522 Sending a Notification (at_ble_notification_send)
                                                                                                                              • 523 Sending Temperature Information Once in Every 10 Seconds to Central
                                                                                                                                  • 6 Appendix A Software Solution - Pre-Defined Svc
                                                                                                                                  • 7 Appendix B Software Solution - Custom Service
                                                                                                                                  • 8 Document Revision History
                                                                                                                                  • The Microchip Web Site
                                                                                                                                  • Customer Change Notification Service
                                                                                                                                  • Customer Support
                                                                                                                                  • Microchip Devices Code Protection Feature
                                                                                                                                  • Legal Notice
                                                                                                                                  • Trademarks
                                                                                                                                  • Quality Management System Certified by DNV
                                                                                                                                  • Worldwide Sales and Service

                                                                        Figure 4-8 Service List in Microchip SmartConnect Application

                                                                        Note  If the pairing of ATBTLC1000 with Microchip Smart connect is not successful then removethe pairing information from mobile by selecting ldquoForget Devicerdquo from the mobile settings Thereason for this is that the mobile app stores the previous pairing information but the ATBTLC1000device lost the previous pairing information due to RESET since it was stored on temporary storage(RAM)

                                                                        10 The serial terminal must display the following log output windowFigure 4-9 Console Log Window

                                                                        ATBTLC1000SettingHandling of Pre-Defined Service

                                                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 36

                                                                        5 Setting up and Handling Custom ServiceThe previous assignment describes the handling of Bluetooth Low Energy SIG defined device infoservice which is the predefined service available in ASF component This assignment describes thecustom service So the service initialization needs to be implemented In the context of customizedenvironment service the following service description is pushed in ATBTLC1000 memory

                                                                        Figure 5-1 Custom Service

                                                                        Custom Environment Service Description

                                                                        bull UUID type ndash Custom UUID (128-bit)bull UUID ndash 1bc5d5a5-0200-a687-e511-3639c1ba5af0

                                                                        Characteristic 0 (Temperature)

                                                                        bull User Description ndash Temperaturebull UUID type ndash Custom UUID (128-bit)bull UUID ndash 1bc5d5a5-0200-a687-e511-3639d8ba5af0bull Properties ndash Read Notifybull Value permission ndash No authorization requiredbull Client config permission ndash No permissionbull Server config permission ndash No permission

                                                                        Note  In this definition UUIDs are generated randomly Custom servicescharacteristics are free to useany 128-bit UUID less than the base UUID There is no reserved space for vendors to use 16-bit or 32-bitUUIDs

                                                                        With this definition any temperature change is notified to the central The notify mechanism allows thecentral to know when the data changes When notify property of the Client Characteristic ConfigurationDescriptor is enabled by the central and the device writes the new value then this updated value isautomatically sent to the central through a notification The central is not required to send readcharacteristic commands explicitly to the peripheral (GATT server)

                                                                        To setup and handle the custom environment service in ATBTLC1000 module the following steps areadded to the Host MCU application

                                                                        bull Configure and load the custom servicebull Update Temperature characteristic and notify to the central devicebull Receive and handle notification from the Host device

                                                                        ATBTLC1000Setting up and Handling Custom Service

                                                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 37

                                                                        Figure 5-2 Custom Service Flowchart

                                                                        51 Configuring and Loading the Custom Environment ServiceThe ATBTLC1000 Host driver provides the following set of GATT functions that allows it to push andupdate the service descriptions in the ATBTLC1000 SRAM memory

                                                                        Note  Before starting this assignment be sure to follow the steps mentioned in 2 Creating the Projectand Initializing and 3 Establishing Connection with Central Device

                                                                        Prototype ndashat_ble_status_t at_ble_primary_service_define(at_ble_uuid_t uuidat_ble_handle_t service_handleat_ble_included_service_t included_service_listuint16_t included_service_countat_ble_characteristic_t charactristic_listuint16_t charactristic_count)

                                                                        Description ndash Defines a new primary service along with its included services and characteristics inATBTLC1000 module

                                                                        Parameters

                                                                        bull Uuid [In] ndash primary service UUIDbull service_handle [Out] ndash service handle is returned herebull included_service_list [In] ndash array of included service referencesbull included_service_count [In] ndash number of elements in included_service_listbull charactristic_list [InOut] ndash an array of characteristics included in the service this array

                                                                        is update with respective characteristics handlesbull charactristic_count[In] ndash number of elements in charactristic_list

                                                                        ATBTLC1000Setting up and Handling Custom Service

                                                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 38

                                                                        Return ndash Execution Status

                                                                        bull Characteristics ndashndash Characteristics definition is done through specific array of following

                                                                        ldquoat_ble_characteristic_trdquo structure instancestypedef structat_ble_handle_t char_val_handle Handler (returned during service initialisation)at_ble_uuid_t uuid Characteristic UUID (type and value)at_ble_char_properties_t propertiesCharac Properties (read write notify)uint8_t init_value initial valueuint16_t value_init_len initial value lengthuint16_t value_max_len value max lengthat_ble_attr_permissions_t value_permissions access authorization and authenticationuint8_t user_desc User descriptionuint16_t user_desc_len User description lengthuint16_t user_desc_max_len User description max lengthat_ble_char_presentation_t presentation_format Presentation formatat_ble_attr_permissions_t user_desc_permissions User description permissionat_ble_attr_permissions_t client_config_permissions client permissionat_ble_attr_permissions_t server_config_permissions server permissionat_ble_handle_t user_desc_handle description handlerat_ble_handle_t client_config_handle Client config handlerat_ble_handle_t server_config_handle Server config handler at_ble_characteristic_t

                                                                        511 Procedure to Configure and Load Custom Environment Service1 Define the following service UUID and characteristic UUID in startup_templatec file

                                                                        define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

                                                                        2 Define the following environment service handler and characteristics variable as global instartup_templatec file Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

                                                                        3 Add the following service initialization function custom_environment_service_init instartup_templatecvoid custom_environment_service_init(void) at_ble_uuid_t environment_service_uuiduint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUIDuint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperatureenvironment_service_characs[0]user_desc_len = 10environment_service_characs[0]user_desc_max_len = 10environment_service_characs[0]uuidtype = AT_BLE_UUID_128memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16)environment_service_characs[0]properties = AT_BLE_CHAR_READ |AT_BLE_CHAR_NOTIFYenvironment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature valueenvironment_service_characs[0]value_permissions =(AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuidampenvironment_service_handlerNULL0environment_service_characs1)=AT_BLE_SUCCESS)printf(n Assignment 41 Failed to Initialize custom environment service)

                                                                        ATBTLC1000Setting up and Handling Custom Service

                                                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 39

                                                                        elseprintf(n Assignment 41 Initialize custom environment service)

                                                                        4 Declare and implement the following GATT event callback functioncustom_char_changed_app_event in startup_templatec file If a client (central) enablesnotifications for a server the server (peripheral) receives an AT_BLE_CHARACTERISTIC_CHANGEDevent and this event callback is called Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

                                                                        5 Declare and implement the following custom_notification_confirmation_handlerfunction in startup_templatec file Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param)at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )paramif (event_param-gtstatus == AT_BLE_SUCCESS)printf(n Assignment 41Notification Successfully sent over the air) else printf(n Assignment 41Sending Notification over the air failed)return AT_BLE_SUCCESS

                                                                        6 Declare the following GATT server callback structure in startup_templatec file Thisassignment uses two GATT callbacksstatic const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handlercharacteristic_changed = custom_char_changed_app_event

                                                                        7 Add the following register_gatt_server_callbacks function in startup_templatec toregister GATT server callback for notification confirmation event Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks)ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACKBLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle)if (ble_status = true)printf(nError when Registering ATBTLC1000 callbacks)

                                                                        8 Add custom_environment_service_init and register_gatt_server_callbacksfunction calls prior to start advertisement in the application main routine to initialize custom serviceand to register the GATT server callbacksint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()

                                                                        ATBTLC1000Setting up and Handling Custom Service

                                                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 40

                                                                        endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks() Custom service init custom_environment_service_init ( ) Register Gatt server callbacks register_gatt_server_callbacks ( ) Start Advertising process start_advertisement()while(true)ble_event_task()

                                                                        9 Click to save the project ltCtrl+Sgt

                                                                        10 Compile the project by pressing button ltF7gt11 Verify that no build error appears in the Atmel Studio output window

                                                                        Figure 5-3 Atmel Studio Output Window

                                                                        12 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt13 Open the ldquoMicrochip SmartConnectrdquo application on Android or iOS device14 Connect and pair to the peripheral (pass key 123456)15 Custom service must now be visible after pairing with peripheral under Microchip SmartConnect

                                                                        application

                                                                        ATBTLC1000Setting up and Handling Custom Service

                                                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 41

                                                                        Figure 5-4 Service List in Microchip SmartConnect Application

                                                                        Note  Custom service is displayed as unknown service in the above figure as this service is not aSIG-defined service

                                                                        Figure 5-5 General Information

                                                                        16 Serial terminal client must display the following Log output

                                                                        ATBTLC1000Setting up and Handling Custom Service

                                                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 42

                                                                        Figure 5-6 Log Output Window

                                                                        52 Updating the Temperature CharacteristicIn the previous assignment the custom Temperature characteristic is defined with a notify attribute Thistype of attribute requires notification to be sent to central when a new characteristic value is availableThe update of any ldquonotifyrdquo characteristic value is based on following interaction between the Host MCUand the ATBTLC1000Figure 5-7 Characteristic Notification

                                                                        521 Setting a Characteristic Value ( at_ble_characteristic_value_set)Prototype ndashat_ble_status_t at_ble_characteristic_value_setat_ble_handle_t handleuint8_t valueuint16_t len)

                                                                        Description ndash Sets a characteristic value in ATBTLC1000 memory

                                                                        Parameters ndash

                                                                        ATBTLC1000Setting up and Handling Custom Service

                                                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 43

                                                                        bull handle [inout] ndash Pointer to Characteristic handle to be changedbull value [in] ndash New valuebull len [in] ndash Value length in bytes

                                                                        Return ndash Execution Status

                                                                        522 Sending a Notification (at_ble_notification_send)Prototype ndashat_ble_status_t at_ble_notification_send(at_ble_handle_t conn_handleat_ble_handle_t attr_handle)

                                                                        Description ndash Sends a Notification

                                                                        Parameters ndash

                                                                        bull conn_handle[in] ndash handle of the connection to be notifiedbull attr_handle [in] ndash handle of the attribute originating the notification

                                                                        Return ndash Execution Status

                                                                        523 Sending Temperature Information Once in Every 10 Seconds to Central1 Modify the following ldquotimer_callback_fnrdquo callback function from the startup_templatec

                                                                        filestatic void timer_callback_fn(void)timer_flag = true

                                                                        2 hw_timer_init()in main routine of startup_templatec initializes the hardware timer3 If a client (Central) enables the notifications for a server the server (Peripheral) receives an

                                                                        AT_BLE_CHARACTERISTIC_CHANGED event callback then start the periodic 10 second timer forsending the notification Add the following code in previously definedcustom_char_changed_app_event function Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))timer_flag = falsehw_timer_start(10)printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

                                                                        4 Declare the following Temperature_value global variable in startup_templatec staticuint8_t Temperature_value = 25 as static

                                                                        5 Add the following send_temperature_notification function in startup_templatec tosend temperature every 10 seconds Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++

                                                                        ATBTLC1000Setting up and Handling Custom Service

                                                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 44

                                                                        if(Temperature_value gt 75)Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set(environment_service_characs[0]char_val_handle(uint8_t )ampTemperature_valuesizeof(Temperature_value))ble_status = at_ble_notification_send(0environment_service_characs[0]char_val_handle)if(ble_status = AT_BLE_SUCCESS)printf(fail to send temperature update notification )

                                                                        6 Add the following code in main routine to send temperature data every 10 secondswhile (1) ble_event_task()if(connected_flag == true ampamp timer_flag == truetimer_flag = falsesend_temperature_notification()

                                                                        7 Click to save the project ltCtrl+Sgt

                                                                        8 Compile the project by pressing the button ltF7gt9 Verify that no build error appears in Atmel Studio output window

                                                                        Figure 5-8 Atmel Studio Output Window

                                                                        10 Click to program the project binary on the L21 Xplained XSTK11 Open ldquoMicrochip SmartConnectrdquo Application on Android or iOS device12 Connect and pair to the peripheral (pass key 123456)13 Click NOTIFY to start the notification14 Temperature information in HEX values must be displayed in Microchip SmartConnect application

                                                                        ATBTLC1000Setting up and Handling Custom Service

                                                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 45

                                                                        Figure 5-9 Notification Window

                                                                        15 Serial terminal must display the following log outputFigure 5-10 Log Output Window

                                                                        ATBTLC1000Setting up and Handling Custom Service

                                                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 46

                                                                        6 Appendix A Software Solution - Pre-Defined SvcThe following is the code implementation for handling of pre-defined service done in 4 SettingHandlingof Pre-Defined Service

                                                                        - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehinclude device_infoh

                                                                        volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false Services handlers dis_gatt_service_handler_t dis_service_handler

                                                                        static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

                                                                        void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                                                                        Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                                                                        Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                                                                        static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                                                                        Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void) Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks)

                                                                        ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

                                                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 47

                                                                        ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                                                        timer callback function static void timer_callback_fn(void) Add timer callback functionality here

                                                                        void button_cb(void) Add button callback functionality here

                                                                        int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                                                                        Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                                                                        DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks()

                                                                        Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service) dis_init_service(ampdis_service_handler) Define the primary service in the GATT server database if((dis_primary_service_define(ampdis_service_handler)) = AT_BLE_SUCCESS) printf(Device Information Service definition failed)

                                                                        Start Advertising process start_advertisement() while(true) ble_event_task()

                                                                        ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

                                                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 48

                                                                        7 Appendix B Software Solution - Custom ServiceThe following is the code implementation for handling of pre-defined service done in 5 Setting up andHandling Custom Service

                                                                        - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templateh

                                                                        volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false

                                                                        static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

                                                                        define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0

                                                                        define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

                                                                        Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

                                                                        void custom_environment_service_init(void) at_ble_uuid_t environment_service_uuid uint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUID uint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128 memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperature environment_service_characs[0]user_desc_len = 10 environment_service_characs[0]user_desc_max_len = 10 environment_service_characs[0]uuidtype = AT_BLE_UUID_128 memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16) environment_service_characs[0]properties = AT_BLE_CHAR_READ | AT_BLE_CHAR_NOTIFY environment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature value environment_service_characs[0]value_permissions = (AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuid ampenvironment_service_handlerNULL0 environment_service_characs1)=AT_BLE_SUCCESS) printf(n Assignment 41 Failed to Initialize custom environment service) else printf(n Assignment 41 Initialize custom environment service)

                                                                        Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param) at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )param if (event_param-gtstatus == AT_BLE_SUCCESS) printf(n Assignment 41Notification Successfully sent over the air)

                                                                        ATBTLC1000Appendix B Software Solution - Custom Service

                                                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 49

                                                                        else printf(n Assignment 41Sending Notification over the air failed) return AT_BLE_SUCCESS

                                                                        static at_ble_status_t custom_char_changed_app_event(void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle -gt char_new_value[0])) timer_flag = false hw_timer_start(10) printf(n Assignment 41Characteristic changed event) return AT_BLE_SUCCESS

                                                                        static const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handler characteristic_changed = custom_char_changed_app_event

                                                                        Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                                                        void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                                                                        Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                                                                        Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                                                                        static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                                                                        Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void)

                                                                        ATBTLC1000Appendix B Software Solution - Custom Service

                                                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 50

                                                                        Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                                                        timer callback function static void timer_callback_fn(void) Add timer callback functionality here timer_flag = true

                                                                        void button_cb(void) Add button callback functionality here

                                                                        static uint8_t Temperature_value = 25

                                                                        Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++ if(Temperature_value gt 75) Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set( environment_service_characs[0]char_val_handle (uint8_t )ampTemperature_value sizeof(Temperature_value)) ble_status = at_ble_notification_send(0 environment_service_characs[0]char_val_handle) if(ble_status = AT_BLE_SUCCESS) printf(fail to send temperature update notification )

                                                                        int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                                                                        Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                                                                        DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register Gap ATBTLC1000 Callbacks register_btlc1000_callbacks()

                                                                        Custom service init custom_environment_service_init()

                                                                        ATBTLC1000Appendix B Software Solution - Custom Service

                                                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 51

                                                                        Register Gatt server callback register_gatt_server_callbacks()

                                                                        Start Advertising process start_advertisement() while(true) ble_event_task() if(connected_flag == true ampamp timer_flag == true) timer_flag = false send_temperature_notification()

                                                                        ATBTLC1000Appendix B Software Solution - Custom Service

                                                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 52

                                                                        8 Document Revision HistoryRev B - 42018

                                                                        Section Changes

                                                                        Document Revised contents to match various Bluetooth Low Energy standard versions

                                                                        Rev A - 122017

                                                                        Section Changes

                                                                        Document Initial release

                                                                        ATBTLC1000Document Revision History

                                                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 53

                                                                        The Microchip Web Site

                                                                        Microchip provides online support via our web site at httpwwwmicrochipcom This web site is used asa means to make files and information easily available to customers Accessible by using your favoriteInternet browser the web site contains the following information

                                                                        bull Product Support ndash Data sheets and errata application notes and sample programs designresources userrsquos guides and hardware support documents latest software releases and archivedsoftware

                                                                        bull General Technical Support ndash Frequently Asked Questions (FAQ) technical support requestsonline discussion groups Microchip consultant program member listing

                                                                        bull Business of Microchip ndash Product selector and ordering guides latest Microchip press releaseslisting of seminars and events listings of Microchip sales offices distributors and factoryrepresentatives

                                                                        Customer Change Notification Service

                                                                        Microchiprsquos customer notification service helps keep customers current on Microchip productsSubscribers will receive e-mail notification whenever there are changes updates revisions or erratarelated to a specified product family or development tool of interest

                                                                        To register access the Microchip web site at httpwwwmicrochipcom Under ldquoSupportrdquo click onldquoCustomer Change Notificationrdquo and follow the registration instructions

                                                                        Customer Support

                                                                        Users of Microchip products can receive assistance through several channels

                                                                        bull Distributor or Representativebull Local Sales Officebull Field Application Engineer (FAE)bull Technical Support

                                                                        Customers should contact their distributor representative or Field Application Engineer (FAE) for supportLocal sales offices are also available to help customers A listing of sales offices and locations is includedin the back of this document

                                                                        Technical support is available through the web site at httpwwwmicrochipcomsupport

                                                                        Microchip Devices Code Protection Feature

                                                                        Note the following details of the code protection feature on Microchip devices

                                                                        bull Microchip products meet the specification contained in their particular Microchip Data Sheetbull Microchip believes that its family of products is one of the most secure families of its kind on the

                                                                        market today when used in the intended manner and under normal conditionsbull There are dishonest and possibly illegal methods used to breach the code protection feature All of

                                                                        these methods to our knowledge require using the Microchip products in a manner outside theoperating specifications contained in Microchiprsquos Data Sheets Most likely the person doing so isengaged in theft of intellectual property

                                                                        bull Microchip is willing to work with the customer who is concerned about the integrity of their code

                                                                        ATBTLC1000

                                                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 54

                                                                        bull Neither Microchip nor any other semiconductor manufacturer can guarantee the security of theircode Code protection does not mean that we are guaranteeing the product as ldquounbreakablerdquo

                                                                        Code protection is constantly evolving We at Microchip are committed to continuously improving thecode protection features of our products Attempts to break Microchiprsquos code protection feature may be aviolation of the Digital Millennium Copyright Act If such acts allow unauthorized access to your softwareor other copyrighted work you may have a right to sue for relief under that Act

                                                                        Legal Notice

                                                                        Information contained in this publication regarding device applications and the like is provided only foryour convenience and may be superseded by updates It is your responsibility to ensure that yourapplication meets with your specifications MICROCHIP MAKES NO REPRESENTATIONS ORWARRANTIES OF ANY KIND WHETHER EXPRESS OR IMPLIED WRITTEN OR ORAL STATUTORYOR OTHERWISE RELATED TO THE INFORMATION INCLUDING BUT NOT LIMITED TO ITSCONDITION QUALITY PERFORMANCE MERCHANTABILITY OR FITNESS FOR PURPOSEMicrochip disclaims all liability arising from this information and its use Use of Microchip devices in lifesupport andor safety applications is entirely at the buyerrsquos risk and the buyer agrees to defendindemnify and hold harmless Microchip from any and all damages claims suits or expenses resultingfrom such use No licenses are conveyed implicitly or otherwise under any Microchip intellectualproperty rights unless otherwise stated

                                                                        Trademarks

                                                                        The Microchip name and logo the Microchip logo AnyRate AVR AVR logo AVR Freaks BeaconThingsBitCloud CryptoMemory CryptoRF dsPIC FlashFlex flexPWR Heldo JukeBlox KeeLoq KeeLoq logoKleer LANCheck LINK MD maXStylus maXTouch MediaLB megaAVR MOST MOST logo MPLABOptoLyzer PIC picoPower PICSTART PIC32 logo Prochip Designer QTouch RightTouch SAM-BASpyNIC SST SST Logo SuperFlash tinyAVR UNIO and XMEGA are registered trademarks ofMicrochip Technology Incorporated in the USA and other countries

                                                                        ClockWorks The Embedded Control Solutions Company EtherSynch Hyper Speed Control HyperLightLoad IntelliMOS mTouch Precision Edge and Quiet-Wire are registered trademarks of MicrochipTechnology Incorporated in the USA

                                                                        Adjacent Key Suppression AKS Analog-for-the-Digital Age Any Capacitor AnyIn AnyOut BodyComchipKIT chipKIT logo CodeGuard CryptoAuthentication CryptoCompanion CryptoControllerdsPICDEM dsPICDEMnet Dynamic Average Matching DAM ECAN EtherGREEN In-Circuit SerialProgramming ICSP Inter-Chip Connectivity JitterBlocker KleerNet KleerNet logo Mindi MiWimotorBench MPASM MPF MPLAB Certified logo MPLIB MPLINK MultiTRAK NetDetach OmniscientCode Generation PICDEM PICDEMnet PICkit PICtail PureSilicon QMatrix RightTouch logo REALICE Ripple Blocker SAM-ICE Serial Quad IO SMART-IS SQI SuperSwitcher SuperSwitcher II TotalEndurance TSHARC USBCheck VariSense ViewSpan WiperLock Wireless DNA and ZENA aretrademarks of Microchip Technology Incorporated in the USA and other countries

                                                                        SQTP is a service mark of Microchip Technology Incorporated in the USA

                                                                        Silicon Storage Technology is a registered trademark of Microchip Technology Inc in other countries

                                                                        GestIC is a registered trademark of Microchip Technology Germany II GmbH amp Co KG a subsidiary ofMicrochip Technology Inc in other countries

                                                                        All other trademarks mentioned herein are property of their respective companies

                                                                        ATBTLC1000

                                                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 55

                                                                        copy 2018 Microchip Technology Incorporated Printed in the USA All Rights Reserved

                                                                        ISBN 978-1-5224-2921-0

                                                                        Quality Management System Certified by DNV

                                                                        ISOTS 16949Microchip received ISOTS-169492009 certification for its worldwide headquarters design and waferfabrication facilities in Chandler and Tempe Arizona Gresham Oregon and design centers in Californiaand India The Companyrsquos quality system processes and procedures are for its PICreg MCUs and dsPICreg

                                                                        DSCs KEELOQreg code hopping devices Serial EEPROMs microperipherals nonvolatile memory andanalog products In addition Microchiprsquos quality system for the design and manufacture of developmentsystems is ISO 90012000 certified

                                                                        ATBTLC1000

                                                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 56

                                                                        AMERICAS ASIAPACIFIC ASIAPACIFIC EUROPECorporate Office2355 West Chandler BlvdChandler AZ 85224-6199Tel 480-792-7200Fax 480-792-7277Technical SupporthttpwwwmicrochipcomsupportWeb AddresswwwmicrochipcomAtlantaDuluth GATel 678-957-9614Fax 678-957-1455Austin TXTel 512-257-3370BostonWestborough MATel 774-760-0087Fax 774-760-0088ChicagoItasca ILTel 630-285-0071Fax 630-285-0075DallasAddison TXTel 972-818-7423Fax 972-818-2924DetroitNovi MITel 248-848-4000Houston TXTel 281-894-5983IndianapolisNoblesville INTel 317-773-8323Fax 317-773-5453Tel 317-536-2380Los AngelesMission Viejo CATel 949-462-9523Fax 949-462-9608Tel 951-273-7800Raleigh NCTel 919-844-7510New York NYTel 631-435-6000San Jose CATel 408-735-9110Tel 408-436-4270Canada - TorontoTel 905-695-1980Fax 905-695-2078

                                                                        Australia - SydneyTel 61-2-9868-6733China - BeijingTel 86-10-8569-7000China - ChengduTel 86-28-8665-5511China - ChongqingTel 86-23-8980-9588China - DongguanTel 86-769-8702-9880China - GuangzhouTel 86-20-8755-8029China - HangzhouTel 86-571-8792-8115China - Hong Kong SARTel 852-2943-5100China - NanjingTel 86-25-8473-2460China - QingdaoTel 86-532-8502-7355China - ShanghaiTel 86-21-3326-8000China - ShenyangTel 86-24-2334-2829China - ShenzhenTel 86-755-8864-2200China - SuzhouTel 86-186-6233-1526China - WuhanTel 86-27-5980-5300China - XianTel 86-29-8833-7252China - XiamenTel 86-592-2388138China - ZhuhaiTel 86-756-3210040

                                                                        India - BangaloreTel 91-80-3090-4444India - New DelhiTel 91-11-4160-8631India - PuneTel 91-20-4121-0141Japan - OsakaTel 81-6-6152-7160Japan - TokyoTel 81-3-6880- 3770Korea - DaeguTel 82-53-744-4301Korea - SeoulTel 82-2-554-7200Malaysia - Kuala LumpurTel 60-3-7651-7906Malaysia - PenangTel 60-4-227-8870Philippines - ManilaTel 63-2-634-9065SingaporeTel 65-6334-8870Taiwan - Hsin ChuTel 886-3-577-8366Taiwan - KaohsiungTel 886-7-213-7830Taiwan - TaipeiTel 886-2-2508-8600Thailand - BangkokTel 66-2-694-1351Vietnam - Ho Chi MinhTel 84-28-5448-2100

                                                                        Austria - WelsTel 43-7242-2244-39Fax 43-7242-2244-393Denmark - CopenhagenTel 45-4450-2828Fax 45-4485-2829Finland - EspooTel 358-9-4520-820France - ParisTel 33-1-69-53-63-20Fax 33-1-69-30-90-79Germany - GarchingTel 49-8931-9700Germany - HaanTel 49-2129-3766400Germany - HeilbronnTel 49-7131-67-3636Germany - KarlsruheTel 49-721-625370Germany - MunichTel 49-89-627-144-0Fax 49-89-627-144-44Germany - RosenheimTel 49-8031-354-560Israel - RarsquoananaTel 972-9-744-7705Italy - MilanTel 39-0331-742611Fax 39-0331-466781Italy - PadovaTel 39-049-7625286Netherlands - DrunenTel 31-416-690399Fax 31-416-690340Norway - TrondheimTel 47-7289-7561Poland - WarsawTel 48-22-3325737Romania - BucharestTel 40-21-407-87-50Spain - MadridTel 34-91-708-08-90Fax 34-91-708-08-91Sweden - GothenbergTel 46-31-704-60-40Sweden - StockholmTel 46-8-5090-4654UK - WokinghamTel 44-118-921-5800Fax 44-118-921-5820

                                                                        Worldwide Sales and Service

                                                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 57

                                                                        • Introduction
                                                                        • Table of Contents
                                                                        • 1 Getting Started
                                                                          • 11 Software Prerequisites
                                                                            • 111 Installation Steps of Atmel Studio 7
                                                                              • 12 Software Setup
                                                                                • 121 Installation of Microchip SmartConnect application on a Mobile device
                                                                                  • 13 ATBTLC1000 Embedded Firmware
                                                                                  • 14 ATBTLC1000 Host Software API
                                                                                  • 15 Hardware Prerequisites
                                                                                    • 151 SMARTtrade SAM L21 Xplained Pro
                                                                                    • 152 ATBTLC1000ZR Xplained Pro Extension board
                                                                                      • 16 Hardware Setup
                                                                                        • 2 Creating the Project and Initializing
                                                                                          • 21 Creating Project from ASF
                                                                                          • 22 Configuring ASF for ATBTLC1000-ZR
                                                                                          • 23 Compiling and Testing the Project
                                                                                            • 3 Establishing Connection with Central Device
                                                                                              • 31 Configuring and Starting the Advertisement Process
                                                                                                • 311 Flags (AD Type 0x00)
                                                                                                • 312 Available Service UUID (AD Types 0x02 to 0x07)
                                                                                                • 313 Device Name (AD Types 0x08 to 0x09)
                                                                                                  • 3131 Setting the Advertisement Payload (ble_advertisement_data_set)
                                                                                                  • 3132 Starting the Advertisement Process (at_ble_adv_start)
                                                                                                    • 314 Advertisement Process
                                                                                                      • 3141 Starting the Advertisement Process
                                                                                                          • 32 Managing GAP events
                                                                                                            • 321 Handling of Connected and Disconnected GAP Events
                                                                                                                • 4 SettingHandling of Pre-Defined Service
                                                                                                                  • 41 Adding Device Info Service Component from ASF Wizard to Project
                                                                                                                  • 42 Configuring and Loading Device Information Service
                                                                                                                    • 421 Procedure to Configure and Load Device Info Service
                                                                                                                        • 5 Setting up and Handling Custom Service
                                                                                                                          • 51 Configuring and Loading the Custom Environment Service
                                                                                                                            • 511 Procedure to Configure and Load Custom Environment Service
                                                                                                                              • 52 Updating the Temperature Characteristic
                                                                                                                                • 521 Setting a Characteristic Value ( at_ble_characteristic_value_set)
                                                                                                                                • 522 Sending a Notification (at_ble_notification_send)
                                                                                                                                • 523 Sending Temperature Information Once in Every 10 Seconds to Central
                                                                                                                                    • 6 Appendix A Software Solution - Pre-Defined Svc
                                                                                                                                    • 7 Appendix B Software Solution - Custom Service
                                                                                                                                    • 8 Document Revision History
                                                                                                                                    • The Microchip Web Site
                                                                                                                                    • Customer Change Notification Service
                                                                                                                                    • Customer Support
                                                                                                                                    • Microchip Devices Code Protection Feature
                                                                                                                                    • Legal Notice
                                                                                                                                    • Trademarks
                                                                                                                                    • Quality Management System Certified by DNV
                                                                                                                                    • Worldwide Sales and Service

                                                                          5 Setting up and Handling Custom ServiceThe previous assignment describes the handling of Bluetooth Low Energy SIG defined device infoservice which is the predefined service available in ASF component This assignment describes thecustom service So the service initialization needs to be implemented In the context of customizedenvironment service the following service description is pushed in ATBTLC1000 memory

                                                                          Figure 5-1 Custom Service

                                                                          Custom Environment Service Description

                                                                          bull UUID type ndash Custom UUID (128-bit)bull UUID ndash 1bc5d5a5-0200-a687-e511-3639c1ba5af0

                                                                          Characteristic 0 (Temperature)

                                                                          bull User Description ndash Temperaturebull UUID type ndash Custom UUID (128-bit)bull UUID ndash 1bc5d5a5-0200-a687-e511-3639d8ba5af0bull Properties ndash Read Notifybull Value permission ndash No authorization requiredbull Client config permission ndash No permissionbull Server config permission ndash No permission

                                                                          Note  In this definition UUIDs are generated randomly Custom servicescharacteristics are free to useany 128-bit UUID less than the base UUID There is no reserved space for vendors to use 16-bit or 32-bitUUIDs

                                                                          With this definition any temperature change is notified to the central The notify mechanism allows thecentral to know when the data changes When notify property of the Client Characteristic ConfigurationDescriptor is enabled by the central and the device writes the new value then this updated value isautomatically sent to the central through a notification The central is not required to send readcharacteristic commands explicitly to the peripheral (GATT server)

                                                                          To setup and handle the custom environment service in ATBTLC1000 module the following steps areadded to the Host MCU application

                                                                          bull Configure and load the custom servicebull Update Temperature characteristic and notify to the central devicebull Receive and handle notification from the Host device

                                                                          ATBTLC1000Setting up and Handling Custom Service

                                                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 37

                                                                          Figure 5-2 Custom Service Flowchart

                                                                          51 Configuring and Loading the Custom Environment ServiceThe ATBTLC1000 Host driver provides the following set of GATT functions that allows it to push andupdate the service descriptions in the ATBTLC1000 SRAM memory

                                                                          Note  Before starting this assignment be sure to follow the steps mentioned in 2 Creating the Projectand Initializing and 3 Establishing Connection with Central Device

                                                                          Prototype ndashat_ble_status_t at_ble_primary_service_define(at_ble_uuid_t uuidat_ble_handle_t service_handleat_ble_included_service_t included_service_listuint16_t included_service_countat_ble_characteristic_t charactristic_listuint16_t charactristic_count)

                                                                          Description ndash Defines a new primary service along with its included services and characteristics inATBTLC1000 module

                                                                          Parameters

                                                                          bull Uuid [In] ndash primary service UUIDbull service_handle [Out] ndash service handle is returned herebull included_service_list [In] ndash array of included service referencesbull included_service_count [In] ndash number of elements in included_service_listbull charactristic_list [InOut] ndash an array of characteristics included in the service this array

                                                                          is update with respective characteristics handlesbull charactristic_count[In] ndash number of elements in charactristic_list

                                                                          ATBTLC1000Setting up and Handling Custom Service

                                                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 38

                                                                          Return ndash Execution Status

                                                                          bull Characteristics ndashndash Characteristics definition is done through specific array of following

                                                                          ldquoat_ble_characteristic_trdquo structure instancestypedef structat_ble_handle_t char_val_handle Handler (returned during service initialisation)at_ble_uuid_t uuid Characteristic UUID (type and value)at_ble_char_properties_t propertiesCharac Properties (read write notify)uint8_t init_value initial valueuint16_t value_init_len initial value lengthuint16_t value_max_len value max lengthat_ble_attr_permissions_t value_permissions access authorization and authenticationuint8_t user_desc User descriptionuint16_t user_desc_len User description lengthuint16_t user_desc_max_len User description max lengthat_ble_char_presentation_t presentation_format Presentation formatat_ble_attr_permissions_t user_desc_permissions User description permissionat_ble_attr_permissions_t client_config_permissions client permissionat_ble_attr_permissions_t server_config_permissions server permissionat_ble_handle_t user_desc_handle description handlerat_ble_handle_t client_config_handle Client config handlerat_ble_handle_t server_config_handle Server config handler at_ble_characteristic_t

                                                                          511 Procedure to Configure and Load Custom Environment Service1 Define the following service UUID and characteristic UUID in startup_templatec file

                                                                          define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

                                                                          2 Define the following environment service handler and characteristics variable as global instartup_templatec file Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

                                                                          3 Add the following service initialization function custom_environment_service_init instartup_templatecvoid custom_environment_service_init(void) at_ble_uuid_t environment_service_uuiduint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUIDuint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperatureenvironment_service_characs[0]user_desc_len = 10environment_service_characs[0]user_desc_max_len = 10environment_service_characs[0]uuidtype = AT_BLE_UUID_128memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16)environment_service_characs[0]properties = AT_BLE_CHAR_READ |AT_BLE_CHAR_NOTIFYenvironment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature valueenvironment_service_characs[0]value_permissions =(AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuidampenvironment_service_handlerNULL0environment_service_characs1)=AT_BLE_SUCCESS)printf(n Assignment 41 Failed to Initialize custom environment service)

                                                                          ATBTLC1000Setting up and Handling Custom Service

                                                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 39

                                                                          elseprintf(n Assignment 41 Initialize custom environment service)

                                                                          4 Declare and implement the following GATT event callback functioncustom_char_changed_app_event in startup_templatec file If a client (central) enablesnotifications for a server the server (peripheral) receives an AT_BLE_CHARACTERISTIC_CHANGEDevent and this event callback is called Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

                                                                          5 Declare and implement the following custom_notification_confirmation_handlerfunction in startup_templatec file Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param)at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )paramif (event_param-gtstatus == AT_BLE_SUCCESS)printf(n Assignment 41Notification Successfully sent over the air) else printf(n Assignment 41Sending Notification over the air failed)return AT_BLE_SUCCESS

                                                                          6 Declare the following GATT server callback structure in startup_templatec file Thisassignment uses two GATT callbacksstatic const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handlercharacteristic_changed = custom_char_changed_app_event

                                                                          7 Add the following register_gatt_server_callbacks function in startup_templatec toregister GATT server callback for notification confirmation event Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks)ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACKBLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle)if (ble_status = true)printf(nError when Registering ATBTLC1000 callbacks)

                                                                          8 Add custom_environment_service_init and register_gatt_server_callbacksfunction calls prior to start advertisement in the application main routine to initialize custom serviceand to register the GATT server callbacksint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()

                                                                          ATBTLC1000Setting up and Handling Custom Service

                                                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 40

                                                                          endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks() Custom service init custom_environment_service_init ( ) Register Gatt server callbacks register_gatt_server_callbacks ( ) Start Advertising process start_advertisement()while(true)ble_event_task()

                                                                          9 Click to save the project ltCtrl+Sgt

                                                                          10 Compile the project by pressing button ltF7gt11 Verify that no build error appears in the Atmel Studio output window

                                                                          Figure 5-3 Atmel Studio Output Window

                                                                          12 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt13 Open the ldquoMicrochip SmartConnectrdquo application on Android or iOS device14 Connect and pair to the peripheral (pass key 123456)15 Custom service must now be visible after pairing with peripheral under Microchip SmartConnect

                                                                          application

                                                                          ATBTLC1000Setting up and Handling Custom Service

                                                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 41

                                                                          Figure 5-4 Service List in Microchip SmartConnect Application

                                                                          Note  Custom service is displayed as unknown service in the above figure as this service is not aSIG-defined service

                                                                          Figure 5-5 General Information

                                                                          16 Serial terminal client must display the following Log output

                                                                          ATBTLC1000Setting up and Handling Custom Service

                                                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 42

                                                                          Figure 5-6 Log Output Window

                                                                          52 Updating the Temperature CharacteristicIn the previous assignment the custom Temperature characteristic is defined with a notify attribute Thistype of attribute requires notification to be sent to central when a new characteristic value is availableThe update of any ldquonotifyrdquo characteristic value is based on following interaction between the Host MCUand the ATBTLC1000Figure 5-7 Characteristic Notification

                                                                          521 Setting a Characteristic Value ( at_ble_characteristic_value_set)Prototype ndashat_ble_status_t at_ble_characteristic_value_setat_ble_handle_t handleuint8_t valueuint16_t len)

                                                                          Description ndash Sets a characteristic value in ATBTLC1000 memory

                                                                          Parameters ndash

                                                                          ATBTLC1000Setting up and Handling Custom Service

                                                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 43

                                                                          bull handle [inout] ndash Pointer to Characteristic handle to be changedbull value [in] ndash New valuebull len [in] ndash Value length in bytes

                                                                          Return ndash Execution Status

                                                                          522 Sending a Notification (at_ble_notification_send)Prototype ndashat_ble_status_t at_ble_notification_send(at_ble_handle_t conn_handleat_ble_handle_t attr_handle)

                                                                          Description ndash Sends a Notification

                                                                          Parameters ndash

                                                                          bull conn_handle[in] ndash handle of the connection to be notifiedbull attr_handle [in] ndash handle of the attribute originating the notification

                                                                          Return ndash Execution Status

                                                                          523 Sending Temperature Information Once in Every 10 Seconds to Central1 Modify the following ldquotimer_callback_fnrdquo callback function from the startup_templatec

                                                                          filestatic void timer_callback_fn(void)timer_flag = true

                                                                          2 hw_timer_init()in main routine of startup_templatec initializes the hardware timer3 If a client (Central) enables the notifications for a server the server (Peripheral) receives an

                                                                          AT_BLE_CHARACTERISTIC_CHANGED event callback then start the periodic 10 second timer forsending the notification Add the following code in previously definedcustom_char_changed_app_event function Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))timer_flag = falsehw_timer_start(10)printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

                                                                          4 Declare the following Temperature_value global variable in startup_templatec staticuint8_t Temperature_value = 25 as static

                                                                          5 Add the following send_temperature_notification function in startup_templatec tosend temperature every 10 seconds Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++

                                                                          ATBTLC1000Setting up and Handling Custom Service

                                                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 44

                                                                          if(Temperature_value gt 75)Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set(environment_service_characs[0]char_val_handle(uint8_t )ampTemperature_valuesizeof(Temperature_value))ble_status = at_ble_notification_send(0environment_service_characs[0]char_val_handle)if(ble_status = AT_BLE_SUCCESS)printf(fail to send temperature update notification )

                                                                          6 Add the following code in main routine to send temperature data every 10 secondswhile (1) ble_event_task()if(connected_flag == true ampamp timer_flag == truetimer_flag = falsesend_temperature_notification()

                                                                          7 Click to save the project ltCtrl+Sgt

                                                                          8 Compile the project by pressing the button ltF7gt9 Verify that no build error appears in Atmel Studio output window

                                                                          Figure 5-8 Atmel Studio Output Window

                                                                          10 Click to program the project binary on the L21 Xplained XSTK11 Open ldquoMicrochip SmartConnectrdquo Application on Android or iOS device12 Connect and pair to the peripheral (pass key 123456)13 Click NOTIFY to start the notification14 Temperature information in HEX values must be displayed in Microchip SmartConnect application

                                                                          ATBTLC1000Setting up and Handling Custom Service

                                                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 45

                                                                          Figure 5-9 Notification Window

                                                                          15 Serial terminal must display the following log outputFigure 5-10 Log Output Window

                                                                          ATBTLC1000Setting up and Handling Custom Service

                                                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 46

                                                                          6 Appendix A Software Solution - Pre-Defined SvcThe following is the code implementation for handling of pre-defined service done in 4 SettingHandlingof Pre-Defined Service

                                                                          - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehinclude device_infoh

                                                                          volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false Services handlers dis_gatt_service_handler_t dis_service_handler

                                                                          static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

                                                                          void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                                                                          Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                                                                          Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                                                                          static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                                                                          Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void) Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks)

                                                                          ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

                                                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 47

                                                                          ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                                                          timer callback function static void timer_callback_fn(void) Add timer callback functionality here

                                                                          void button_cb(void) Add button callback functionality here

                                                                          int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                                                                          Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                                                                          DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks()

                                                                          Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service) dis_init_service(ampdis_service_handler) Define the primary service in the GATT server database if((dis_primary_service_define(ampdis_service_handler)) = AT_BLE_SUCCESS) printf(Device Information Service definition failed)

                                                                          Start Advertising process start_advertisement() while(true) ble_event_task()

                                                                          ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

                                                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 48

                                                                          7 Appendix B Software Solution - Custom ServiceThe following is the code implementation for handling of pre-defined service done in 5 Setting up andHandling Custom Service

                                                                          - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templateh

                                                                          volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false

                                                                          static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

                                                                          define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0

                                                                          define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

                                                                          Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

                                                                          void custom_environment_service_init(void) at_ble_uuid_t environment_service_uuid uint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUID uint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128 memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperature environment_service_characs[0]user_desc_len = 10 environment_service_characs[0]user_desc_max_len = 10 environment_service_characs[0]uuidtype = AT_BLE_UUID_128 memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16) environment_service_characs[0]properties = AT_BLE_CHAR_READ | AT_BLE_CHAR_NOTIFY environment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature value environment_service_characs[0]value_permissions = (AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuid ampenvironment_service_handlerNULL0 environment_service_characs1)=AT_BLE_SUCCESS) printf(n Assignment 41 Failed to Initialize custom environment service) else printf(n Assignment 41 Initialize custom environment service)

                                                                          Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param) at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )param if (event_param-gtstatus == AT_BLE_SUCCESS) printf(n Assignment 41Notification Successfully sent over the air)

                                                                          ATBTLC1000Appendix B Software Solution - Custom Service

                                                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 49

                                                                          else printf(n Assignment 41Sending Notification over the air failed) return AT_BLE_SUCCESS

                                                                          static at_ble_status_t custom_char_changed_app_event(void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle -gt char_new_value[0])) timer_flag = false hw_timer_start(10) printf(n Assignment 41Characteristic changed event) return AT_BLE_SUCCESS

                                                                          static const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handler characteristic_changed = custom_char_changed_app_event

                                                                          Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                                                          void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                                                                          Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                                                                          Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                                                                          static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                                                                          Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void)

                                                                          ATBTLC1000Appendix B Software Solution - Custom Service

                                                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 50

                                                                          Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                                                          timer callback function static void timer_callback_fn(void) Add timer callback functionality here timer_flag = true

                                                                          void button_cb(void) Add button callback functionality here

                                                                          static uint8_t Temperature_value = 25

                                                                          Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++ if(Temperature_value gt 75) Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set( environment_service_characs[0]char_val_handle (uint8_t )ampTemperature_value sizeof(Temperature_value)) ble_status = at_ble_notification_send(0 environment_service_characs[0]char_val_handle) if(ble_status = AT_BLE_SUCCESS) printf(fail to send temperature update notification )

                                                                          int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                                                                          Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                                                                          DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register Gap ATBTLC1000 Callbacks register_btlc1000_callbacks()

                                                                          Custom service init custom_environment_service_init()

                                                                          ATBTLC1000Appendix B Software Solution - Custom Service

                                                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 51

                                                                          Register Gatt server callback register_gatt_server_callbacks()

                                                                          Start Advertising process start_advertisement() while(true) ble_event_task() if(connected_flag == true ampamp timer_flag == true) timer_flag = false send_temperature_notification()

                                                                          ATBTLC1000Appendix B Software Solution - Custom Service

                                                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 52

                                                                          8 Document Revision HistoryRev B - 42018

                                                                          Section Changes

                                                                          Document Revised contents to match various Bluetooth Low Energy standard versions

                                                                          Rev A - 122017

                                                                          Section Changes

                                                                          Document Initial release

                                                                          ATBTLC1000Document Revision History

                                                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 53

                                                                          The Microchip Web Site

                                                                          Microchip provides online support via our web site at httpwwwmicrochipcom This web site is used asa means to make files and information easily available to customers Accessible by using your favoriteInternet browser the web site contains the following information

                                                                          bull Product Support ndash Data sheets and errata application notes and sample programs designresources userrsquos guides and hardware support documents latest software releases and archivedsoftware

                                                                          bull General Technical Support ndash Frequently Asked Questions (FAQ) technical support requestsonline discussion groups Microchip consultant program member listing

                                                                          bull Business of Microchip ndash Product selector and ordering guides latest Microchip press releaseslisting of seminars and events listings of Microchip sales offices distributors and factoryrepresentatives

                                                                          Customer Change Notification Service

                                                                          Microchiprsquos customer notification service helps keep customers current on Microchip productsSubscribers will receive e-mail notification whenever there are changes updates revisions or erratarelated to a specified product family or development tool of interest

                                                                          To register access the Microchip web site at httpwwwmicrochipcom Under ldquoSupportrdquo click onldquoCustomer Change Notificationrdquo and follow the registration instructions

                                                                          Customer Support

                                                                          Users of Microchip products can receive assistance through several channels

                                                                          bull Distributor or Representativebull Local Sales Officebull Field Application Engineer (FAE)bull Technical Support

                                                                          Customers should contact their distributor representative or Field Application Engineer (FAE) for supportLocal sales offices are also available to help customers A listing of sales offices and locations is includedin the back of this document

                                                                          Technical support is available through the web site at httpwwwmicrochipcomsupport

                                                                          Microchip Devices Code Protection Feature

                                                                          Note the following details of the code protection feature on Microchip devices

                                                                          bull Microchip products meet the specification contained in their particular Microchip Data Sheetbull Microchip believes that its family of products is one of the most secure families of its kind on the

                                                                          market today when used in the intended manner and under normal conditionsbull There are dishonest and possibly illegal methods used to breach the code protection feature All of

                                                                          these methods to our knowledge require using the Microchip products in a manner outside theoperating specifications contained in Microchiprsquos Data Sheets Most likely the person doing so isengaged in theft of intellectual property

                                                                          bull Microchip is willing to work with the customer who is concerned about the integrity of their code

                                                                          ATBTLC1000

                                                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 54

                                                                          bull Neither Microchip nor any other semiconductor manufacturer can guarantee the security of theircode Code protection does not mean that we are guaranteeing the product as ldquounbreakablerdquo

                                                                          Code protection is constantly evolving We at Microchip are committed to continuously improving thecode protection features of our products Attempts to break Microchiprsquos code protection feature may be aviolation of the Digital Millennium Copyright Act If such acts allow unauthorized access to your softwareor other copyrighted work you may have a right to sue for relief under that Act

                                                                          Legal Notice

                                                                          Information contained in this publication regarding device applications and the like is provided only foryour convenience and may be superseded by updates It is your responsibility to ensure that yourapplication meets with your specifications MICROCHIP MAKES NO REPRESENTATIONS ORWARRANTIES OF ANY KIND WHETHER EXPRESS OR IMPLIED WRITTEN OR ORAL STATUTORYOR OTHERWISE RELATED TO THE INFORMATION INCLUDING BUT NOT LIMITED TO ITSCONDITION QUALITY PERFORMANCE MERCHANTABILITY OR FITNESS FOR PURPOSEMicrochip disclaims all liability arising from this information and its use Use of Microchip devices in lifesupport andor safety applications is entirely at the buyerrsquos risk and the buyer agrees to defendindemnify and hold harmless Microchip from any and all damages claims suits or expenses resultingfrom such use No licenses are conveyed implicitly or otherwise under any Microchip intellectualproperty rights unless otherwise stated

                                                                          Trademarks

                                                                          The Microchip name and logo the Microchip logo AnyRate AVR AVR logo AVR Freaks BeaconThingsBitCloud CryptoMemory CryptoRF dsPIC FlashFlex flexPWR Heldo JukeBlox KeeLoq KeeLoq logoKleer LANCheck LINK MD maXStylus maXTouch MediaLB megaAVR MOST MOST logo MPLABOptoLyzer PIC picoPower PICSTART PIC32 logo Prochip Designer QTouch RightTouch SAM-BASpyNIC SST SST Logo SuperFlash tinyAVR UNIO and XMEGA are registered trademarks ofMicrochip Technology Incorporated in the USA and other countries

                                                                          ClockWorks The Embedded Control Solutions Company EtherSynch Hyper Speed Control HyperLightLoad IntelliMOS mTouch Precision Edge and Quiet-Wire are registered trademarks of MicrochipTechnology Incorporated in the USA

                                                                          Adjacent Key Suppression AKS Analog-for-the-Digital Age Any Capacitor AnyIn AnyOut BodyComchipKIT chipKIT logo CodeGuard CryptoAuthentication CryptoCompanion CryptoControllerdsPICDEM dsPICDEMnet Dynamic Average Matching DAM ECAN EtherGREEN In-Circuit SerialProgramming ICSP Inter-Chip Connectivity JitterBlocker KleerNet KleerNet logo Mindi MiWimotorBench MPASM MPF MPLAB Certified logo MPLIB MPLINK MultiTRAK NetDetach OmniscientCode Generation PICDEM PICDEMnet PICkit PICtail PureSilicon QMatrix RightTouch logo REALICE Ripple Blocker SAM-ICE Serial Quad IO SMART-IS SQI SuperSwitcher SuperSwitcher II TotalEndurance TSHARC USBCheck VariSense ViewSpan WiperLock Wireless DNA and ZENA aretrademarks of Microchip Technology Incorporated in the USA and other countries

                                                                          SQTP is a service mark of Microchip Technology Incorporated in the USA

                                                                          Silicon Storage Technology is a registered trademark of Microchip Technology Inc in other countries

                                                                          GestIC is a registered trademark of Microchip Technology Germany II GmbH amp Co KG a subsidiary ofMicrochip Technology Inc in other countries

                                                                          All other trademarks mentioned herein are property of their respective companies

                                                                          ATBTLC1000

                                                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 55

                                                                          copy 2018 Microchip Technology Incorporated Printed in the USA All Rights Reserved

                                                                          ISBN 978-1-5224-2921-0

                                                                          Quality Management System Certified by DNV

                                                                          ISOTS 16949Microchip received ISOTS-169492009 certification for its worldwide headquarters design and waferfabrication facilities in Chandler and Tempe Arizona Gresham Oregon and design centers in Californiaand India The Companyrsquos quality system processes and procedures are for its PICreg MCUs and dsPICreg

                                                                          DSCs KEELOQreg code hopping devices Serial EEPROMs microperipherals nonvolatile memory andanalog products In addition Microchiprsquos quality system for the design and manufacture of developmentsystems is ISO 90012000 certified

                                                                          ATBTLC1000

                                                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 56

                                                                          AMERICAS ASIAPACIFIC ASIAPACIFIC EUROPECorporate Office2355 West Chandler BlvdChandler AZ 85224-6199Tel 480-792-7200Fax 480-792-7277Technical SupporthttpwwwmicrochipcomsupportWeb AddresswwwmicrochipcomAtlantaDuluth GATel 678-957-9614Fax 678-957-1455Austin TXTel 512-257-3370BostonWestborough MATel 774-760-0087Fax 774-760-0088ChicagoItasca ILTel 630-285-0071Fax 630-285-0075DallasAddison TXTel 972-818-7423Fax 972-818-2924DetroitNovi MITel 248-848-4000Houston TXTel 281-894-5983IndianapolisNoblesville INTel 317-773-8323Fax 317-773-5453Tel 317-536-2380Los AngelesMission Viejo CATel 949-462-9523Fax 949-462-9608Tel 951-273-7800Raleigh NCTel 919-844-7510New York NYTel 631-435-6000San Jose CATel 408-735-9110Tel 408-436-4270Canada - TorontoTel 905-695-1980Fax 905-695-2078

                                                                          Australia - SydneyTel 61-2-9868-6733China - BeijingTel 86-10-8569-7000China - ChengduTel 86-28-8665-5511China - ChongqingTel 86-23-8980-9588China - DongguanTel 86-769-8702-9880China - GuangzhouTel 86-20-8755-8029China - HangzhouTel 86-571-8792-8115China - Hong Kong SARTel 852-2943-5100China - NanjingTel 86-25-8473-2460China - QingdaoTel 86-532-8502-7355China - ShanghaiTel 86-21-3326-8000China - ShenyangTel 86-24-2334-2829China - ShenzhenTel 86-755-8864-2200China - SuzhouTel 86-186-6233-1526China - WuhanTel 86-27-5980-5300China - XianTel 86-29-8833-7252China - XiamenTel 86-592-2388138China - ZhuhaiTel 86-756-3210040

                                                                          India - BangaloreTel 91-80-3090-4444India - New DelhiTel 91-11-4160-8631India - PuneTel 91-20-4121-0141Japan - OsakaTel 81-6-6152-7160Japan - TokyoTel 81-3-6880- 3770Korea - DaeguTel 82-53-744-4301Korea - SeoulTel 82-2-554-7200Malaysia - Kuala LumpurTel 60-3-7651-7906Malaysia - PenangTel 60-4-227-8870Philippines - ManilaTel 63-2-634-9065SingaporeTel 65-6334-8870Taiwan - Hsin ChuTel 886-3-577-8366Taiwan - KaohsiungTel 886-7-213-7830Taiwan - TaipeiTel 886-2-2508-8600Thailand - BangkokTel 66-2-694-1351Vietnam - Ho Chi MinhTel 84-28-5448-2100

                                                                          Austria - WelsTel 43-7242-2244-39Fax 43-7242-2244-393Denmark - CopenhagenTel 45-4450-2828Fax 45-4485-2829Finland - EspooTel 358-9-4520-820France - ParisTel 33-1-69-53-63-20Fax 33-1-69-30-90-79Germany - GarchingTel 49-8931-9700Germany - HaanTel 49-2129-3766400Germany - HeilbronnTel 49-7131-67-3636Germany - KarlsruheTel 49-721-625370Germany - MunichTel 49-89-627-144-0Fax 49-89-627-144-44Germany - RosenheimTel 49-8031-354-560Israel - RarsquoananaTel 972-9-744-7705Italy - MilanTel 39-0331-742611Fax 39-0331-466781Italy - PadovaTel 39-049-7625286Netherlands - DrunenTel 31-416-690399Fax 31-416-690340Norway - TrondheimTel 47-7289-7561Poland - WarsawTel 48-22-3325737Romania - BucharestTel 40-21-407-87-50Spain - MadridTel 34-91-708-08-90Fax 34-91-708-08-91Sweden - GothenbergTel 46-31-704-60-40Sweden - StockholmTel 46-8-5090-4654UK - WokinghamTel 44-118-921-5800Fax 44-118-921-5820

                                                                          Worldwide Sales and Service

                                                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 57

                                                                          • Introduction
                                                                          • Table of Contents
                                                                          • 1 Getting Started
                                                                            • 11 Software Prerequisites
                                                                              • 111 Installation Steps of Atmel Studio 7
                                                                                • 12 Software Setup
                                                                                  • 121 Installation of Microchip SmartConnect application on a Mobile device
                                                                                    • 13 ATBTLC1000 Embedded Firmware
                                                                                    • 14 ATBTLC1000 Host Software API
                                                                                    • 15 Hardware Prerequisites
                                                                                      • 151 SMARTtrade SAM L21 Xplained Pro
                                                                                      • 152 ATBTLC1000ZR Xplained Pro Extension board
                                                                                        • 16 Hardware Setup
                                                                                          • 2 Creating the Project and Initializing
                                                                                            • 21 Creating Project from ASF
                                                                                            • 22 Configuring ASF for ATBTLC1000-ZR
                                                                                            • 23 Compiling and Testing the Project
                                                                                              • 3 Establishing Connection with Central Device
                                                                                                • 31 Configuring and Starting the Advertisement Process
                                                                                                  • 311 Flags (AD Type 0x00)
                                                                                                  • 312 Available Service UUID (AD Types 0x02 to 0x07)
                                                                                                  • 313 Device Name (AD Types 0x08 to 0x09)
                                                                                                    • 3131 Setting the Advertisement Payload (ble_advertisement_data_set)
                                                                                                    • 3132 Starting the Advertisement Process (at_ble_adv_start)
                                                                                                      • 314 Advertisement Process
                                                                                                        • 3141 Starting the Advertisement Process
                                                                                                            • 32 Managing GAP events
                                                                                                              • 321 Handling of Connected and Disconnected GAP Events
                                                                                                                  • 4 SettingHandling of Pre-Defined Service
                                                                                                                    • 41 Adding Device Info Service Component from ASF Wizard to Project
                                                                                                                    • 42 Configuring and Loading Device Information Service
                                                                                                                      • 421 Procedure to Configure and Load Device Info Service
                                                                                                                          • 5 Setting up and Handling Custom Service
                                                                                                                            • 51 Configuring and Loading the Custom Environment Service
                                                                                                                              • 511 Procedure to Configure and Load Custom Environment Service
                                                                                                                                • 52 Updating the Temperature Characteristic
                                                                                                                                  • 521 Setting a Characteristic Value ( at_ble_characteristic_value_set)
                                                                                                                                  • 522 Sending a Notification (at_ble_notification_send)
                                                                                                                                  • 523 Sending Temperature Information Once in Every 10 Seconds to Central
                                                                                                                                      • 6 Appendix A Software Solution - Pre-Defined Svc
                                                                                                                                      • 7 Appendix B Software Solution - Custom Service
                                                                                                                                      • 8 Document Revision History
                                                                                                                                      • The Microchip Web Site
                                                                                                                                      • Customer Change Notification Service
                                                                                                                                      • Customer Support
                                                                                                                                      • Microchip Devices Code Protection Feature
                                                                                                                                      • Legal Notice
                                                                                                                                      • Trademarks
                                                                                                                                      • Quality Management System Certified by DNV
                                                                                                                                      • Worldwide Sales and Service

                                                                            Figure 5-2 Custom Service Flowchart

                                                                            51 Configuring and Loading the Custom Environment ServiceThe ATBTLC1000 Host driver provides the following set of GATT functions that allows it to push andupdate the service descriptions in the ATBTLC1000 SRAM memory

                                                                            Note  Before starting this assignment be sure to follow the steps mentioned in 2 Creating the Projectand Initializing and 3 Establishing Connection with Central Device

                                                                            Prototype ndashat_ble_status_t at_ble_primary_service_define(at_ble_uuid_t uuidat_ble_handle_t service_handleat_ble_included_service_t included_service_listuint16_t included_service_countat_ble_characteristic_t charactristic_listuint16_t charactristic_count)

                                                                            Description ndash Defines a new primary service along with its included services and characteristics inATBTLC1000 module

                                                                            Parameters

                                                                            bull Uuid [In] ndash primary service UUIDbull service_handle [Out] ndash service handle is returned herebull included_service_list [In] ndash array of included service referencesbull included_service_count [In] ndash number of elements in included_service_listbull charactristic_list [InOut] ndash an array of characteristics included in the service this array

                                                                            is update with respective characteristics handlesbull charactristic_count[In] ndash number of elements in charactristic_list

                                                                            ATBTLC1000Setting up and Handling Custom Service

                                                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 38

                                                                            Return ndash Execution Status

                                                                            bull Characteristics ndashndash Characteristics definition is done through specific array of following

                                                                            ldquoat_ble_characteristic_trdquo structure instancestypedef structat_ble_handle_t char_val_handle Handler (returned during service initialisation)at_ble_uuid_t uuid Characteristic UUID (type and value)at_ble_char_properties_t propertiesCharac Properties (read write notify)uint8_t init_value initial valueuint16_t value_init_len initial value lengthuint16_t value_max_len value max lengthat_ble_attr_permissions_t value_permissions access authorization and authenticationuint8_t user_desc User descriptionuint16_t user_desc_len User description lengthuint16_t user_desc_max_len User description max lengthat_ble_char_presentation_t presentation_format Presentation formatat_ble_attr_permissions_t user_desc_permissions User description permissionat_ble_attr_permissions_t client_config_permissions client permissionat_ble_attr_permissions_t server_config_permissions server permissionat_ble_handle_t user_desc_handle description handlerat_ble_handle_t client_config_handle Client config handlerat_ble_handle_t server_config_handle Server config handler at_ble_characteristic_t

                                                                            511 Procedure to Configure and Load Custom Environment Service1 Define the following service UUID and characteristic UUID in startup_templatec file

                                                                            define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

                                                                            2 Define the following environment service handler and characteristics variable as global instartup_templatec file Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

                                                                            3 Add the following service initialization function custom_environment_service_init instartup_templatecvoid custom_environment_service_init(void) at_ble_uuid_t environment_service_uuiduint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUIDuint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperatureenvironment_service_characs[0]user_desc_len = 10environment_service_characs[0]user_desc_max_len = 10environment_service_characs[0]uuidtype = AT_BLE_UUID_128memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16)environment_service_characs[0]properties = AT_BLE_CHAR_READ |AT_BLE_CHAR_NOTIFYenvironment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature valueenvironment_service_characs[0]value_permissions =(AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuidampenvironment_service_handlerNULL0environment_service_characs1)=AT_BLE_SUCCESS)printf(n Assignment 41 Failed to Initialize custom environment service)

                                                                            ATBTLC1000Setting up and Handling Custom Service

                                                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 39

                                                                            elseprintf(n Assignment 41 Initialize custom environment service)

                                                                            4 Declare and implement the following GATT event callback functioncustom_char_changed_app_event in startup_templatec file If a client (central) enablesnotifications for a server the server (peripheral) receives an AT_BLE_CHARACTERISTIC_CHANGEDevent and this event callback is called Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

                                                                            5 Declare and implement the following custom_notification_confirmation_handlerfunction in startup_templatec file Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param)at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )paramif (event_param-gtstatus == AT_BLE_SUCCESS)printf(n Assignment 41Notification Successfully sent over the air) else printf(n Assignment 41Sending Notification over the air failed)return AT_BLE_SUCCESS

                                                                            6 Declare the following GATT server callback structure in startup_templatec file Thisassignment uses two GATT callbacksstatic const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handlercharacteristic_changed = custom_char_changed_app_event

                                                                            7 Add the following register_gatt_server_callbacks function in startup_templatec toregister GATT server callback for notification confirmation event Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks)ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACKBLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle)if (ble_status = true)printf(nError when Registering ATBTLC1000 callbacks)

                                                                            8 Add custom_environment_service_init and register_gatt_server_callbacksfunction calls prior to start advertisement in the application main routine to initialize custom serviceand to register the GATT server callbacksint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()

                                                                            ATBTLC1000Setting up and Handling Custom Service

                                                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 40

                                                                            endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks() Custom service init custom_environment_service_init ( ) Register Gatt server callbacks register_gatt_server_callbacks ( ) Start Advertising process start_advertisement()while(true)ble_event_task()

                                                                            9 Click to save the project ltCtrl+Sgt

                                                                            10 Compile the project by pressing button ltF7gt11 Verify that no build error appears in the Atmel Studio output window

                                                                            Figure 5-3 Atmel Studio Output Window

                                                                            12 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt13 Open the ldquoMicrochip SmartConnectrdquo application on Android or iOS device14 Connect and pair to the peripheral (pass key 123456)15 Custom service must now be visible after pairing with peripheral under Microchip SmartConnect

                                                                            application

                                                                            ATBTLC1000Setting up and Handling Custom Service

                                                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 41

                                                                            Figure 5-4 Service List in Microchip SmartConnect Application

                                                                            Note  Custom service is displayed as unknown service in the above figure as this service is not aSIG-defined service

                                                                            Figure 5-5 General Information

                                                                            16 Serial terminal client must display the following Log output

                                                                            ATBTLC1000Setting up and Handling Custom Service

                                                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 42

                                                                            Figure 5-6 Log Output Window

                                                                            52 Updating the Temperature CharacteristicIn the previous assignment the custom Temperature characteristic is defined with a notify attribute Thistype of attribute requires notification to be sent to central when a new characteristic value is availableThe update of any ldquonotifyrdquo characteristic value is based on following interaction between the Host MCUand the ATBTLC1000Figure 5-7 Characteristic Notification

                                                                            521 Setting a Characteristic Value ( at_ble_characteristic_value_set)Prototype ndashat_ble_status_t at_ble_characteristic_value_setat_ble_handle_t handleuint8_t valueuint16_t len)

                                                                            Description ndash Sets a characteristic value in ATBTLC1000 memory

                                                                            Parameters ndash

                                                                            ATBTLC1000Setting up and Handling Custom Service

                                                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 43

                                                                            bull handle [inout] ndash Pointer to Characteristic handle to be changedbull value [in] ndash New valuebull len [in] ndash Value length in bytes

                                                                            Return ndash Execution Status

                                                                            522 Sending a Notification (at_ble_notification_send)Prototype ndashat_ble_status_t at_ble_notification_send(at_ble_handle_t conn_handleat_ble_handle_t attr_handle)

                                                                            Description ndash Sends a Notification

                                                                            Parameters ndash

                                                                            bull conn_handle[in] ndash handle of the connection to be notifiedbull attr_handle [in] ndash handle of the attribute originating the notification

                                                                            Return ndash Execution Status

                                                                            523 Sending Temperature Information Once in Every 10 Seconds to Central1 Modify the following ldquotimer_callback_fnrdquo callback function from the startup_templatec

                                                                            filestatic void timer_callback_fn(void)timer_flag = true

                                                                            2 hw_timer_init()in main routine of startup_templatec initializes the hardware timer3 If a client (Central) enables the notifications for a server the server (Peripheral) receives an

                                                                            AT_BLE_CHARACTERISTIC_CHANGED event callback then start the periodic 10 second timer forsending the notification Add the following code in previously definedcustom_char_changed_app_event function Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))timer_flag = falsehw_timer_start(10)printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

                                                                            4 Declare the following Temperature_value global variable in startup_templatec staticuint8_t Temperature_value = 25 as static

                                                                            5 Add the following send_temperature_notification function in startup_templatec tosend temperature every 10 seconds Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++

                                                                            ATBTLC1000Setting up and Handling Custom Service

                                                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 44

                                                                            if(Temperature_value gt 75)Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set(environment_service_characs[0]char_val_handle(uint8_t )ampTemperature_valuesizeof(Temperature_value))ble_status = at_ble_notification_send(0environment_service_characs[0]char_val_handle)if(ble_status = AT_BLE_SUCCESS)printf(fail to send temperature update notification )

                                                                            6 Add the following code in main routine to send temperature data every 10 secondswhile (1) ble_event_task()if(connected_flag == true ampamp timer_flag == truetimer_flag = falsesend_temperature_notification()

                                                                            7 Click to save the project ltCtrl+Sgt

                                                                            8 Compile the project by pressing the button ltF7gt9 Verify that no build error appears in Atmel Studio output window

                                                                            Figure 5-8 Atmel Studio Output Window

                                                                            10 Click to program the project binary on the L21 Xplained XSTK11 Open ldquoMicrochip SmartConnectrdquo Application on Android or iOS device12 Connect and pair to the peripheral (pass key 123456)13 Click NOTIFY to start the notification14 Temperature information in HEX values must be displayed in Microchip SmartConnect application

                                                                            ATBTLC1000Setting up and Handling Custom Service

                                                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 45

                                                                            Figure 5-9 Notification Window

                                                                            15 Serial terminal must display the following log outputFigure 5-10 Log Output Window

                                                                            ATBTLC1000Setting up and Handling Custom Service

                                                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 46

                                                                            6 Appendix A Software Solution - Pre-Defined SvcThe following is the code implementation for handling of pre-defined service done in 4 SettingHandlingof Pre-Defined Service

                                                                            - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehinclude device_infoh

                                                                            volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false Services handlers dis_gatt_service_handler_t dis_service_handler

                                                                            static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

                                                                            void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                                                                            Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                                                                            Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                                                                            static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                                                                            Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void) Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks)

                                                                            ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

                                                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 47

                                                                            ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                                                            timer callback function static void timer_callback_fn(void) Add timer callback functionality here

                                                                            void button_cb(void) Add button callback functionality here

                                                                            int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                                                                            Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                                                                            DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks()

                                                                            Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service) dis_init_service(ampdis_service_handler) Define the primary service in the GATT server database if((dis_primary_service_define(ampdis_service_handler)) = AT_BLE_SUCCESS) printf(Device Information Service definition failed)

                                                                            Start Advertising process start_advertisement() while(true) ble_event_task()

                                                                            ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

                                                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 48

                                                                            7 Appendix B Software Solution - Custom ServiceThe following is the code implementation for handling of pre-defined service done in 5 Setting up andHandling Custom Service

                                                                            - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templateh

                                                                            volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false

                                                                            static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

                                                                            define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0

                                                                            define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

                                                                            Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

                                                                            void custom_environment_service_init(void) at_ble_uuid_t environment_service_uuid uint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUID uint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128 memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperature environment_service_characs[0]user_desc_len = 10 environment_service_characs[0]user_desc_max_len = 10 environment_service_characs[0]uuidtype = AT_BLE_UUID_128 memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16) environment_service_characs[0]properties = AT_BLE_CHAR_READ | AT_BLE_CHAR_NOTIFY environment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature value environment_service_characs[0]value_permissions = (AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuid ampenvironment_service_handlerNULL0 environment_service_characs1)=AT_BLE_SUCCESS) printf(n Assignment 41 Failed to Initialize custom environment service) else printf(n Assignment 41 Initialize custom environment service)

                                                                            Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param) at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )param if (event_param-gtstatus == AT_BLE_SUCCESS) printf(n Assignment 41Notification Successfully sent over the air)

                                                                            ATBTLC1000Appendix B Software Solution - Custom Service

                                                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 49

                                                                            else printf(n Assignment 41Sending Notification over the air failed) return AT_BLE_SUCCESS

                                                                            static at_ble_status_t custom_char_changed_app_event(void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle -gt char_new_value[0])) timer_flag = false hw_timer_start(10) printf(n Assignment 41Characteristic changed event) return AT_BLE_SUCCESS

                                                                            static const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handler characteristic_changed = custom_char_changed_app_event

                                                                            Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                                                            void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                                                                            Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                                                                            Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                                                                            static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                                                                            Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void)

                                                                            ATBTLC1000Appendix B Software Solution - Custom Service

                                                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 50

                                                                            Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                                                            timer callback function static void timer_callback_fn(void) Add timer callback functionality here timer_flag = true

                                                                            void button_cb(void) Add button callback functionality here

                                                                            static uint8_t Temperature_value = 25

                                                                            Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++ if(Temperature_value gt 75) Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set( environment_service_characs[0]char_val_handle (uint8_t )ampTemperature_value sizeof(Temperature_value)) ble_status = at_ble_notification_send(0 environment_service_characs[0]char_val_handle) if(ble_status = AT_BLE_SUCCESS) printf(fail to send temperature update notification )

                                                                            int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                                                                            Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                                                                            DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register Gap ATBTLC1000 Callbacks register_btlc1000_callbacks()

                                                                            Custom service init custom_environment_service_init()

                                                                            ATBTLC1000Appendix B Software Solution - Custom Service

                                                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 51

                                                                            Register Gatt server callback register_gatt_server_callbacks()

                                                                            Start Advertising process start_advertisement() while(true) ble_event_task() if(connected_flag == true ampamp timer_flag == true) timer_flag = false send_temperature_notification()

                                                                            ATBTLC1000Appendix B Software Solution - Custom Service

                                                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 52

                                                                            8 Document Revision HistoryRev B - 42018

                                                                            Section Changes

                                                                            Document Revised contents to match various Bluetooth Low Energy standard versions

                                                                            Rev A - 122017

                                                                            Section Changes

                                                                            Document Initial release

                                                                            ATBTLC1000Document Revision History

                                                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 53

                                                                            The Microchip Web Site

                                                                            Microchip provides online support via our web site at httpwwwmicrochipcom This web site is used asa means to make files and information easily available to customers Accessible by using your favoriteInternet browser the web site contains the following information

                                                                            bull Product Support ndash Data sheets and errata application notes and sample programs designresources userrsquos guides and hardware support documents latest software releases and archivedsoftware

                                                                            bull General Technical Support ndash Frequently Asked Questions (FAQ) technical support requestsonline discussion groups Microchip consultant program member listing

                                                                            bull Business of Microchip ndash Product selector and ordering guides latest Microchip press releaseslisting of seminars and events listings of Microchip sales offices distributors and factoryrepresentatives

                                                                            Customer Change Notification Service

                                                                            Microchiprsquos customer notification service helps keep customers current on Microchip productsSubscribers will receive e-mail notification whenever there are changes updates revisions or erratarelated to a specified product family or development tool of interest

                                                                            To register access the Microchip web site at httpwwwmicrochipcom Under ldquoSupportrdquo click onldquoCustomer Change Notificationrdquo and follow the registration instructions

                                                                            Customer Support

                                                                            Users of Microchip products can receive assistance through several channels

                                                                            bull Distributor or Representativebull Local Sales Officebull Field Application Engineer (FAE)bull Technical Support

                                                                            Customers should contact their distributor representative or Field Application Engineer (FAE) for supportLocal sales offices are also available to help customers A listing of sales offices and locations is includedin the back of this document

                                                                            Technical support is available through the web site at httpwwwmicrochipcomsupport

                                                                            Microchip Devices Code Protection Feature

                                                                            Note the following details of the code protection feature on Microchip devices

                                                                            bull Microchip products meet the specification contained in their particular Microchip Data Sheetbull Microchip believes that its family of products is one of the most secure families of its kind on the

                                                                            market today when used in the intended manner and under normal conditionsbull There are dishonest and possibly illegal methods used to breach the code protection feature All of

                                                                            these methods to our knowledge require using the Microchip products in a manner outside theoperating specifications contained in Microchiprsquos Data Sheets Most likely the person doing so isengaged in theft of intellectual property

                                                                            bull Microchip is willing to work with the customer who is concerned about the integrity of their code

                                                                            ATBTLC1000

                                                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 54

                                                                            bull Neither Microchip nor any other semiconductor manufacturer can guarantee the security of theircode Code protection does not mean that we are guaranteeing the product as ldquounbreakablerdquo

                                                                            Code protection is constantly evolving We at Microchip are committed to continuously improving thecode protection features of our products Attempts to break Microchiprsquos code protection feature may be aviolation of the Digital Millennium Copyright Act If such acts allow unauthorized access to your softwareor other copyrighted work you may have a right to sue for relief under that Act

                                                                            Legal Notice

                                                                            Information contained in this publication regarding device applications and the like is provided only foryour convenience and may be superseded by updates It is your responsibility to ensure that yourapplication meets with your specifications MICROCHIP MAKES NO REPRESENTATIONS ORWARRANTIES OF ANY KIND WHETHER EXPRESS OR IMPLIED WRITTEN OR ORAL STATUTORYOR OTHERWISE RELATED TO THE INFORMATION INCLUDING BUT NOT LIMITED TO ITSCONDITION QUALITY PERFORMANCE MERCHANTABILITY OR FITNESS FOR PURPOSEMicrochip disclaims all liability arising from this information and its use Use of Microchip devices in lifesupport andor safety applications is entirely at the buyerrsquos risk and the buyer agrees to defendindemnify and hold harmless Microchip from any and all damages claims suits or expenses resultingfrom such use No licenses are conveyed implicitly or otherwise under any Microchip intellectualproperty rights unless otherwise stated

                                                                            Trademarks

                                                                            The Microchip name and logo the Microchip logo AnyRate AVR AVR logo AVR Freaks BeaconThingsBitCloud CryptoMemory CryptoRF dsPIC FlashFlex flexPWR Heldo JukeBlox KeeLoq KeeLoq logoKleer LANCheck LINK MD maXStylus maXTouch MediaLB megaAVR MOST MOST logo MPLABOptoLyzer PIC picoPower PICSTART PIC32 logo Prochip Designer QTouch RightTouch SAM-BASpyNIC SST SST Logo SuperFlash tinyAVR UNIO and XMEGA are registered trademarks ofMicrochip Technology Incorporated in the USA and other countries

                                                                            ClockWorks The Embedded Control Solutions Company EtherSynch Hyper Speed Control HyperLightLoad IntelliMOS mTouch Precision Edge and Quiet-Wire are registered trademarks of MicrochipTechnology Incorporated in the USA

                                                                            Adjacent Key Suppression AKS Analog-for-the-Digital Age Any Capacitor AnyIn AnyOut BodyComchipKIT chipKIT logo CodeGuard CryptoAuthentication CryptoCompanion CryptoControllerdsPICDEM dsPICDEMnet Dynamic Average Matching DAM ECAN EtherGREEN In-Circuit SerialProgramming ICSP Inter-Chip Connectivity JitterBlocker KleerNet KleerNet logo Mindi MiWimotorBench MPASM MPF MPLAB Certified logo MPLIB MPLINK MultiTRAK NetDetach OmniscientCode Generation PICDEM PICDEMnet PICkit PICtail PureSilicon QMatrix RightTouch logo REALICE Ripple Blocker SAM-ICE Serial Quad IO SMART-IS SQI SuperSwitcher SuperSwitcher II TotalEndurance TSHARC USBCheck VariSense ViewSpan WiperLock Wireless DNA and ZENA aretrademarks of Microchip Technology Incorporated in the USA and other countries

                                                                            SQTP is a service mark of Microchip Technology Incorporated in the USA

                                                                            Silicon Storage Technology is a registered trademark of Microchip Technology Inc in other countries

                                                                            GestIC is a registered trademark of Microchip Technology Germany II GmbH amp Co KG a subsidiary ofMicrochip Technology Inc in other countries

                                                                            All other trademarks mentioned herein are property of their respective companies

                                                                            ATBTLC1000

                                                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 55

                                                                            copy 2018 Microchip Technology Incorporated Printed in the USA All Rights Reserved

                                                                            ISBN 978-1-5224-2921-0

                                                                            Quality Management System Certified by DNV

                                                                            ISOTS 16949Microchip received ISOTS-169492009 certification for its worldwide headquarters design and waferfabrication facilities in Chandler and Tempe Arizona Gresham Oregon and design centers in Californiaand India The Companyrsquos quality system processes and procedures are for its PICreg MCUs and dsPICreg

                                                                            DSCs KEELOQreg code hopping devices Serial EEPROMs microperipherals nonvolatile memory andanalog products In addition Microchiprsquos quality system for the design and manufacture of developmentsystems is ISO 90012000 certified

                                                                            ATBTLC1000

                                                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 56

                                                                            AMERICAS ASIAPACIFIC ASIAPACIFIC EUROPECorporate Office2355 West Chandler BlvdChandler AZ 85224-6199Tel 480-792-7200Fax 480-792-7277Technical SupporthttpwwwmicrochipcomsupportWeb AddresswwwmicrochipcomAtlantaDuluth GATel 678-957-9614Fax 678-957-1455Austin TXTel 512-257-3370BostonWestborough MATel 774-760-0087Fax 774-760-0088ChicagoItasca ILTel 630-285-0071Fax 630-285-0075DallasAddison TXTel 972-818-7423Fax 972-818-2924DetroitNovi MITel 248-848-4000Houston TXTel 281-894-5983IndianapolisNoblesville INTel 317-773-8323Fax 317-773-5453Tel 317-536-2380Los AngelesMission Viejo CATel 949-462-9523Fax 949-462-9608Tel 951-273-7800Raleigh NCTel 919-844-7510New York NYTel 631-435-6000San Jose CATel 408-735-9110Tel 408-436-4270Canada - TorontoTel 905-695-1980Fax 905-695-2078

                                                                            Australia - SydneyTel 61-2-9868-6733China - BeijingTel 86-10-8569-7000China - ChengduTel 86-28-8665-5511China - ChongqingTel 86-23-8980-9588China - DongguanTel 86-769-8702-9880China - GuangzhouTel 86-20-8755-8029China - HangzhouTel 86-571-8792-8115China - Hong Kong SARTel 852-2943-5100China - NanjingTel 86-25-8473-2460China - QingdaoTel 86-532-8502-7355China - ShanghaiTel 86-21-3326-8000China - ShenyangTel 86-24-2334-2829China - ShenzhenTel 86-755-8864-2200China - SuzhouTel 86-186-6233-1526China - WuhanTel 86-27-5980-5300China - XianTel 86-29-8833-7252China - XiamenTel 86-592-2388138China - ZhuhaiTel 86-756-3210040

                                                                            India - BangaloreTel 91-80-3090-4444India - New DelhiTel 91-11-4160-8631India - PuneTel 91-20-4121-0141Japan - OsakaTel 81-6-6152-7160Japan - TokyoTel 81-3-6880- 3770Korea - DaeguTel 82-53-744-4301Korea - SeoulTel 82-2-554-7200Malaysia - Kuala LumpurTel 60-3-7651-7906Malaysia - PenangTel 60-4-227-8870Philippines - ManilaTel 63-2-634-9065SingaporeTel 65-6334-8870Taiwan - Hsin ChuTel 886-3-577-8366Taiwan - KaohsiungTel 886-7-213-7830Taiwan - TaipeiTel 886-2-2508-8600Thailand - BangkokTel 66-2-694-1351Vietnam - Ho Chi MinhTel 84-28-5448-2100

                                                                            Austria - WelsTel 43-7242-2244-39Fax 43-7242-2244-393Denmark - CopenhagenTel 45-4450-2828Fax 45-4485-2829Finland - EspooTel 358-9-4520-820France - ParisTel 33-1-69-53-63-20Fax 33-1-69-30-90-79Germany - GarchingTel 49-8931-9700Germany - HaanTel 49-2129-3766400Germany - HeilbronnTel 49-7131-67-3636Germany - KarlsruheTel 49-721-625370Germany - MunichTel 49-89-627-144-0Fax 49-89-627-144-44Germany - RosenheimTel 49-8031-354-560Israel - RarsquoananaTel 972-9-744-7705Italy - MilanTel 39-0331-742611Fax 39-0331-466781Italy - PadovaTel 39-049-7625286Netherlands - DrunenTel 31-416-690399Fax 31-416-690340Norway - TrondheimTel 47-7289-7561Poland - WarsawTel 48-22-3325737Romania - BucharestTel 40-21-407-87-50Spain - MadridTel 34-91-708-08-90Fax 34-91-708-08-91Sweden - GothenbergTel 46-31-704-60-40Sweden - StockholmTel 46-8-5090-4654UK - WokinghamTel 44-118-921-5800Fax 44-118-921-5820

                                                                            Worldwide Sales and Service

                                                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 57

                                                                            • Introduction
                                                                            • Table of Contents
                                                                            • 1 Getting Started
                                                                              • 11 Software Prerequisites
                                                                                • 111 Installation Steps of Atmel Studio 7
                                                                                  • 12 Software Setup
                                                                                    • 121 Installation of Microchip SmartConnect application on a Mobile device
                                                                                      • 13 ATBTLC1000 Embedded Firmware
                                                                                      • 14 ATBTLC1000 Host Software API
                                                                                      • 15 Hardware Prerequisites
                                                                                        • 151 SMARTtrade SAM L21 Xplained Pro
                                                                                        • 152 ATBTLC1000ZR Xplained Pro Extension board
                                                                                          • 16 Hardware Setup
                                                                                            • 2 Creating the Project and Initializing
                                                                                              • 21 Creating Project from ASF
                                                                                              • 22 Configuring ASF for ATBTLC1000-ZR
                                                                                              • 23 Compiling and Testing the Project
                                                                                                • 3 Establishing Connection with Central Device
                                                                                                  • 31 Configuring and Starting the Advertisement Process
                                                                                                    • 311 Flags (AD Type 0x00)
                                                                                                    • 312 Available Service UUID (AD Types 0x02 to 0x07)
                                                                                                    • 313 Device Name (AD Types 0x08 to 0x09)
                                                                                                      • 3131 Setting the Advertisement Payload (ble_advertisement_data_set)
                                                                                                      • 3132 Starting the Advertisement Process (at_ble_adv_start)
                                                                                                        • 314 Advertisement Process
                                                                                                          • 3141 Starting the Advertisement Process
                                                                                                              • 32 Managing GAP events
                                                                                                                • 321 Handling of Connected and Disconnected GAP Events
                                                                                                                    • 4 SettingHandling of Pre-Defined Service
                                                                                                                      • 41 Adding Device Info Service Component from ASF Wizard to Project
                                                                                                                      • 42 Configuring and Loading Device Information Service
                                                                                                                        • 421 Procedure to Configure and Load Device Info Service
                                                                                                                            • 5 Setting up and Handling Custom Service
                                                                                                                              • 51 Configuring and Loading the Custom Environment Service
                                                                                                                                • 511 Procedure to Configure and Load Custom Environment Service
                                                                                                                                  • 52 Updating the Temperature Characteristic
                                                                                                                                    • 521 Setting a Characteristic Value ( at_ble_characteristic_value_set)
                                                                                                                                    • 522 Sending a Notification (at_ble_notification_send)
                                                                                                                                    • 523 Sending Temperature Information Once in Every 10 Seconds to Central
                                                                                                                                        • 6 Appendix A Software Solution - Pre-Defined Svc
                                                                                                                                        • 7 Appendix B Software Solution - Custom Service
                                                                                                                                        • 8 Document Revision History
                                                                                                                                        • The Microchip Web Site
                                                                                                                                        • Customer Change Notification Service
                                                                                                                                        • Customer Support
                                                                                                                                        • Microchip Devices Code Protection Feature
                                                                                                                                        • Legal Notice
                                                                                                                                        • Trademarks
                                                                                                                                        • Quality Management System Certified by DNV
                                                                                                                                        • Worldwide Sales and Service

                                                                              Return ndash Execution Status

                                                                              bull Characteristics ndashndash Characteristics definition is done through specific array of following

                                                                              ldquoat_ble_characteristic_trdquo structure instancestypedef structat_ble_handle_t char_val_handle Handler (returned during service initialisation)at_ble_uuid_t uuid Characteristic UUID (type and value)at_ble_char_properties_t propertiesCharac Properties (read write notify)uint8_t init_value initial valueuint16_t value_init_len initial value lengthuint16_t value_max_len value max lengthat_ble_attr_permissions_t value_permissions access authorization and authenticationuint8_t user_desc User descriptionuint16_t user_desc_len User description lengthuint16_t user_desc_max_len User description max lengthat_ble_char_presentation_t presentation_format Presentation formatat_ble_attr_permissions_t user_desc_permissions User description permissionat_ble_attr_permissions_t client_config_permissions client permissionat_ble_attr_permissions_t server_config_permissions server permissionat_ble_handle_t user_desc_handle description handlerat_ble_handle_t client_config_handle Client config handlerat_ble_handle_t server_config_handle Server config handler at_ble_characteristic_t

                                                                              511 Procedure to Configure and Load Custom Environment Service1 Define the following service UUID and characteristic UUID in startup_templatec file

                                                                              define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

                                                                              2 Define the following environment service handler and characteristics variable as global instartup_templatec file Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

                                                                              3 Add the following service initialization function custom_environment_service_init instartup_templatecvoid custom_environment_service_init(void) at_ble_uuid_t environment_service_uuiduint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUIDuint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperatureenvironment_service_characs[0]user_desc_len = 10environment_service_characs[0]user_desc_max_len = 10environment_service_characs[0]uuidtype = AT_BLE_UUID_128memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16)environment_service_characs[0]properties = AT_BLE_CHAR_READ |AT_BLE_CHAR_NOTIFYenvironment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature valueenvironment_service_characs[0]value_permissions =(AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuidampenvironment_service_handlerNULL0environment_service_characs1)=AT_BLE_SUCCESS)printf(n Assignment 41 Failed to Initialize custom environment service)

                                                                              ATBTLC1000Setting up and Handling Custom Service

                                                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 39

                                                                              elseprintf(n Assignment 41 Initialize custom environment service)

                                                                              4 Declare and implement the following GATT event callback functioncustom_char_changed_app_event in startup_templatec file If a client (central) enablesnotifications for a server the server (peripheral) receives an AT_BLE_CHARACTERISTIC_CHANGEDevent and this event callback is called Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

                                                                              5 Declare and implement the following custom_notification_confirmation_handlerfunction in startup_templatec file Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param)at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )paramif (event_param-gtstatus == AT_BLE_SUCCESS)printf(n Assignment 41Notification Successfully sent over the air) else printf(n Assignment 41Sending Notification over the air failed)return AT_BLE_SUCCESS

                                                                              6 Declare the following GATT server callback structure in startup_templatec file Thisassignment uses two GATT callbacksstatic const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handlercharacteristic_changed = custom_char_changed_app_event

                                                                              7 Add the following register_gatt_server_callbacks function in startup_templatec toregister GATT server callback for notification confirmation event Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks)ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACKBLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle)if (ble_status = true)printf(nError when Registering ATBTLC1000 callbacks)

                                                                              8 Add custom_environment_service_init and register_gatt_server_callbacksfunction calls prior to start advertisement in the application main routine to initialize custom serviceand to register the GATT server callbacksint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()

                                                                              ATBTLC1000Setting up and Handling Custom Service

                                                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 40

                                                                              endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks() Custom service init custom_environment_service_init ( ) Register Gatt server callbacks register_gatt_server_callbacks ( ) Start Advertising process start_advertisement()while(true)ble_event_task()

                                                                              9 Click to save the project ltCtrl+Sgt

                                                                              10 Compile the project by pressing button ltF7gt11 Verify that no build error appears in the Atmel Studio output window

                                                                              Figure 5-3 Atmel Studio Output Window

                                                                              12 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt13 Open the ldquoMicrochip SmartConnectrdquo application on Android or iOS device14 Connect and pair to the peripheral (pass key 123456)15 Custom service must now be visible after pairing with peripheral under Microchip SmartConnect

                                                                              application

                                                                              ATBTLC1000Setting up and Handling Custom Service

                                                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 41

                                                                              Figure 5-4 Service List in Microchip SmartConnect Application

                                                                              Note  Custom service is displayed as unknown service in the above figure as this service is not aSIG-defined service

                                                                              Figure 5-5 General Information

                                                                              16 Serial terminal client must display the following Log output

                                                                              ATBTLC1000Setting up and Handling Custom Service

                                                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 42

                                                                              Figure 5-6 Log Output Window

                                                                              52 Updating the Temperature CharacteristicIn the previous assignment the custom Temperature characteristic is defined with a notify attribute Thistype of attribute requires notification to be sent to central when a new characteristic value is availableThe update of any ldquonotifyrdquo characteristic value is based on following interaction between the Host MCUand the ATBTLC1000Figure 5-7 Characteristic Notification

                                                                              521 Setting a Characteristic Value ( at_ble_characteristic_value_set)Prototype ndashat_ble_status_t at_ble_characteristic_value_setat_ble_handle_t handleuint8_t valueuint16_t len)

                                                                              Description ndash Sets a characteristic value in ATBTLC1000 memory

                                                                              Parameters ndash

                                                                              ATBTLC1000Setting up and Handling Custom Service

                                                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 43

                                                                              bull handle [inout] ndash Pointer to Characteristic handle to be changedbull value [in] ndash New valuebull len [in] ndash Value length in bytes

                                                                              Return ndash Execution Status

                                                                              522 Sending a Notification (at_ble_notification_send)Prototype ndashat_ble_status_t at_ble_notification_send(at_ble_handle_t conn_handleat_ble_handle_t attr_handle)

                                                                              Description ndash Sends a Notification

                                                                              Parameters ndash

                                                                              bull conn_handle[in] ndash handle of the connection to be notifiedbull attr_handle [in] ndash handle of the attribute originating the notification

                                                                              Return ndash Execution Status

                                                                              523 Sending Temperature Information Once in Every 10 Seconds to Central1 Modify the following ldquotimer_callback_fnrdquo callback function from the startup_templatec

                                                                              filestatic void timer_callback_fn(void)timer_flag = true

                                                                              2 hw_timer_init()in main routine of startup_templatec initializes the hardware timer3 If a client (Central) enables the notifications for a server the server (Peripheral) receives an

                                                                              AT_BLE_CHARACTERISTIC_CHANGED event callback then start the periodic 10 second timer forsending the notification Add the following code in previously definedcustom_char_changed_app_event function Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))timer_flag = falsehw_timer_start(10)printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

                                                                              4 Declare the following Temperature_value global variable in startup_templatec staticuint8_t Temperature_value = 25 as static

                                                                              5 Add the following send_temperature_notification function in startup_templatec tosend temperature every 10 seconds Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++

                                                                              ATBTLC1000Setting up and Handling Custom Service

                                                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 44

                                                                              if(Temperature_value gt 75)Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set(environment_service_characs[0]char_val_handle(uint8_t )ampTemperature_valuesizeof(Temperature_value))ble_status = at_ble_notification_send(0environment_service_characs[0]char_val_handle)if(ble_status = AT_BLE_SUCCESS)printf(fail to send temperature update notification )

                                                                              6 Add the following code in main routine to send temperature data every 10 secondswhile (1) ble_event_task()if(connected_flag == true ampamp timer_flag == truetimer_flag = falsesend_temperature_notification()

                                                                              7 Click to save the project ltCtrl+Sgt

                                                                              8 Compile the project by pressing the button ltF7gt9 Verify that no build error appears in Atmel Studio output window

                                                                              Figure 5-8 Atmel Studio Output Window

                                                                              10 Click to program the project binary on the L21 Xplained XSTK11 Open ldquoMicrochip SmartConnectrdquo Application on Android or iOS device12 Connect and pair to the peripheral (pass key 123456)13 Click NOTIFY to start the notification14 Temperature information in HEX values must be displayed in Microchip SmartConnect application

                                                                              ATBTLC1000Setting up and Handling Custom Service

                                                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 45

                                                                              Figure 5-9 Notification Window

                                                                              15 Serial terminal must display the following log outputFigure 5-10 Log Output Window

                                                                              ATBTLC1000Setting up and Handling Custom Service

                                                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 46

                                                                              6 Appendix A Software Solution - Pre-Defined SvcThe following is the code implementation for handling of pre-defined service done in 4 SettingHandlingof Pre-Defined Service

                                                                              - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehinclude device_infoh

                                                                              volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false Services handlers dis_gatt_service_handler_t dis_service_handler

                                                                              static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

                                                                              void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                                                                              Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                                                                              Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                                                                              static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                                                                              Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void) Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks)

                                                                              ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

                                                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 47

                                                                              ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                                                              timer callback function static void timer_callback_fn(void) Add timer callback functionality here

                                                                              void button_cb(void) Add button callback functionality here

                                                                              int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                                                                              Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                                                                              DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks()

                                                                              Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service) dis_init_service(ampdis_service_handler) Define the primary service in the GATT server database if((dis_primary_service_define(ampdis_service_handler)) = AT_BLE_SUCCESS) printf(Device Information Service definition failed)

                                                                              Start Advertising process start_advertisement() while(true) ble_event_task()

                                                                              ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

                                                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 48

                                                                              7 Appendix B Software Solution - Custom ServiceThe following is the code implementation for handling of pre-defined service done in 5 Setting up andHandling Custom Service

                                                                              - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templateh

                                                                              volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false

                                                                              static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

                                                                              define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0

                                                                              define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

                                                                              Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

                                                                              void custom_environment_service_init(void) at_ble_uuid_t environment_service_uuid uint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUID uint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128 memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperature environment_service_characs[0]user_desc_len = 10 environment_service_characs[0]user_desc_max_len = 10 environment_service_characs[0]uuidtype = AT_BLE_UUID_128 memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16) environment_service_characs[0]properties = AT_BLE_CHAR_READ | AT_BLE_CHAR_NOTIFY environment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature value environment_service_characs[0]value_permissions = (AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuid ampenvironment_service_handlerNULL0 environment_service_characs1)=AT_BLE_SUCCESS) printf(n Assignment 41 Failed to Initialize custom environment service) else printf(n Assignment 41 Initialize custom environment service)

                                                                              Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param) at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )param if (event_param-gtstatus == AT_BLE_SUCCESS) printf(n Assignment 41Notification Successfully sent over the air)

                                                                              ATBTLC1000Appendix B Software Solution - Custom Service

                                                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 49

                                                                              else printf(n Assignment 41Sending Notification over the air failed) return AT_BLE_SUCCESS

                                                                              static at_ble_status_t custom_char_changed_app_event(void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle -gt char_new_value[0])) timer_flag = false hw_timer_start(10) printf(n Assignment 41Characteristic changed event) return AT_BLE_SUCCESS

                                                                              static const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handler characteristic_changed = custom_char_changed_app_event

                                                                              Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                                                              void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                                                                              Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                                                                              Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                                                                              static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                                                                              Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void)

                                                                              ATBTLC1000Appendix B Software Solution - Custom Service

                                                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 50

                                                                              Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                                                              timer callback function static void timer_callback_fn(void) Add timer callback functionality here timer_flag = true

                                                                              void button_cb(void) Add button callback functionality here

                                                                              static uint8_t Temperature_value = 25

                                                                              Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++ if(Temperature_value gt 75) Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set( environment_service_characs[0]char_val_handle (uint8_t )ampTemperature_value sizeof(Temperature_value)) ble_status = at_ble_notification_send(0 environment_service_characs[0]char_val_handle) if(ble_status = AT_BLE_SUCCESS) printf(fail to send temperature update notification )

                                                                              int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                                                                              Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                                                                              DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register Gap ATBTLC1000 Callbacks register_btlc1000_callbacks()

                                                                              Custom service init custom_environment_service_init()

                                                                              ATBTLC1000Appendix B Software Solution - Custom Service

                                                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 51

                                                                              Register Gatt server callback register_gatt_server_callbacks()

                                                                              Start Advertising process start_advertisement() while(true) ble_event_task() if(connected_flag == true ampamp timer_flag == true) timer_flag = false send_temperature_notification()

                                                                              ATBTLC1000Appendix B Software Solution - Custom Service

                                                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 52

                                                                              8 Document Revision HistoryRev B - 42018

                                                                              Section Changes

                                                                              Document Revised contents to match various Bluetooth Low Energy standard versions

                                                                              Rev A - 122017

                                                                              Section Changes

                                                                              Document Initial release

                                                                              ATBTLC1000Document Revision History

                                                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 53

                                                                              The Microchip Web Site

                                                                              Microchip provides online support via our web site at httpwwwmicrochipcom This web site is used asa means to make files and information easily available to customers Accessible by using your favoriteInternet browser the web site contains the following information

                                                                              bull Product Support ndash Data sheets and errata application notes and sample programs designresources userrsquos guides and hardware support documents latest software releases and archivedsoftware

                                                                              bull General Technical Support ndash Frequently Asked Questions (FAQ) technical support requestsonline discussion groups Microchip consultant program member listing

                                                                              bull Business of Microchip ndash Product selector and ordering guides latest Microchip press releaseslisting of seminars and events listings of Microchip sales offices distributors and factoryrepresentatives

                                                                              Customer Change Notification Service

                                                                              Microchiprsquos customer notification service helps keep customers current on Microchip productsSubscribers will receive e-mail notification whenever there are changes updates revisions or erratarelated to a specified product family or development tool of interest

                                                                              To register access the Microchip web site at httpwwwmicrochipcom Under ldquoSupportrdquo click onldquoCustomer Change Notificationrdquo and follow the registration instructions

                                                                              Customer Support

                                                                              Users of Microchip products can receive assistance through several channels

                                                                              bull Distributor or Representativebull Local Sales Officebull Field Application Engineer (FAE)bull Technical Support

                                                                              Customers should contact their distributor representative or Field Application Engineer (FAE) for supportLocal sales offices are also available to help customers A listing of sales offices and locations is includedin the back of this document

                                                                              Technical support is available through the web site at httpwwwmicrochipcomsupport

                                                                              Microchip Devices Code Protection Feature

                                                                              Note the following details of the code protection feature on Microchip devices

                                                                              bull Microchip products meet the specification contained in their particular Microchip Data Sheetbull Microchip believes that its family of products is one of the most secure families of its kind on the

                                                                              market today when used in the intended manner and under normal conditionsbull There are dishonest and possibly illegal methods used to breach the code protection feature All of

                                                                              these methods to our knowledge require using the Microchip products in a manner outside theoperating specifications contained in Microchiprsquos Data Sheets Most likely the person doing so isengaged in theft of intellectual property

                                                                              bull Microchip is willing to work with the customer who is concerned about the integrity of their code

                                                                              ATBTLC1000

                                                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 54

                                                                              bull Neither Microchip nor any other semiconductor manufacturer can guarantee the security of theircode Code protection does not mean that we are guaranteeing the product as ldquounbreakablerdquo

                                                                              Code protection is constantly evolving We at Microchip are committed to continuously improving thecode protection features of our products Attempts to break Microchiprsquos code protection feature may be aviolation of the Digital Millennium Copyright Act If such acts allow unauthorized access to your softwareor other copyrighted work you may have a right to sue for relief under that Act

                                                                              Legal Notice

                                                                              Information contained in this publication regarding device applications and the like is provided only foryour convenience and may be superseded by updates It is your responsibility to ensure that yourapplication meets with your specifications MICROCHIP MAKES NO REPRESENTATIONS ORWARRANTIES OF ANY KIND WHETHER EXPRESS OR IMPLIED WRITTEN OR ORAL STATUTORYOR OTHERWISE RELATED TO THE INFORMATION INCLUDING BUT NOT LIMITED TO ITSCONDITION QUALITY PERFORMANCE MERCHANTABILITY OR FITNESS FOR PURPOSEMicrochip disclaims all liability arising from this information and its use Use of Microchip devices in lifesupport andor safety applications is entirely at the buyerrsquos risk and the buyer agrees to defendindemnify and hold harmless Microchip from any and all damages claims suits or expenses resultingfrom such use No licenses are conveyed implicitly or otherwise under any Microchip intellectualproperty rights unless otherwise stated

                                                                              Trademarks

                                                                              The Microchip name and logo the Microchip logo AnyRate AVR AVR logo AVR Freaks BeaconThingsBitCloud CryptoMemory CryptoRF dsPIC FlashFlex flexPWR Heldo JukeBlox KeeLoq KeeLoq logoKleer LANCheck LINK MD maXStylus maXTouch MediaLB megaAVR MOST MOST logo MPLABOptoLyzer PIC picoPower PICSTART PIC32 logo Prochip Designer QTouch RightTouch SAM-BASpyNIC SST SST Logo SuperFlash tinyAVR UNIO and XMEGA are registered trademarks ofMicrochip Technology Incorporated in the USA and other countries

                                                                              ClockWorks The Embedded Control Solutions Company EtherSynch Hyper Speed Control HyperLightLoad IntelliMOS mTouch Precision Edge and Quiet-Wire are registered trademarks of MicrochipTechnology Incorporated in the USA

                                                                              Adjacent Key Suppression AKS Analog-for-the-Digital Age Any Capacitor AnyIn AnyOut BodyComchipKIT chipKIT logo CodeGuard CryptoAuthentication CryptoCompanion CryptoControllerdsPICDEM dsPICDEMnet Dynamic Average Matching DAM ECAN EtherGREEN In-Circuit SerialProgramming ICSP Inter-Chip Connectivity JitterBlocker KleerNet KleerNet logo Mindi MiWimotorBench MPASM MPF MPLAB Certified logo MPLIB MPLINK MultiTRAK NetDetach OmniscientCode Generation PICDEM PICDEMnet PICkit PICtail PureSilicon QMatrix RightTouch logo REALICE Ripple Blocker SAM-ICE Serial Quad IO SMART-IS SQI SuperSwitcher SuperSwitcher II TotalEndurance TSHARC USBCheck VariSense ViewSpan WiperLock Wireless DNA and ZENA aretrademarks of Microchip Technology Incorporated in the USA and other countries

                                                                              SQTP is a service mark of Microchip Technology Incorporated in the USA

                                                                              Silicon Storage Technology is a registered trademark of Microchip Technology Inc in other countries

                                                                              GestIC is a registered trademark of Microchip Technology Germany II GmbH amp Co KG a subsidiary ofMicrochip Technology Inc in other countries

                                                                              All other trademarks mentioned herein are property of their respective companies

                                                                              ATBTLC1000

                                                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 55

                                                                              copy 2018 Microchip Technology Incorporated Printed in the USA All Rights Reserved

                                                                              ISBN 978-1-5224-2921-0

                                                                              Quality Management System Certified by DNV

                                                                              ISOTS 16949Microchip received ISOTS-169492009 certification for its worldwide headquarters design and waferfabrication facilities in Chandler and Tempe Arizona Gresham Oregon and design centers in Californiaand India The Companyrsquos quality system processes and procedures are for its PICreg MCUs and dsPICreg

                                                                              DSCs KEELOQreg code hopping devices Serial EEPROMs microperipherals nonvolatile memory andanalog products In addition Microchiprsquos quality system for the design and manufacture of developmentsystems is ISO 90012000 certified

                                                                              ATBTLC1000

                                                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 56

                                                                              AMERICAS ASIAPACIFIC ASIAPACIFIC EUROPECorporate Office2355 West Chandler BlvdChandler AZ 85224-6199Tel 480-792-7200Fax 480-792-7277Technical SupporthttpwwwmicrochipcomsupportWeb AddresswwwmicrochipcomAtlantaDuluth GATel 678-957-9614Fax 678-957-1455Austin TXTel 512-257-3370BostonWestborough MATel 774-760-0087Fax 774-760-0088ChicagoItasca ILTel 630-285-0071Fax 630-285-0075DallasAddison TXTel 972-818-7423Fax 972-818-2924DetroitNovi MITel 248-848-4000Houston TXTel 281-894-5983IndianapolisNoblesville INTel 317-773-8323Fax 317-773-5453Tel 317-536-2380Los AngelesMission Viejo CATel 949-462-9523Fax 949-462-9608Tel 951-273-7800Raleigh NCTel 919-844-7510New York NYTel 631-435-6000San Jose CATel 408-735-9110Tel 408-436-4270Canada - TorontoTel 905-695-1980Fax 905-695-2078

                                                                              Australia - SydneyTel 61-2-9868-6733China - BeijingTel 86-10-8569-7000China - ChengduTel 86-28-8665-5511China - ChongqingTel 86-23-8980-9588China - DongguanTel 86-769-8702-9880China - GuangzhouTel 86-20-8755-8029China - HangzhouTel 86-571-8792-8115China - Hong Kong SARTel 852-2943-5100China - NanjingTel 86-25-8473-2460China - QingdaoTel 86-532-8502-7355China - ShanghaiTel 86-21-3326-8000China - ShenyangTel 86-24-2334-2829China - ShenzhenTel 86-755-8864-2200China - SuzhouTel 86-186-6233-1526China - WuhanTel 86-27-5980-5300China - XianTel 86-29-8833-7252China - XiamenTel 86-592-2388138China - ZhuhaiTel 86-756-3210040

                                                                              India - BangaloreTel 91-80-3090-4444India - New DelhiTel 91-11-4160-8631India - PuneTel 91-20-4121-0141Japan - OsakaTel 81-6-6152-7160Japan - TokyoTel 81-3-6880- 3770Korea - DaeguTel 82-53-744-4301Korea - SeoulTel 82-2-554-7200Malaysia - Kuala LumpurTel 60-3-7651-7906Malaysia - PenangTel 60-4-227-8870Philippines - ManilaTel 63-2-634-9065SingaporeTel 65-6334-8870Taiwan - Hsin ChuTel 886-3-577-8366Taiwan - KaohsiungTel 886-7-213-7830Taiwan - TaipeiTel 886-2-2508-8600Thailand - BangkokTel 66-2-694-1351Vietnam - Ho Chi MinhTel 84-28-5448-2100

                                                                              Austria - WelsTel 43-7242-2244-39Fax 43-7242-2244-393Denmark - CopenhagenTel 45-4450-2828Fax 45-4485-2829Finland - EspooTel 358-9-4520-820France - ParisTel 33-1-69-53-63-20Fax 33-1-69-30-90-79Germany - GarchingTel 49-8931-9700Germany - HaanTel 49-2129-3766400Germany - HeilbronnTel 49-7131-67-3636Germany - KarlsruheTel 49-721-625370Germany - MunichTel 49-89-627-144-0Fax 49-89-627-144-44Germany - RosenheimTel 49-8031-354-560Israel - RarsquoananaTel 972-9-744-7705Italy - MilanTel 39-0331-742611Fax 39-0331-466781Italy - PadovaTel 39-049-7625286Netherlands - DrunenTel 31-416-690399Fax 31-416-690340Norway - TrondheimTel 47-7289-7561Poland - WarsawTel 48-22-3325737Romania - BucharestTel 40-21-407-87-50Spain - MadridTel 34-91-708-08-90Fax 34-91-708-08-91Sweden - GothenbergTel 46-31-704-60-40Sweden - StockholmTel 46-8-5090-4654UK - WokinghamTel 44-118-921-5800Fax 44-118-921-5820

                                                                              Worldwide Sales and Service

                                                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 57

                                                                              • Introduction
                                                                              • Table of Contents
                                                                              • 1 Getting Started
                                                                                • 11 Software Prerequisites
                                                                                  • 111 Installation Steps of Atmel Studio 7
                                                                                    • 12 Software Setup
                                                                                      • 121 Installation of Microchip SmartConnect application on a Mobile device
                                                                                        • 13 ATBTLC1000 Embedded Firmware
                                                                                        • 14 ATBTLC1000 Host Software API
                                                                                        • 15 Hardware Prerequisites
                                                                                          • 151 SMARTtrade SAM L21 Xplained Pro
                                                                                          • 152 ATBTLC1000ZR Xplained Pro Extension board
                                                                                            • 16 Hardware Setup
                                                                                              • 2 Creating the Project and Initializing
                                                                                                • 21 Creating Project from ASF
                                                                                                • 22 Configuring ASF for ATBTLC1000-ZR
                                                                                                • 23 Compiling and Testing the Project
                                                                                                  • 3 Establishing Connection with Central Device
                                                                                                    • 31 Configuring and Starting the Advertisement Process
                                                                                                      • 311 Flags (AD Type 0x00)
                                                                                                      • 312 Available Service UUID (AD Types 0x02 to 0x07)
                                                                                                      • 313 Device Name (AD Types 0x08 to 0x09)
                                                                                                        • 3131 Setting the Advertisement Payload (ble_advertisement_data_set)
                                                                                                        • 3132 Starting the Advertisement Process (at_ble_adv_start)
                                                                                                          • 314 Advertisement Process
                                                                                                            • 3141 Starting the Advertisement Process
                                                                                                                • 32 Managing GAP events
                                                                                                                  • 321 Handling of Connected and Disconnected GAP Events
                                                                                                                      • 4 SettingHandling of Pre-Defined Service
                                                                                                                        • 41 Adding Device Info Service Component from ASF Wizard to Project
                                                                                                                        • 42 Configuring and Loading Device Information Service
                                                                                                                          • 421 Procedure to Configure and Load Device Info Service
                                                                                                                              • 5 Setting up and Handling Custom Service
                                                                                                                                • 51 Configuring and Loading the Custom Environment Service
                                                                                                                                  • 511 Procedure to Configure and Load Custom Environment Service
                                                                                                                                    • 52 Updating the Temperature Characteristic
                                                                                                                                      • 521 Setting a Characteristic Value ( at_ble_characteristic_value_set)
                                                                                                                                      • 522 Sending a Notification (at_ble_notification_send)
                                                                                                                                      • 523 Sending Temperature Information Once in Every 10 Seconds to Central
                                                                                                                                          • 6 Appendix A Software Solution - Pre-Defined Svc
                                                                                                                                          • 7 Appendix B Software Solution - Custom Service
                                                                                                                                          • 8 Document Revision History
                                                                                                                                          • The Microchip Web Site
                                                                                                                                          • Customer Change Notification Service
                                                                                                                                          • Customer Support
                                                                                                                                          • Microchip Devices Code Protection Feature
                                                                                                                                          • Legal Notice
                                                                                                                                          • Trademarks
                                                                                                                                          • Quality Management System Certified by DNV
                                                                                                                                          • Worldwide Sales and Service

                                                                                elseprintf(n Assignment 41 Initialize custom environment service)

                                                                                4 Declare and implement the following GATT event callback functioncustom_char_changed_app_event in startup_templatec file If a client (central) enablesnotifications for a server the server (peripheral) receives an AT_BLE_CHARACTERISTIC_CHANGEDevent and this event callback is called Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

                                                                                5 Declare and implement the following custom_notification_confirmation_handlerfunction in startup_templatec file Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param)at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )paramif (event_param-gtstatus == AT_BLE_SUCCESS)printf(n Assignment 41Notification Successfully sent over the air) else printf(n Assignment 41Sending Notification over the air failed)return AT_BLE_SUCCESS

                                                                                6 Declare the following GATT server callback structure in startup_templatec file Thisassignment uses two GATT callbacksstatic const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handlercharacteristic_changed = custom_char_changed_app_event

                                                                                7 Add the following register_gatt_server_callbacks function in startup_templatec toregister GATT server callback for notification confirmation event Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks)ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACKBLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle)if (ble_status = true)printf(nError when Registering ATBTLC1000 callbacks)

                                                                                8 Add custom_environment_service_init and register_gatt_server_callbacksfunction calls prior to start advertisement in the application main routine to initialize custom serviceand to register the GATT server callbacksint main(void)if SAMG55 || SAM4S Initialize the SAM system sysclk_init()board_init()elif SAM0system_init()

                                                                                ATBTLC1000Setting up and Handling Custom Service

                                                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 40

                                                                                endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks() Custom service init custom_environment_service_init ( ) Register Gatt server callbacks register_gatt_server_callbacks ( ) Start Advertising process start_advertisement()while(true)ble_event_task()

                                                                                9 Click to save the project ltCtrl+Sgt

                                                                                10 Compile the project by pressing button ltF7gt11 Verify that no build error appears in the Atmel Studio output window

                                                                                Figure 5-3 Atmel Studio Output Window

                                                                                12 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt13 Open the ldquoMicrochip SmartConnectrdquo application on Android or iOS device14 Connect and pair to the peripheral (pass key 123456)15 Custom service must now be visible after pairing with peripheral under Microchip SmartConnect

                                                                                application

                                                                                ATBTLC1000Setting up and Handling Custom Service

                                                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 41

                                                                                Figure 5-4 Service List in Microchip SmartConnect Application

                                                                                Note  Custom service is displayed as unknown service in the above figure as this service is not aSIG-defined service

                                                                                Figure 5-5 General Information

                                                                                16 Serial terminal client must display the following Log output

                                                                                ATBTLC1000Setting up and Handling Custom Service

                                                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 42

                                                                                Figure 5-6 Log Output Window

                                                                                52 Updating the Temperature CharacteristicIn the previous assignment the custom Temperature characteristic is defined with a notify attribute Thistype of attribute requires notification to be sent to central when a new characteristic value is availableThe update of any ldquonotifyrdquo characteristic value is based on following interaction between the Host MCUand the ATBTLC1000Figure 5-7 Characteristic Notification

                                                                                521 Setting a Characteristic Value ( at_ble_characteristic_value_set)Prototype ndashat_ble_status_t at_ble_characteristic_value_setat_ble_handle_t handleuint8_t valueuint16_t len)

                                                                                Description ndash Sets a characteristic value in ATBTLC1000 memory

                                                                                Parameters ndash

                                                                                ATBTLC1000Setting up and Handling Custom Service

                                                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 43

                                                                                bull handle [inout] ndash Pointer to Characteristic handle to be changedbull value [in] ndash New valuebull len [in] ndash Value length in bytes

                                                                                Return ndash Execution Status

                                                                                522 Sending a Notification (at_ble_notification_send)Prototype ndashat_ble_status_t at_ble_notification_send(at_ble_handle_t conn_handleat_ble_handle_t attr_handle)

                                                                                Description ndash Sends a Notification

                                                                                Parameters ndash

                                                                                bull conn_handle[in] ndash handle of the connection to be notifiedbull attr_handle [in] ndash handle of the attribute originating the notification

                                                                                Return ndash Execution Status

                                                                                523 Sending Temperature Information Once in Every 10 Seconds to Central1 Modify the following ldquotimer_callback_fnrdquo callback function from the startup_templatec

                                                                                filestatic void timer_callback_fn(void)timer_flag = true

                                                                                2 hw_timer_init()in main routine of startup_templatec initializes the hardware timer3 If a client (Central) enables the notifications for a server the server (Peripheral) receives an

                                                                                AT_BLE_CHARACTERISTIC_CHANGED event callback then start the periodic 10 second timer forsending the notification Add the following code in previously definedcustom_char_changed_app_event function Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))timer_flag = falsehw_timer_start(10)printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

                                                                                4 Declare the following Temperature_value global variable in startup_templatec staticuint8_t Temperature_value = 25 as static

                                                                                5 Add the following send_temperature_notification function in startup_templatec tosend temperature every 10 seconds Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++

                                                                                ATBTLC1000Setting up and Handling Custom Service

                                                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 44

                                                                                if(Temperature_value gt 75)Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set(environment_service_characs[0]char_val_handle(uint8_t )ampTemperature_valuesizeof(Temperature_value))ble_status = at_ble_notification_send(0environment_service_characs[0]char_val_handle)if(ble_status = AT_BLE_SUCCESS)printf(fail to send temperature update notification )

                                                                                6 Add the following code in main routine to send temperature data every 10 secondswhile (1) ble_event_task()if(connected_flag == true ampamp timer_flag == truetimer_flag = falsesend_temperature_notification()

                                                                                7 Click to save the project ltCtrl+Sgt

                                                                                8 Compile the project by pressing the button ltF7gt9 Verify that no build error appears in Atmel Studio output window

                                                                                Figure 5-8 Atmel Studio Output Window

                                                                                10 Click to program the project binary on the L21 Xplained XSTK11 Open ldquoMicrochip SmartConnectrdquo Application on Android or iOS device12 Connect and pair to the peripheral (pass key 123456)13 Click NOTIFY to start the notification14 Temperature information in HEX values must be displayed in Microchip SmartConnect application

                                                                                ATBTLC1000Setting up and Handling Custom Service

                                                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 45

                                                                                Figure 5-9 Notification Window

                                                                                15 Serial terminal must display the following log outputFigure 5-10 Log Output Window

                                                                                ATBTLC1000Setting up and Handling Custom Service

                                                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 46

                                                                                6 Appendix A Software Solution - Pre-Defined SvcThe following is the code implementation for handling of pre-defined service done in 4 SettingHandlingof Pre-Defined Service

                                                                                - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehinclude device_infoh

                                                                                volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false Services handlers dis_gatt_service_handler_t dis_service_handler

                                                                                static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

                                                                                void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                                                                                Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                                                                                Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                                                                                static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                                                                                Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void) Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks)

                                                                                ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

                                                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 47

                                                                                ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                                                                timer callback function static void timer_callback_fn(void) Add timer callback functionality here

                                                                                void button_cb(void) Add button callback functionality here

                                                                                int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                                                                                Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                                                                                DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks()

                                                                                Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service) dis_init_service(ampdis_service_handler) Define the primary service in the GATT server database if((dis_primary_service_define(ampdis_service_handler)) = AT_BLE_SUCCESS) printf(Device Information Service definition failed)

                                                                                Start Advertising process start_advertisement() while(true) ble_event_task()

                                                                                ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

                                                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 48

                                                                                7 Appendix B Software Solution - Custom ServiceThe following is the code implementation for handling of pre-defined service done in 5 Setting up andHandling Custom Service

                                                                                - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templateh

                                                                                volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false

                                                                                static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

                                                                                define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0

                                                                                define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

                                                                                Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

                                                                                void custom_environment_service_init(void) at_ble_uuid_t environment_service_uuid uint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUID uint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128 memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperature environment_service_characs[0]user_desc_len = 10 environment_service_characs[0]user_desc_max_len = 10 environment_service_characs[0]uuidtype = AT_BLE_UUID_128 memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16) environment_service_characs[0]properties = AT_BLE_CHAR_READ | AT_BLE_CHAR_NOTIFY environment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature value environment_service_characs[0]value_permissions = (AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuid ampenvironment_service_handlerNULL0 environment_service_characs1)=AT_BLE_SUCCESS) printf(n Assignment 41 Failed to Initialize custom environment service) else printf(n Assignment 41 Initialize custom environment service)

                                                                                Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param) at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )param if (event_param-gtstatus == AT_BLE_SUCCESS) printf(n Assignment 41Notification Successfully sent over the air)

                                                                                ATBTLC1000Appendix B Software Solution - Custom Service

                                                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 49

                                                                                else printf(n Assignment 41Sending Notification over the air failed) return AT_BLE_SUCCESS

                                                                                static at_ble_status_t custom_char_changed_app_event(void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle -gt char_new_value[0])) timer_flag = false hw_timer_start(10) printf(n Assignment 41Characteristic changed event) return AT_BLE_SUCCESS

                                                                                static const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handler characteristic_changed = custom_char_changed_app_event

                                                                                Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                                                                void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                                                                                Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                                                                                Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                                                                                static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                                                                                Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void)

                                                                                ATBTLC1000Appendix B Software Solution - Custom Service

                                                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 50

                                                                                Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                                                                timer callback function static void timer_callback_fn(void) Add timer callback functionality here timer_flag = true

                                                                                void button_cb(void) Add button callback functionality here

                                                                                static uint8_t Temperature_value = 25

                                                                                Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++ if(Temperature_value gt 75) Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set( environment_service_characs[0]char_val_handle (uint8_t )ampTemperature_value sizeof(Temperature_value)) ble_status = at_ble_notification_send(0 environment_service_characs[0]char_val_handle) if(ble_status = AT_BLE_SUCCESS) printf(fail to send temperature update notification )

                                                                                int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                                                                                Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                                                                                DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register Gap ATBTLC1000 Callbacks register_btlc1000_callbacks()

                                                                                Custom service init custom_environment_service_init()

                                                                                ATBTLC1000Appendix B Software Solution - Custom Service

                                                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 51

                                                                                Register Gatt server callback register_gatt_server_callbacks()

                                                                                Start Advertising process start_advertisement() while(true) ble_event_task() if(connected_flag == true ampamp timer_flag == true) timer_flag = false send_temperature_notification()

                                                                                ATBTLC1000Appendix B Software Solution - Custom Service

                                                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 52

                                                                                8 Document Revision HistoryRev B - 42018

                                                                                Section Changes

                                                                                Document Revised contents to match various Bluetooth Low Energy standard versions

                                                                                Rev A - 122017

                                                                                Section Changes

                                                                                Document Initial release

                                                                                ATBTLC1000Document Revision History

                                                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 53

                                                                                The Microchip Web Site

                                                                                Microchip provides online support via our web site at httpwwwmicrochipcom This web site is used asa means to make files and information easily available to customers Accessible by using your favoriteInternet browser the web site contains the following information

                                                                                bull Product Support ndash Data sheets and errata application notes and sample programs designresources userrsquos guides and hardware support documents latest software releases and archivedsoftware

                                                                                bull General Technical Support ndash Frequently Asked Questions (FAQ) technical support requestsonline discussion groups Microchip consultant program member listing

                                                                                bull Business of Microchip ndash Product selector and ordering guides latest Microchip press releaseslisting of seminars and events listings of Microchip sales offices distributors and factoryrepresentatives

                                                                                Customer Change Notification Service

                                                                                Microchiprsquos customer notification service helps keep customers current on Microchip productsSubscribers will receive e-mail notification whenever there are changes updates revisions or erratarelated to a specified product family or development tool of interest

                                                                                To register access the Microchip web site at httpwwwmicrochipcom Under ldquoSupportrdquo click onldquoCustomer Change Notificationrdquo and follow the registration instructions

                                                                                Customer Support

                                                                                Users of Microchip products can receive assistance through several channels

                                                                                bull Distributor or Representativebull Local Sales Officebull Field Application Engineer (FAE)bull Technical Support

                                                                                Customers should contact their distributor representative or Field Application Engineer (FAE) for supportLocal sales offices are also available to help customers A listing of sales offices and locations is includedin the back of this document

                                                                                Technical support is available through the web site at httpwwwmicrochipcomsupport

                                                                                Microchip Devices Code Protection Feature

                                                                                Note the following details of the code protection feature on Microchip devices

                                                                                bull Microchip products meet the specification contained in their particular Microchip Data Sheetbull Microchip believes that its family of products is one of the most secure families of its kind on the

                                                                                market today when used in the intended manner and under normal conditionsbull There are dishonest and possibly illegal methods used to breach the code protection feature All of

                                                                                these methods to our knowledge require using the Microchip products in a manner outside theoperating specifications contained in Microchiprsquos Data Sheets Most likely the person doing so isengaged in theft of intellectual property

                                                                                bull Microchip is willing to work with the customer who is concerned about the integrity of their code

                                                                                ATBTLC1000

                                                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 54

                                                                                bull Neither Microchip nor any other semiconductor manufacturer can guarantee the security of theircode Code protection does not mean that we are guaranteeing the product as ldquounbreakablerdquo

                                                                                Code protection is constantly evolving We at Microchip are committed to continuously improving thecode protection features of our products Attempts to break Microchiprsquos code protection feature may be aviolation of the Digital Millennium Copyright Act If such acts allow unauthorized access to your softwareor other copyrighted work you may have a right to sue for relief under that Act

                                                                                Legal Notice

                                                                                Information contained in this publication regarding device applications and the like is provided only foryour convenience and may be superseded by updates It is your responsibility to ensure that yourapplication meets with your specifications MICROCHIP MAKES NO REPRESENTATIONS ORWARRANTIES OF ANY KIND WHETHER EXPRESS OR IMPLIED WRITTEN OR ORAL STATUTORYOR OTHERWISE RELATED TO THE INFORMATION INCLUDING BUT NOT LIMITED TO ITSCONDITION QUALITY PERFORMANCE MERCHANTABILITY OR FITNESS FOR PURPOSEMicrochip disclaims all liability arising from this information and its use Use of Microchip devices in lifesupport andor safety applications is entirely at the buyerrsquos risk and the buyer agrees to defendindemnify and hold harmless Microchip from any and all damages claims suits or expenses resultingfrom such use No licenses are conveyed implicitly or otherwise under any Microchip intellectualproperty rights unless otherwise stated

                                                                                Trademarks

                                                                                The Microchip name and logo the Microchip logo AnyRate AVR AVR logo AVR Freaks BeaconThingsBitCloud CryptoMemory CryptoRF dsPIC FlashFlex flexPWR Heldo JukeBlox KeeLoq KeeLoq logoKleer LANCheck LINK MD maXStylus maXTouch MediaLB megaAVR MOST MOST logo MPLABOptoLyzer PIC picoPower PICSTART PIC32 logo Prochip Designer QTouch RightTouch SAM-BASpyNIC SST SST Logo SuperFlash tinyAVR UNIO and XMEGA are registered trademarks ofMicrochip Technology Incorporated in the USA and other countries

                                                                                ClockWorks The Embedded Control Solutions Company EtherSynch Hyper Speed Control HyperLightLoad IntelliMOS mTouch Precision Edge and Quiet-Wire are registered trademarks of MicrochipTechnology Incorporated in the USA

                                                                                Adjacent Key Suppression AKS Analog-for-the-Digital Age Any Capacitor AnyIn AnyOut BodyComchipKIT chipKIT logo CodeGuard CryptoAuthentication CryptoCompanion CryptoControllerdsPICDEM dsPICDEMnet Dynamic Average Matching DAM ECAN EtherGREEN In-Circuit SerialProgramming ICSP Inter-Chip Connectivity JitterBlocker KleerNet KleerNet logo Mindi MiWimotorBench MPASM MPF MPLAB Certified logo MPLIB MPLINK MultiTRAK NetDetach OmniscientCode Generation PICDEM PICDEMnet PICkit PICtail PureSilicon QMatrix RightTouch logo REALICE Ripple Blocker SAM-ICE Serial Quad IO SMART-IS SQI SuperSwitcher SuperSwitcher II TotalEndurance TSHARC USBCheck VariSense ViewSpan WiperLock Wireless DNA and ZENA aretrademarks of Microchip Technology Incorporated in the USA and other countries

                                                                                SQTP is a service mark of Microchip Technology Incorporated in the USA

                                                                                Silicon Storage Technology is a registered trademark of Microchip Technology Inc in other countries

                                                                                GestIC is a registered trademark of Microchip Technology Germany II GmbH amp Co KG a subsidiary ofMicrochip Technology Inc in other countries

                                                                                All other trademarks mentioned herein are property of their respective companies

                                                                                ATBTLC1000

                                                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 55

                                                                                copy 2018 Microchip Technology Incorporated Printed in the USA All Rights Reserved

                                                                                ISBN 978-1-5224-2921-0

                                                                                Quality Management System Certified by DNV

                                                                                ISOTS 16949Microchip received ISOTS-169492009 certification for its worldwide headquarters design and waferfabrication facilities in Chandler and Tempe Arizona Gresham Oregon and design centers in Californiaand India The Companyrsquos quality system processes and procedures are for its PICreg MCUs and dsPICreg

                                                                                DSCs KEELOQreg code hopping devices Serial EEPROMs microperipherals nonvolatile memory andanalog products In addition Microchiprsquos quality system for the design and manufacture of developmentsystems is ISO 90012000 certified

                                                                                ATBTLC1000

                                                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 56

                                                                                AMERICAS ASIAPACIFIC ASIAPACIFIC EUROPECorporate Office2355 West Chandler BlvdChandler AZ 85224-6199Tel 480-792-7200Fax 480-792-7277Technical SupporthttpwwwmicrochipcomsupportWeb AddresswwwmicrochipcomAtlantaDuluth GATel 678-957-9614Fax 678-957-1455Austin TXTel 512-257-3370BostonWestborough MATel 774-760-0087Fax 774-760-0088ChicagoItasca ILTel 630-285-0071Fax 630-285-0075DallasAddison TXTel 972-818-7423Fax 972-818-2924DetroitNovi MITel 248-848-4000Houston TXTel 281-894-5983IndianapolisNoblesville INTel 317-773-8323Fax 317-773-5453Tel 317-536-2380Los AngelesMission Viejo CATel 949-462-9523Fax 949-462-9608Tel 951-273-7800Raleigh NCTel 919-844-7510New York NYTel 631-435-6000San Jose CATel 408-735-9110Tel 408-436-4270Canada - TorontoTel 905-695-1980Fax 905-695-2078

                                                                                Australia - SydneyTel 61-2-9868-6733China - BeijingTel 86-10-8569-7000China - ChengduTel 86-28-8665-5511China - ChongqingTel 86-23-8980-9588China - DongguanTel 86-769-8702-9880China - GuangzhouTel 86-20-8755-8029China - HangzhouTel 86-571-8792-8115China - Hong Kong SARTel 852-2943-5100China - NanjingTel 86-25-8473-2460China - QingdaoTel 86-532-8502-7355China - ShanghaiTel 86-21-3326-8000China - ShenyangTel 86-24-2334-2829China - ShenzhenTel 86-755-8864-2200China - SuzhouTel 86-186-6233-1526China - WuhanTel 86-27-5980-5300China - XianTel 86-29-8833-7252China - XiamenTel 86-592-2388138China - ZhuhaiTel 86-756-3210040

                                                                                India - BangaloreTel 91-80-3090-4444India - New DelhiTel 91-11-4160-8631India - PuneTel 91-20-4121-0141Japan - OsakaTel 81-6-6152-7160Japan - TokyoTel 81-3-6880- 3770Korea - DaeguTel 82-53-744-4301Korea - SeoulTel 82-2-554-7200Malaysia - Kuala LumpurTel 60-3-7651-7906Malaysia - PenangTel 60-4-227-8870Philippines - ManilaTel 63-2-634-9065SingaporeTel 65-6334-8870Taiwan - Hsin ChuTel 886-3-577-8366Taiwan - KaohsiungTel 886-7-213-7830Taiwan - TaipeiTel 886-2-2508-8600Thailand - BangkokTel 66-2-694-1351Vietnam - Ho Chi MinhTel 84-28-5448-2100

                                                                                Austria - WelsTel 43-7242-2244-39Fax 43-7242-2244-393Denmark - CopenhagenTel 45-4450-2828Fax 45-4485-2829Finland - EspooTel 358-9-4520-820France - ParisTel 33-1-69-53-63-20Fax 33-1-69-30-90-79Germany - GarchingTel 49-8931-9700Germany - HaanTel 49-2129-3766400Germany - HeilbronnTel 49-7131-67-3636Germany - KarlsruheTel 49-721-625370Germany - MunichTel 49-89-627-144-0Fax 49-89-627-144-44Germany - RosenheimTel 49-8031-354-560Israel - RarsquoananaTel 972-9-744-7705Italy - MilanTel 39-0331-742611Fax 39-0331-466781Italy - PadovaTel 39-049-7625286Netherlands - DrunenTel 31-416-690399Fax 31-416-690340Norway - TrondheimTel 47-7289-7561Poland - WarsawTel 48-22-3325737Romania - BucharestTel 40-21-407-87-50Spain - MadridTel 34-91-708-08-90Fax 34-91-708-08-91Sweden - GothenbergTel 46-31-704-60-40Sweden - StockholmTel 46-8-5090-4654UK - WokinghamTel 44-118-921-5800Fax 44-118-921-5820

                                                                                Worldwide Sales and Service

                                                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 57

                                                                                • Introduction
                                                                                • Table of Contents
                                                                                • 1 Getting Started
                                                                                  • 11 Software Prerequisites
                                                                                    • 111 Installation Steps of Atmel Studio 7
                                                                                      • 12 Software Setup
                                                                                        • 121 Installation of Microchip SmartConnect application on a Mobile device
                                                                                          • 13 ATBTLC1000 Embedded Firmware
                                                                                          • 14 ATBTLC1000 Host Software API
                                                                                          • 15 Hardware Prerequisites
                                                                                            • 151 SMARTtrade SAM L21 Xplained Pro
                                                                                            • 152 ATBTLC1000ZR Xplained Pro Extension board
                                                                                              • 16 Hardware Setup
                                                                                                • 2 Creating the Project and Initializing
                                                                                                  • 21 Creating Project from ASF
                                                                                                  • 22 Configuring ASF for ATBTLC1000-ZR
                                                                                                  • 23 Compiling and Testing the Project
                                                                                                    • 3 Establishing Connection with Central Device
                                                                                                      • 31 Configuring and Starting the Advertisement Process
                                                                                                        • 311 Flags (AD Type 0x00)
                                                                                                        • 312 Available Service UUID (AD Types 0x02 to 0x07)
                                                                                                        • 313 Device Name (AD Types 0x08 to 0x09)
                                                                                                          • 3131 Setting the Advertisement Payload (ble_advertisement_data_set)
                                                                                                          • 3132 Starting the Advertisement Process (at_ble_adv_start)
                                                                                                            • 314 Advertisement Process
                                                                                                              • 3141 Starting the Advertisement Process
                                                                                                                  • 32 Managing GAP events
                                                                                                                    • 321 Handling of Connected and Disconnected GAP Events
                                                                                                                        • 4 SettingHandling of Pre-Defined Service
                                                                                                                          • 41 Adding Device Info Service Component from ASF Wizard to Project
                                                                                                                          • 42 Configuring and Loading Device Information Service
                                                                                                                            • 421 Procedure to Configure and Load Device Info Service
                                                                                                                                • 5 Setting up and Handling Custom Service
                                                                                                                                  • 51 Configuring and Loading the Custom Environment Service
                                                                                                                                    • 511 Procedure to Configure and Load Custom Environment Service
                                                                                                                                      • 52 Updating the Temperature Characteristic
                                                                                                                                        • 521 Setting a Characteristic Value ( at_ble_characteristic_value_set)
                                                                                                                                        • 522 Sending a Notification (at_ble_notification_send)
                                                                                                                                        • 523 Sending Temperature Information Once in Every 10 Seconds to Central
                                                                                                                                            • 6 Appendix A Software Solution - Pre-Defined Svc
                                                                                                                                            • 7 Appendix B Software Solution - Custom Service
                                                                                                                                            • 8 Document Revision History
                                                                                                                                            • The Microchip Web Site
                                                                                                                                            • Customer Change Notification Service
                                                                                                                                            • Customer Support
                                                                                                                                            • Microchip Devices Code Protection Feature
                                                                                                                                            • Legal Notice
                                                                                                                                            • Trademarks
                                                                                                                                            • Quality Management System Certified by DNV
                                                                                                                                            • Worldwide Sales and Service

                                                                                  endif Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init()hw_timer_register_callback(timer_callback_fn)DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks() Custom service init custom_environment_service_init ( ) Register Gatt server callbacks register_gatt_server_callbacks ( ) Start Advertising process start_advertisement()while(true)ble_event_task()

                                                                                  9 Click to save the project ltCtrl+Sgt

                                                                                  10 Compile the project by pressing button ltF7gt11 Verify that no build error appears in the Atmel Studio output window

                                                                                  Figure 5-3 Atmel Studio Output Window

                                                                                  12 Click to program the project binary on the SAM L21 Xplained Pro ltCtrl+Alt+F5gt13 Open the ldquoMicrochip SmartConnectrdquo application on Android or iOS device14 Connect and pair to the peripheral (pass key 123456)15 Custom service must now be visible after pairing with peripheral under Microchip SmartConnect

                                                                                  application

                                                                                  ATBTLC1000Setting up and Handling Custom Service

                                                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 41

                                                                                  Figure 5-4 Service List in Microchip SmartConnect Application

                                                                                  Note  Custom service is displayed as unknown service in the above figure as this service is not aSIG-defined service

                                                                                  Figure 5-5 General Information

                                                                                  16 Serial terminal client must display the following Log output

                                                                                  ATBTLC1000Setting up and Handling Custom Service

                                                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 42

                                                                                  Figure 5-6 Log Output Window

                                                                                  52 Updating the Temperature CharacteristicIn the previous assignment the custom Temperature characteristic is defined with a notify attribute Thistype of attribute requires notification to be sent to central when a new characteristic value is availableThe update of any ldquonotifyrdquo characteristic value is based on following interaction between the Host MCUand the ATBTLC1000Figure 5-7 Characteristic Notification

                                                                                  521 Setting a Characteristic Value ( at_ble_characteristic_value_set)Prototype ndashat_ble_status_t at_ble_characteristic_value_setat_ble_handle_t handleuint8_t valueuint16_t len)

                                                                                  Description ndash Sets a characteristic value in ATBTLC1000 memory

                                                                                  Parameters ndash

                                                                                  ATBTLC1000Setting up and Handling Custom Service

                                                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 43

                                                                                  bull handle [inout] ndash Pointer to Characteristic handle to be changedbull value [in] ndash New valuebull len [in] ndash Value length in bytes

                                                                                  Return ndash Execution Status

                                                                                  522 Sending a Notification (at_ble_notification_send)Prototype ndashat_ble_status_t at_ble_notification_send(at_ble_handle_t conn_handleat_ble_handle_t attr_handle)

                                                                                  Description ndash Sends a Notification

                                                                                  Parameters ndash

                                                                                  bull conn_handle[in] ndash handle of the connection to be notifiedbull attr_handle [in] ndash handle of the attribute originating the notification

                                                                                  Return ndash Execution Status

                                                                                  523 Sending Temperature Information Once in Every 10 Seconds to Central1 Modify the following ldquotimer_callback_fnrdquo callback function from the startup_templatec

                                                                                  filestatic void timer_callback_fn(void)timer_flag = true

                                                                                  2 hw_timer_init()in main routine of startup_templatec initializes the hardware timer3 If a client (Central) enables the notifications for a server the server (Peripheral) receives an

                                                                                  AT_BLE_CHARACTERISTIC_CHANGED event callback then start the periodic 10 second timer forsending the notification Add the following code in previously definedcustom_char_changed_app_event function Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))timer_flag = falsehw_timer_start(10)printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

                                                                                  4 Declare the following Temperature_value global variable in startup_templatec staticuint8_t Temperature_value = 25 as static

                                                                                  5 Add the following send_temperature_notification function in startup_templatec tosend temperature every 10 seconds Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++

                                                                                  ATBTLC1000Setting up and Handling Custom Service

                                                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 44

                                                                                  if(Temperature_value gt 75)Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set(environment_service_characs[0]char_val_handle(uint8_t )ampTemperature_valuesizeof(Temperature_value))ble_status = at_ble_notification_send(0environment_service_characs[0]char_val_handle)if(ble_status = AT_BLE_SUCCESS)printf(fail to send temperature update notification )

                                                                                  6 Add the following code in main routine to send temperature data every 10 secondswhile (1) ble_event_task()if(connected_flag == true ampamp timer_flag == truetimer_flag = falsesend_temperature_notification()

                                                                                  7 Click to save the project ltCtrl+Sgt

                                                                                  8 Compile the project by pressing the button ltF7gt9 Verify that no build error appears in Atmel Studio output window

                                                                                  Figure 5-8 Atmel Studio Output Window

                                                                                  10 Click to program the project binary on the L21 Xplained XSTK11 Open ldquoMicrochip SmartConnectrdquo Application on Android or iOS device12 Connect and pair to the peripheral (pass key 123456)13 Click NOTIFY to start the notification14 Temperature information in HEX values must be displayed in Microchip SmartConnect application

                                                                                  ATBTLC1000Setting up and Handling Custom Service

                                                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 45

                                                                                  Figure 5-9 Notification Window

                                                                                  15 Serial terminal must display the following log outputFigure 5-10 Log Output Window

                                                                                  ATBTLC1000Setting up and Handling Custom Service

                                                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 46

                                                                                  6 Appendix A Software Solution - Pre-Defined SvcThe following is the code implementation for handling of pre-defined service done in 4 SettingHandlingof Pre-Defined Service

                                                                                  - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehinclude device_infoh

                                                                                  volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false Services handlers dis_gatt_service_handler_t dis_service_handler

                                                                                  static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

                                                                                  void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                                                                                  Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                                                                                  Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                                                                                  static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                                                                                  Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void) Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks)

                                                                                  ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

                                                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 47

                                                                                  ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                                                                  timer callback function static void timer_callback_fn(void) Add timer callback functionality here

                                                                                  void button_cb(void) Add button callback functionality here

                                                                                  int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                                                                                  Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                                                                                  DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks()

                                                                                  Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service) dis_init_service(ampdis_service_handler) Define the primary service in the GATT server database if((dis_primary_service_define(ampdis_service_handler)) = AT_BLE_SUCCESS) printf(Device Information Service definition failed)

                                                                                  Start Advertising process start_advertisement() while(true) ble_event_task()

                                                                                  ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

                                                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 48

                                                                                  7 Appendix B Software Solution - Custom ServiceThe following is the code implementation for handling of pre-defined service done in 5 Setting up andHandling Custom Service

                                                                                  - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templateh

                                                                                  volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false

                                                                                  static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

                                                                                  define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0

                                                                                  define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

                                                                                  Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

                                                                                  void custom_environment_service_init(void) at_ble_uuid_t environment_service_uuid uint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUID uint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128 memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperature environment_service_characs[0]user_desc_len = 10 environment_service_characs[0]user_desc_max_len = 10 environment_service_characs[0]uuidtype = AT_BLE_UUID_128 memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16) environment_service_characs[0]properties = AT_BLE_CHAR_READ | AT_BLE_CHAR_NOTIFY environment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature value environment_service_characs[0]value_permissions = (AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuid ampenvironment_service_handlerNULL0 environment_service_characs1)=AT_BLE_SUCCESS) printf(n Assignment 41 Failed to Initialize custom environment service) else printf(n Assignment 41 Initialize custom environment service)

                                                                                  Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param) at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )param if (event_param-gtstatus == AT_BLE_SUCCESS) printf(n Assignment 41Notification Successfully sent over the air)

                                                                                  ATBTLC1000Appendix B Software Solution - Custom Service

                                                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 49

                                                                                  else printf(n Assignment 41Sending Notification over the air failed) return AT_BLE_SUCCESS

                                                                                  static at_ble_status_t custom_char_changed_app_event(void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle -gt char_new_value[0])) timer_flag = false hw_timer_start(10) printf(n Assignment 41Characteristic changed event) return AT_BLE_SUCCESS

                                                                                  static const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handler characteristic_changed = custom_char_changed_app_event

                                                                                  Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                                                                  void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                                                                                  Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                                                                                  Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                                                                                  static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                                                                                  Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void)

                                                                                  ATBTLC1000Appendix B Software Solution - Custom Service

                                                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 50

                                                                                  Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                                                                  timer callback function static void timer_callback_fn(void) Add timer callback functionality here timer_flag = true

                                                                                  void button_cb(void) Add button callback functionality here

                                                                                  static uint8_t Temperature_value = 25

                                                                                  Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++ if(Temperature_value gt 75) Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set( environment_service_characs[0]char_val_handle (uint8_t )ampTemperature_value sizeof(Temperature_value)) ble_status = at_ble_notification_send(0 environment_service_characs[0]char_val_handle) if(ble_status = AT_BLE_SUCCESS) printf(fail to send temperature update notification )

                                                                                  int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                                                                                  Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                                                                                  DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register Gap ATBTLC1000 Callbacks register_btlc1000_callbacks()

                                                                                  Custom service init custom_environment_service_init()

                                                                                  ATBTLC1000Appendix B Software Solution - Custom Service

                                                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 51

                                                                                  Register Gatt server callback register_gatt_server_callbacks()

                                                                                  Start Advertising process start_advertisement() while(true) ble_event_task() if(connected_flag == true ampamp timer_flag == true) timer_flag = false send_temperature_notification()

                                                                                  ATBTLC1000Appendix B Software Solution - Custom Service

                                                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 52

                                                                                  8 Document Revision HistoryRev B - 42018

                                                                                  Section Changes

                                                                                  Document Revised contents to match various Bluetooth Low Energy standard versions

                                                                                  Rev A - 122017

                                                                                  Section Changes

                                                                                  Document Initial release

                                                                                  ATBTLC1000Document Revision History

                                                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 53

                                                                                  The Microchip Web Site

                                                                                  Microchip provides online support via our web site at httpwwwmicrochipcom This web site is used asa means to make files and information easily available to customers Accessible by using your favoriteInternet browser the web site contains the following information

                                                                                  bull Product Support ndash Data sheets and errata application notes and sample programs designresources userrsquos guides and hardware support documents latest software releases and archivedsoftware

                                                                                  bull General Technical Support ndash Frequently Asked Questions (FAQ) technical support requestsonline discussion groups Microchip consultant program member listing

                                                                                  bull Business of Microchip ndash Product selector and ordering guides latest Microchip press releaseslisting of seminars and events listings of Microchip sales offices distributors and factoryrepresentatives

                                                                                  Customer Change Notification Service

                                                                                  Microchiprsquos customer notification service helps keep customers current on Microchip productsSubscribers will receive e-mail notification whenever there are changes updates revisions or erratarelated to a specified product family or development tool of interest

                                                                                  To register access the Microchip web site at httpwwwmicrochipcom Under ldquoSupportrdquo click onldquoCustomer Change Notificationrdquo and follow the registration instructions

                                                                                  Customer Support

                                                                                  Users of Microchip products can receive assistance through several channels

                                                                                  bull Distributor or Representativebull Local Sales Officebull Field Application Engineer (FAE)bull Technical Support

                                                                                  Customers should contact their distributor representative or Field Application Engineer (FAE) for supportLocal sales offices are also available to help customers A listing of sales offices and locations is includedin the back of this document

                                                                                  Technical support is available through the web site at httpwwwmicrochipcomsupport

                                                                                  Microchip Devices Code Protection Feature

                                                                                  Note the following details of the code protection feature on Microchip devices

                                                                                  bull Microchip products meet the specification contained in their particular Microchip Data Sheetbull Microchip believes that its family of products is one of the most secure families of its kind on the

                                                                                  market today when used in the intended manner and under normal conditionsbull There are dishonest and possibly illegal methods used to breach the code protection feature All of

                                                                                  these methods to our knowledge require using the Microchip products in a manner outside theoperating specifications contained in Microchiprsquos Data Sheets Most likely the person doing so isengaged in theft of intellectual property

                                                                                  bull Microchip is willing to work with the customer who is concerned about the integrity of their code

                                                                                  ATBTLC1000

                                                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 54

                                                                                  bull Neither Microchip nor any other semiconductor manufacturer can guarantee the security of theircode Code protection does not mean that we are guaranteeing the product as ldquounbreakablerdquo

                                                                                  Code protection is constantly evolving We at Microchip are committed to continuously improving thecode protection features of our products Attempts to break Microchiprsquos code protection feature may be aviolation of the Digital Millennium Copyright Act If such acts allow unauthorized access to your softwareor other copyrighted work you may have a right to sue for relief under that Act

                                                                                  Legal Notice

                                                                                  Information contained in this publication regarding device applications and the like is provided only foryour convenience and may be superseded by updates It is your responsibility to ensure that yourapplication meets with your specifications MICROCHIP MAKES NO REPRESENTATIONS ORWARRANTIES OF ANY KIND WHETHER EXPRESS OR IMPLIED WRITTEN OR ORAL STATUTORYOR OTHERWISE RELATED TO THE INFORMATION INCLUDING BUT NOT LIMITED TO ITSCONDITION QUALITY PERFORMANCE MERCHANTABILITY OR FITNESS FOR PURPOSEMicrochip disclaims all liability arising from this information and its use Use of Microchip devices in lifesupport andor safety applications is entirely at the buyerrsquos risk and the buyer agrees to defendindemnify and hold harmless Microchip from any and all damages claims suits or expenses resultingfrom such use No licenses are conveyed implicitly or otherwise under any Microchip intellectualproperty rights unless otherwise stated

                                                                                  Trademarks

                                                                                  The Microchip name and logo the Microchip logo AnyRate AVR AVR logo AVR Freaks BeaconThingsBitCloud CryptoMemory CryptoRF dsPIC FlashFlex flexPWR Heldo JukeBlox KeeLoq KeeLoq logoKleer LANCheck LINK MD maXStylus maXTouch MediaLB megaAVR MOST MOST logo MPLABOptoLyzer PIC picoPower PICSTART PIC32 logo Prochip Designer QTouch RightTouch SAM-BASpyNIC SST SST Logo SuperFlash tinyAVR UNIO and XMEGA are registered trademarks ofMicrochip Technology Incorporated in the USA and other countries

                                                                                  ClockWorks The Embedded Control Solutions Company EtherSynch Hyper Speed Control HyperLightLoad IntelliMOS mTouch Precision Edge and Quiet-Wire are registered trademarks of MicrochipTechnology Incorporated in the USA

                                                                                  Adjacent Key Suppression AKS Analog-for-the-Digital Age Any Capacitor AnyIn AnyOut BodyComchipKIT chipKIT logo CodeGuard CryptoAuthentication CryptoCompanion CryptoControllerdsPICDEM dsPICDEMnet Dynamic Average Matching DAM ECAN EtherGREEN In-Circuit SerialProgramming ICSP Inter-Chip Connectivity JitterBlocker KleerNet KleerNet logo Mindi MiWimotorBench MPASM MPF MPLAB Certified logo MPLIB MPLINK MultiTRAK NetDetach OmniscientCode Generation PICDEM PICDEMnet PICkit PICtail PureSilicon QMatrix RightTouch logo REALICE Ripple Blocker SAM-ICE Serial Quad IO SMART-IS SQI SuperSwitcher SuperSwitcher II TotalEndurance TSHARC USBCheck VariSense ViewSpan WiperLock Wireless DNA and ZENA aretrademarks of Microchip Technology Incorporated in the USA and other countries

                                                                                  SQTP is a service mark of Microchip Technology Incorporated in the USA

                                                                                  Silicon Storage Technology is a registered trademark of Microchip Technology Inc in other countries

                                                                                  GestIC is a registered trademark of Microchip Technology Germany II GmbH amp Co KG a subsidiary ofMicrochip Technology Inc in other countries

                                                                                  All other trademarks mentioned herein are property of their respective companies

                                                                                  ATBTLC1000

                                                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 55

                                                                                  copy 2018 Microchip Technology Incorporated Printed in the USA All Rights Reserved

                                                                                  ISBN 978-1-5224-2921-0

                                                                                  Quality Management System Certified by DNV

                                                                                  ISOTS 16949Microchip received ISOTS-169492009 certification for its worldwide headquarters design and waferfabrication facilities in Chandler and Tempe Arizona Gresham Oregon and design centers in Californiaand India The Companyrsquos quality system processes and procedures are for its PICreg MCUs and dsPICreg

                                                                                  DSCs KEELOQreg code hopping devices Serial EEPROMs microperipherals nonvolatile memory andanalog products In addition Microchiprsquos quality system for the design and manufacture of developmentsystems is ISO 90012000 certified

                                                                                  ATBTLC1000

                                                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 56

                                                                                  AMERICAS ASIAPACIFIC ASIAPACIFIC EUROPECorporate Office2355 West Chandler BlvdChandler AZ 85224-6199Tel 480-792-7200Fax 480-792-7277Technical SupporthttpwwwmicrochipcomsupportWeb AddresswwwmicrochipcomAtlantaDuluth GATel 678-957-9614Fax 678-957-1455Austin TXTel 512-257-3370BostonWestborough MATel 774-760-0087Fax 774-760-0088ChicagoItasca ILTel 630-285-0071Fax 630-285-0075DallasAddison TXTel 972-818-7423Fax 972-818-2924DetroitNovi MITel 248-848-4000Houston TXTel 281-894-5983IndianapolisNoblesville INTel 317-773-8323Fax 317-773-5453Tel 317-536-2380Los AngelesMission Viejo CATel 949-462-9523Fax 949-462-9608Tel 951-273-7800Raleigh NCTel 919-844-7510New York NYTel 631-435-6000San Jose CATel 408-735-9110Tel 408-436-4270Canada - TorontoTel 905-695-1980Fax 905-695-2078

                                                                                  Australia - SydneyTel 61-2-9868-6733China - BeijingTel 86-10-8569-7000China - ChengduTel 86-28-8665-5511China - ChongqingTel 86-23-8980-9588China - DongguanTel 86-769-8702-9880China - GuangzhouTel 86-20-8755-8029China - HangzhouTel 86-571-8792-8115China - Hong Kong SARTel 852-2943-5100China - NanjingTel 86-25-8473-2460China - QingdaoTel 86-532-8502-7355China - ShanghaiTel 86-21-3326-8000China - ShenyangTel 86-24-2334-2829China - ShenzhenTel 86-755-8864-2200China - SuzhouTel 86-186-6233-1526China - WuhanTel 86-27-5980-5300China - XianTel 86-29-8833-7252China - XiamenTel 86-592-2388138China - ZhuhaiTel 86-756-3210040

                                                                                  India - BangaloreTel 91-80-3090-4444India - New DelhiTel 91-11-4160-8631India - PuneTel 91-20-4121-0141Japan - OsakaTel 81-6-6152-7160Japan - TokyoTel 81-3-6880- 3770Korea - DaeguTel 82-53-744-4301Korea - SeoulTel 82-2-554-7200Malaysia - Kuala LumpurTel 60-3-7651-7906Malaysia - PenangTel 60-4-227-8870Philippines - ManilaTel 63-2-634-9065SingaporeTel 65-6334-8870Taiwan - Hsin ChuTel 886-3-577-8366Taiwan - KaohsiungTel 886-7-213-7830Taiwan - TaipeiTel 886-2-2508-8600Thailand - BangkokTel 66-2-694-1351Vietnam - Ho Chi MinhTel 84-28-5448-2100

                                                                                  Austria - WelsTel 43-7242-2244-39Fax 43-7242-2244-393Denmark - CopenhagenTel 45-4450-2828Fax 45-4485-2829Finland - EspooTel 358-9-4520-820France - ParisTel 33-1-69-53-63-20Fax 33-1-69-30-90-79Germany - GarchingTel 49-8931-9700Germany - HaanTel 49-2129-3766400Germany - HeilbronnTel 49-7131-67-3636Germany - KarlsruheTel 49-721-625370Germany - MunichTel 49-89-627-144-0Fax 49-89-627-144-44Germany - RosenheimTel 49-8031-354-560Israel - RarsquoananaTel 972-9-744-7705Italy - MilanTel 39-0331-742611Fax 39-0331-466781Italy - PadovaTel 39-049-7625286Netherlands - DrunenTel 31-416-690399Fax 31-416-690340Norway - TrondheimTel 47-7289-7561Poland - WarsawTel 48-22-3325737Romania - BucharestTel 40-21-407-87-50Spain - MadridTel 34-91-708-08-90Fax 34-91-708-08-91Sweden - GothenbergTel 46-31-704-60-40Sweden - StockholmTel 46-8-5090-4654UK - WokinghamTel 44-118-921-5800Fax 44-118-921-5820

                                                                                  Worldwide Sales and Service

                                                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 57

                                                                                  • Introduction
                                                                                  • Table of Contents
                                                                                  • 1 Getting Started
                                                                                    • 11 Software Prerequisites
                                                                                      • 111 Installation Steps of Atmel Studio 7
                                                                                        • 12 Software Setup
                                                                                          • 121 Installation of Microchip SmartConnect application on a Mobile device
                                                                                            • 13 ATBTLC1000 Embedded Firmware
                                                                                            • 14 ATBTLC1000 Host Software API
                                                                                            • 15 Hardware Prerequisites
                                                                                              • 151 SMARTtrade SAM L21 Xplained Pro
                                                                                              • 152 ATBTLC1000ZR Xplained Pro Extension board
                                                                                                • 16 Hardware Setup
                                                                                                  • 2 Creating the Project and Initializing
                                                                                                    • 21 Creating Project from ASF
                                                                                                    • 22 Configuring ASF for ATBTLC1000-ZR
                                                                                                    • 23 Compiling and Testing the Project
                                                                                                      • 3 Establishing Connection with Central Device
                                                                                                        • 31 Configuring and Starting the Advertisement Process
                                                                                                          • 311 Flags (AD Type 0x00)
                                                                                                          • 312 Available Service UUID (AD Types 0x02 to 0x07)
                                                                                                          • 313 Device Name (AD Types 0x08 to 0x09)
                                                                                                            • 3131 Setting the Advertisement Payload (ble_advertisement_data_set)
                                                                                                            • 3132 Starting the Advertisement Process (at_ble_adv_start)
                                                                                                              • 314 Advertisement Process
                                                                                                                • 3141 Starting the Advertisement Process
                                                                                                                    • 32 Managing GAP events
                                                                                                                      • 321 Handling of Connected and Disconnected GAP Events
                                                                                                                          • 4 SettingHandling of Pre-Defined Service
                                                                                                                            • 41 Adding Device Info Service Component from ASF Wizard to Project
                                                                                                                            • 42 Configuring and Loading Device Information Service
                                                                                                                              • 421 Procedure to Configure and Load Device Info Service
                                                                                                                                  • 5 Setting up and Handling Custom Service
                                                                                                                                    • 51 Configuring and Loading the Custom Environment Service
                                                                                                                                      • 511 Procedure to Configure and Load Custom Environment Service
                                                                                                                                        • 52 Updating the Temperature Characteristic
                                                                                                                                          • 521 Setting a Characteristic Value ( at_ble_characteristic_value_set)
                                                                                                                                          • 522 Sending a Notification (at_ble_notification_send)
                                                                                                                                          • 523 Sending Temperature Information Once in Every 10 Seconds to Central
                                                                                                                                              • 6 Appendix A Software Solution - Pre-Defined Svc
                                                                                                                                              • 7 Appendix B Software Solution - Custom Service
                                                                                                                                              • 8 Document Revision History
                                                                                                                                              • The Microchip Web Site
                                                                                                                                              • Customer Change Notification Service
                                                                                                                                              • Customer Support
                                                                                                                                              • Microchip Devices Code Protection Feature
                                                                                                                                              • Legal Notice
                                                                                                                                              • Trademarks
                                                                                                                                              • Quality Management System Certified by DNV
                                                                                                                                              • Worldwide Sales and Service

                                                                                    Figure 5-4 Service List in Microchip SmartConnect Application

                                                                                    Note  Custom service is displayed as unknown service in the above figure as this service is not aSIG-defined service

                                                                                    Figure 5-5 General Information

                                                                                    16 Serial terminal client must display the following Log output

                                                                                    ATBTLC1000Setting up and Handling Custom Service

                                                                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 42

                                                                                    Figure 5-6 Log Output Window

                                                                                    52 Updating the Temperature CharacteristicIn the previous assignment the custom Temperature characteristic is defined with a notify attribute Thistype of attribute requires notification to be sent to central when a new characteristic value is availableThe update of any ldquonotifyrdquo characteristic value is based on following interaction between the Host MCUand the ATBTLC1000Figure 5-7 Characteristic Notification

                                                                                    521 Setting a Characteristic Value ( at_ble_characteristic_value_set)Prototype ndashat_ble_status_t at_ble_characteristic_value_setat_ble_handle_t handleuint8_t valueuint16_t len)

                                                                                    Description ndash Sets a characteristic value in ATBTLC1000 memory

                                                                                    Parameters ndash

                                                                                    ATBTLC1000Setting up and Handling Custom Service

                                                                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 43

                                                                                    bull handle [inout] ndash Pointer to Characteristic handle to be changedbull value [in] ndash New valuebull len [in] ndash Value length in bytes

                                                                                    Return ndash Execution Status

                                                                                    522 Sending a Notification (at_ble_notification_send)Prototype ndashat_ble_status_t at_ble_notification_send(at_ble_handle_t conn_handleat_ble_handle_t attr_handle)

                                                                                    Description ndash Sends a Notification

                                                                                    Parameters ndash

                                                                                    bull conn_handle[in] ndash handle of the connection to be notifiedbull attr_handle [in] ndash handle of the attribute originating the notification

                                                                                    Return ndash Execution Status

                                                                                    523 Sending Temperature Information Once in Every 10 Seconds to Central1 Modify the following ldquotimer_callback_fnrdquo callback function from the startup_templatec

                                                                                    filestatic void timer_callback_fn(void)timer_flag = true

                                                                                    2 hw_timer_init()in main routine of startup_templatec initializes the hardware timer3 If a client (Central) enables the notifications for a server the server (Peripheral) receives an

                                                                                    AT_BLE_CHARACTERISTIC_CHANGED event callback then start the periodic 10 second timer forsending the notification Add the following code in previously definedcustom_char_changed_app_event function Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))timer_flag = falsehw_timer_start(10)printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

                                                                                    4 Declare the following Temperature_value global variable in startup_templatec staticuint8_t Temperature_value = 25 as static

                                                                                    5 Add the following send_temperature_notification function in startup_templatec tosend temperature every 10 seconds Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++

                                                                                    ATBTLC1000Setting up and Handling Custom Service

                                                                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 44

                                                                                    if(Temperature_value gt 75)Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set(environment_service_characs[0]char_val_handle(uint8_t )ampTemperature_valuesizeof(Temperature_value))ble_status = at_ble_notification_send(0environment_service_characs[0]char_val_handle)if(ble_status = AT_BLE_SUCCESS)printf(fail to send temperature update notification )

                                                                                    6 Add the following code in main routine to send temperature data every 10 secondswhile (1) ble_event_task()if(connected_flag == true ampamp timer_flag == truetimer_flag = falsesend_temperature_notification()

                                                                                    7 Click to save the project ltCtrl+Sgt

                                                                                    8 Compile the project by pressing the button ltF7gt9 Verify that no build error appears in Atmel Studio output window

                                                                                    Figure 5-8 Atmel Studio Output Window

                                                                                    10 Click to program the project binary on the L21 Xplained XSTK11 Open ldquoMicrochip SmartConnectrdquo Application on Android or iOS device12 Connect and pair to the peripheral (pass key 123456)13 Click NOTIFY to start the notification14 Temperature information in HEX values must be displayed in Microchip SmartConnect application

                                                                                    ATBTLC1000Setting up and Handling Custom Service

                                                                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 45

                                                                                    Figure 5-9 Notification Window

                                                                                    15 Serial terminal must display the following log outputFigure 5-10 Log Output Window

                                                                                    ATBTLC1000Setting up and Handling Custom Service

                                                                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 46

                                                                                    6 Appendix A Software Solution - Pre-Defined SvcThe following is the code implementation for handling of pre-defined service done in 4 SettingHandlingof Pre-Defined Service

                                                                                    - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehinclude device_infoh

                                                                                    volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false Services handlers dis_gatt_service_handler_t dis_service_handler

                                                                                    static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

                                                                                    void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                                                                                    Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                                                                                    Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                                                                                    static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                                                                                    Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void) Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks)

                                                                                    ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

                                                                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 47

                                                                                    ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                                                                    timer callback function static void timer_callback_fn(void) Add timer callback functionality here

                                                                                    void button_cb(void) Add button callback functionality here

                                                                                    int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                                                                                    Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                                                                                    DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks()

                                                                                    Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service) dis_init_service(ampdis_service_handler) Define the primary service in the GATT server database if((dis_primary_service_define(ampdis_service_handler)) = AT_BLE_SUCCESS) printf(Device Information Service definition failed)

                                                                                    Start Advertising process start_advertisement() while(true) ble_event_task()

                                                                                    ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

                                                                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 48

                                                                                    7 Appendix B Software Solution - Custom ServiceThe following is the code implementation for handling of pre-defined service done in 5 Setting up andHandling Custom Service

                                                                                    - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templateh

                                                                                    volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false

                                                                                    static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

                                                                                    define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0

                                                                                    define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

                                                                                    Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

                                                                                    void custom_environment_service_init(void) at_ble_uuid_t environment_service_uuid uint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUID uint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128 memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperature environment_service_characs[0]user_desc_len = 10 environment_service_characs[0]user_desc_max_len = 10 environment_service_characs[0]uuidtype = AT_BLE_UUID_128 memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16) environment_service_characs[0]properties = AT_BLE_CHAR_READ | AT_BLE_CHAR_NOTIFY environment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature value environment_service_characs[0]value_permissions = (AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuid ampenvironment_service_handlerNULL0 environment_service_characs1)=AT_BLE_SUCCESS) printf(n Assignment 41 Failed to Initialize custom environment service) else printf(n Assignment 41 Initialize custom environment service)

                                                                                    Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param) at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )param if (event_param-gtstatus == AT_BLE_SUCCESS) printf(n Assignment 41Notification Successfully sent over the air)

                                                                                    ATBTLC1000Appendix B Software Solution - Custom Service

                                                                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 49

                                                                                    else printf(n Assignment 41Sending Notification over the air failed) return AT_BLE_SUCCESS

                                                                                    static at_ble_status_t custom_char_changed_app_event(void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle -gt char_new_value[0])) timer_flag = false hw_timer_start(10) printf(n Assignment 41Characteristic changed event) return AT_BLE_SUCCESS

                                                                                    static const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handler characteristic_changed = custom_char_changed_app_event

                                                                                    Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                                                                    void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                                                                                    Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                                                                                    Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                                                                                    static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                                                                                    Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void)

                                                                                    ATBTLC1000Appendix B Software Solution - Custom Service

                                                                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 50

                                                                                    Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                                                                    timer callback function static void timer_callback_fn(void) Add timer callback functionality here timer_flag = true

                                                                                    void button_cb(void) Add button callback functionality here

                                                                                    static uint8_t Temperature_value = 25

                                                                                    Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++ if(Temperature_value gt 75) Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set( environment_service_characs[0]char_val_handle (uint8_t )ampTemperature_value sizeof(Temperature_value)) ble_status = at_ble_notification_send(0 environment_service_characs[0]char_val_handle) if(ble_status = AT_BLE_SUCCESS) printf(fail to send temperature update notification )

                                                                                    int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                                                                                    Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                                                                                    DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register Gap ATBTLC1000 Callbacks register_btlc1000_callbacks()

                                                                                    Custom service init custom_environment_service_init()

                                                                                    ATBTLC1000Appendix B Software Solution - Custom Service

                                                                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 51

                                                                                    Register Gatt server callback register_gatt_server_callbacks()

                                                                                    Start Advertising process start_advertisement() while(true) ble_event_task() if(connected_flag == true ampamp timer_flag == true) timer_flag = false send_temperature_notification()

                                                                                    ATBTLC1000Appendix B Software Solution - Custom Service

                                                                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 52

                                                                                    8 Document Revision HistoryRev B - 42018

                                                                                    Section Changes

                                                                                    Document Revised contents to match various Bluetooth Low Energy standard versions

                                                                                    Rev A - 122017

                                                                                    Section Changes

                                                                                    Document Initial release

                                                                                    ATBTLC1000Document Revision History

                                                                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 53

                                                                                    The Microchip Web Site

                                                                                    Microchip provides online support via our web site at httpwwwmicrochipcom This web site is used asa means to make files and information easily available to customers Accessible by using your favoriteInternet browser the web site contains the following information

                                                                                    bull Product Support ndash Data sheets and errata application notes and sample programs designresources userrsquos guides and hardware support documents latest software releases and archivedsoftware

                                                                                    bull General Technical Support ndash Frequently Asked Questions (FAQ) technical support requestsonline discussion groups Microchip consultant program member listing

                                                                                    bull Business of Microchip ndash Product selector and ordering guides latest Microchip press releaseslisting of seminars and events listings of Microchip sales offices distributors and factoryrepresentatives

                                                                                    Customer Change Notification Service

                                                                                    Microchiprsquos customer notification service helps keep customers current on Microchip productsSubscribers will receive e-mail notification whenever there are changes updates revisions or erratarelated to a specified product family or development tool of interest

                                                                                    To register access the Microchip web site at httpwwwmicrochipcom Under ldquoSupportrdquo click onldquoCustomer Change Notificationrdquo and follow the registration instructions

                                                                                    Customer Support

                                                                                    Users of Microchip products can receive assistance through several channels

                                                                                    bull Distributor or Representativebull Local Sales Officebull Field Application Engineer (FAE)bull Technical Support

                                                                                    Customers should contact their distributor representative or Field Application Engineer (FAE) for supportLocal sales offices are also available to help customers A listing of sales offices and locations is includedin the back of this document

                                                                                    Technical support is available through the web site at httpwwwmicrochipcomsupport

                                                                                    Microchip Devices Code Protection Feature

                                                                                    Note the following details of the code protection feature on Microchip devices

                                                                                    bull Microchip products meet the specification contained in their particular Microchip Data Sheetbull Microchip believes that its family of products is one of the most secure families of its kind on the

                                                                                    market today when used in the intended manner and under normal conditionsbull There are dishonest and possibly illegal methods used to breach the code protection feature All of

                                                                                    these methods to our knowledge require using the Microchip products in a manner outside theoperating specifications contained in Microchiprsquos Data Sheets Most likely the person doing so isengaged in theft of intellectual property

                                                                                    bull Microchip is willing to work with the customer who is concerned about the integrity of their code

                                                                                    ATBTLC1000

                                                                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 54

                                                                                    bull Neither Microchip nor any other semiconductor manufacturer can guarantee the security of theircode Code protection does not mean that we are guaranteeing the product as ldquounbreakablerdquo

                                                                                    Code protection is constantly evolving We at Microchip are committed to continuously improving thecode protection features of our products Attempts to break Microchiprsquos code protection feature may be aviolation of the Digital Millennium Copyright Act If such acts allow unauthorized access to your softwareor other copyrighted work you may have a right to sue for relief under that Act

                                                                                    Legal Notice

                                                                                    Information contained in this publication regarding device applications and the like is provided only foryour convenience and may be superseded by updates It is your responsibility to ensure that yourapplication meets with your specifications MICROCHIP MAKES NO REPRESENTATIONS ORWARRANTIES OF ANY KIND WHETHER EXPRESS OR IMPLIED WRITTEN OR ORAL STATUTORYOR OTHERWISE RELATED TO THE INFORMATION INCLUDING BUT NOT LIMITED TO ITSCONDITION QUALITY PERFORMANCE MERCHANTABILITY OR FITNESS FOR PURPOSEMicrochip disclaims all liability arising from this information and its use Use of Microchip devices in lifesupport andor safety applications is entirely at the buyerrsquos risk and the buyer agrees to defendindemnify and hold harmless Microchip from any and all damages claims suits or expenses resultingfrom such use No licenses are conveyed implicitly or otherwise under any Microchip intellectualproperty rights unless otherwise stated

                                                                                    Trademarks

                                                                                    The Microchip name and logo the Microchip logo AnyRate AVR AVR logo AVR Freaks BeaconThingsBitCloud CryptoMemory CryptoRF dsPIC FlashFlex flexPWR Heldo JukeBlox KeeLoq KeeLoq logoKleer LANCheck LINK MD maXStylus maXTouch MediaLB megaAVR MOST MOST logo MPLABOptoLyzer PIC picoPower PICSTART PIC32 logo Prochip Designer QTouch RightTouch SAM-BASpyNIC SST SST Logo SuperFlash tinyAVR UNIO and XMEGA are registered trademarks ofMicrochip Technology Incorporated in the USA and other countries

                                                                                    ClockWorks The Embedded Control Solutions Company EtherSynch Hyper Speed Control HyperLightLoad IntelliMOS mTouch Precision Edge and Quiet-Wire are registered trademarks of MicrochipTechnology Incorporated in the USA

                                                                                    Adjacent Key Suppression AKS Analog-for-the-Digital Age Any Capacitor AnyIn AnyOut BodyComchipKIT chipKIT logo CodeGuard CryptoAuthentication CryptoCompanion CryptoControllerdsPICDEM dsPICDEMnet Dynamic Average Matching DAM ECAN EtherGREEN In-Circuit SerialProgramming ICSP Inter-Chip Connectivity JitterBlocker KleerNet KleerNet logo Mindi MiWimotorBench MPASM MPF MPLAB Certified logo MPLIB MPLINK MultiTRAK NetDetach OmniscientCode Generation PICDEM PICDEMnet PICkit PICtail PureSilicon QMatrix RightTouch logo REALICE Ripple Blocker SAM-ICE Serial Quad IO SMART-IS SQI SuperSwitcher SuperSwitcher II TotalEndurance TSHARC USBCheck VariSense ViewSpan WiperLock Wireless DNA and ZENA aretrademarks of Microchip Technology Incorporated in the USA and other countries

                                                                                    SQTP is a service mark of Microchip Technology Incorporated in the USA

                                                                                    Silicon Storage Technology is a registered trademark of Microchip Technology Inc in other countries

                                                                                    GestIC is a registered trademark of Microchip Technology Germany II GmbH amp Co KG a subsidiary ofMicrochip Technology Inc in other countries

                                                                                    All other trademarks mentioned herein are property of their respective companies

                                                                                    ATBTLC1000

                                                                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 55

                                                                                    copy 2018 Microchip Technology Incorporated Printed in the USA All Rights Reserved

                                                                                    ISBN 978-1-5224-2921-0

                                                                                    Quality Management System Certified by DNV

                                                                                    ISOTS 16949Microchip received ISOTS-169492009 certification for its worldwide headquarters design and waferfabrication facilities in Chandler and Tempe Arizona Gresham Oregon and design centers in Californiaand India The Companyrsquos quality system processes and procedures are for its PICreg MCUs and dsPICreg

                                                                                    DSCs KEELOQreg code hopping devices Serial EEPROMs microperipherals nonvolatile memory andanalog products In addition Microchiprsquos quality system for the design and manufacture of developmentsystems is ISO 90012000 certified

                                                                                    ATBTLC1000

                                                                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 56

                                                                                    AMERICAS ASIAPACIFIC ASIAPACIFIC EUROPECorporate Office2355 West Chandler BlvdChandler AZ 85224-6199Tel 480-792-7200Fax 480-792-7277Technical SupporthttpwwwmicrochipcomsupportWeb AddresswwwmicrochipcomAtlantaDuluth GATel 678-957-9614Fax 678-957-1455Austin TXTel 512-257-3370BostonWestborough MATel 774-760-0087Fax 774-760-0088ChicagoItasca ILTel 630-285-0071Fax 630-285-0075DallasAddison TXTel 972-818-7423Fax 972-818-2924DetroitNovi MITel 248-848-4000Houston TXTel 281-894-5983IndianapolisNoblesville INTel 317-773-8323Fax 317-773-5453Tel 317-536-2380Los AngelesMission Viejo CATel 949-462-9523Fax 949-462-9608Tel 951-273-7800Raleigh NCTel 919-844-7510New York NYTel 631-435-6000San Jose CATel 408-735-9110Tel 408-436-4270Canada - TorontoTel 905-695-1980Fax 905-695-2078

                                                                                    Australia - SydneyTel 61-2-9868-6733China - BeijingTel 86-10-8569-7000China - ChengduTel 86-28-8665-5511China - ChongqingTel 86-23-8980-9588China - DongguanTel 86-769-8702-9880China - GuangzhouTel 86-20-8755-8029China - HangzhouTel 86-571-8792-8115China - Hong Kong SARTel 852-2943-5100China - NanjingTel 86-25-8473-2460China - QingdaoTel 86-532-8502-7355China - ShanghaiTel 86-21-3326-8000China - ShenyangTel 86-24-2334-2829China - ShenzhenTel 86-755-8864-2200China - SuzhouTel 86-186-6233-1526China - WuhanTel 86-27-5980-5300China - XianTel 86-29-8833-7252China - XiamenTel 86-592-2388138China - ZhuhaiTel 86-756-3210040

                                                                                    India - BangaloreTel 91-80-3090-4444India - New DelhiTel 91-11-4160-8631India - PuneTel 91-20-4121-0141Japan - OsakaTel 81-6-6152-7160Japan - TokyoTel 81-3-6880- 3770Korea - DaeguTel 82-53-744-4301Korea - SeoulTel 82-2-554-7200Malaysia - Kuala LumpurTel 60-3-7651-7906Malaysia - PenangTel 60-4-227-8870Philippines - ManilaTel 63-2-634-9065SingaporeTel 65-6334-8870Taiwan - Hsin ChuTel 886-3-577-8366Taiwan - KaohsiungTel 886-7-213-7830Taiwan - TaipeiTel 886-2-2508-8600Thailand - BangkokTel 66-2-694-1351Vietnam - Ho Chi MinhTel 84-28-5448-2100

                                                                                    Austria - WelsTel 43-7242-2244-39Fax 43-7242-2244-393Denmark - CopenhagenTel 45-4450-2828Fax 45-4485-2829Finland - EspooTel 358-9-4520-820France - ParisTel 33-1-69-53-63-20Fax 33-1-69-30-90-79Germany - GarchingTel 49-8931-9700Germany - HaanTel 49-2129-3766400Germany - HeilbronnTel 49-7131-67-3636Germany - KarlsruheTel 49-721-625370Germany - MunichTel 49-89-627-144-0Fax 49-89-627-144-44Germany - RosenheimTel 49-8031-354-560Israel - RarsquoananaTel 972-9-744-7705Italy - MilanTel 39-0331-742611Fax 39-0331-466781Italy - PadovaTel 39-049-7625286Netherlands - DrunenTel 31-416-690399Fax 31-416-690340Norway - TrondheimTel 47-7289-7561Poland - WarsawTel 48-22-3325737Romania - BucharestTel 40-21-407-87-50Spain - MadridTel 34-91-708-08-90Fax 34-91-708-08-91Sweden - GothenbergTel 46-31-704-60-40Sweden - StockholmTel 46-8-5090-4654UK - WokinghamTel 44-118-921-5800Fax 44-118-921-5820

                                                                                    Worldwide Sales and Service

                                                                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 57

                                                                                    • Introduction
                                                                                    • Table of Contents
                                                                                    • 1 Getting Started
                                                                                      • 11 Software Prerequisites
                                                                                        • 111 Installation Steps of Atmel Studio 7
                                                                                          • 12 Software Setup
                                                                                            • 121 Installation of Microchip SmartConnect application on a Mobile device
                                                                                              • 13 ATBTLC1000 Embedded Firmware
                                                                                              • 14 ATBTLC1000 Host Software API
                                                                                              • 15 Hardware Prerequisites
                                                                                                • 151 SMARTtrade SAM L21 Xplained Pro
                                                                                                • 152 ATBTLC1000ZR Xplained Pro Extension board
                                                                                                  • 16 Hardware Setup
                                                                                                    • 2 Creating the Project and Initializing
                                                                                                      • 21 Creating Project from ASF
                                                                                                      • 22 Configuring ASF for ATBTLC1000-ZR
                                                                                                      • 23 Compiling and Testing the Project
                                                                                                        • 3 Establishing Connection with Central Device
                                                                                                          • 31 Configuring and Starting the Advertisement Process
                                                                                                            • 311 Flags (AD Type 0x00)
                                                                                                            • 312 Available Service UUID (AD Types 0x02 to 0x07)
                                                                                                            • 313 Device Name (AD Types 0x08 to 0x09)
                                                                                                              • 3131 Setting the Advertisement Payload (ble_advertisement_data_set)
                                                                                                              • 3132 Starting the Advertisement Process (at_ble_adv_start)
                                                                                                                • 314 Advertisement Process
                                                                                                                  • 3141 Starting the Advertisement Process
                                                                                                                      • 32 Managing GAP events
                                                                                                                        • 321 Handling of Connected and Disconnected GAP Events
                                                                                                                            • 4 SettingHandling of Pre-Defined Service
                                                                                                                              • 41 Adding Device Info Service Component from ASF Wizard to Project
                                                                                                                              • 42 Configuring and Loading Device Information Service
                                                                                                                                • 421 Procedure to Configure and Load Device Info Service
                                                                                                                                    • 5 Setting up and Handling Custom Service
                                                                                                                                      • 51 Configuring and Loading the Custom Environment Service
                                                                                                                                        • 511 Procedure to Configure and Load Custom Environment Service
                                                                                                                                          • 52 Updating the Temperature Characteristic
                                                                                                                                            • 521 Setting a Characteristic Value ( at_ble_characteristic_value_set)
                                                                                                                                            • 522 Sending a Notification (at_ble_notification_send)
                                                                                                                                            • 523 Sending Temperature Information Once in Every 10 Seconds to Central
                                                                                                                                                • 6 Appendix A Software Solution - Pre-Defined Svc
                                                                                                                                                • 7 Appendix B Software Solution - Custom Service
                                                                                                                                                • 8 Document Revision History
                                                                                                                                                • The Microchip Web Site
                                                                                                                                                • Customer Change Notification Service
                                                                                                                                                • Customer Support
                                                                                                                                                • Microchip Devices Code Protection Feature
                                                                                                                                                • Legal Notice
                                                                                                                                                • Trademarks
                                                                                                                                                • Quality Management System Certified by DNV
                                                                                                                                                • Worldwide Sales and Service

                                                                                      Figure 5-6 Log Output Window

                                                                                      52 Updating the Temperature CharacteristicIn the previous assignment the custom Temperature characteristic is defined with a notify attribute Thistype of attribute requires notification to be sent to central when a new characteristic value is availableThe update of any ldquonotifyrdquo characteristic value is based on following interaction between the Host MCUand the ATBTLC1000Figure 5-7 Characteristic Notification

                                                                                      521 Setting a Characteristic Value ( at_ble_characteristic_value_set)Prototype ndashat_ble_status_t at_ble_characteristic_value_setat_ble_handle_t handleuint8_t valueuint16_t len)

                                                                                      Description ndash Sets a characteristic value in ATBTLC1000 memory

                                                                                      Parameters ndash

                                                                                      ATBTLC1000Setting up and Handling Custom Service

                                                                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 43

                                                                                      bull handle [inout] ndash Pointer to Characteristic handle to be changedbull value [in] ndash New valuebull len [in] ndash Value length in bytes

                                                                                      Return ndash Execution Status

                                                                                      522 Sending a Notification (at_ble_notification_send)Prototype ndashat_ble_status_t at_ble_notification_send(at_ble_handle_t conn_handleat_ble_handle_t attr_handle)

                                                                                      Description ndash Sends a Notification

                                                                                      Parameters ndash

                                                                                      bull conn_handle[in] ndash handle of the connection to be notifiedbull attr_handle [in] ndash handle of the attribute originating the notification

                                                                                      Return ndash Execution Status

                                                                                      523 Sending Temperature Information Once in Every 10 Seconds to Central1 Modify the following ldquotimer_callback_fnrdquo callback function from the startup_templatec

                                                                                      filestatic void timer_callback_fn(void)timer_flag = true

                                                                                      2 hw_timer_init()in main routine of startup_templatec initializes the hardware timer3 If a client (Central) enables the notifications for a server the server (Peripheral) receives an

                                                                                      AT_BLE_CHARACTERISTIC_CHANGED event callback then start the periodic 10 second timer forsending the notification Add the following code in previously definedcustom_char_changed_app_event function Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))timer_flag = falsehw_timer_start(10)printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

                                                                                      4 Declare the following Temperature_value global variable in startup_templatec staticuint8_t Temperature_value = 25 as static

                                                                                      5 Add the following send_temperature_notification function in startup_templatec tosend temperature every 10 seconds Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++

                                                                                      ATBTLC1000Setting up and Handling Custom Service

                                                                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 44

                                                                                      if(Temperature_value gt 75)Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set(environment_service_characs[0]char_val_handle(uint8_t )ampTemperature_valuesizeof(Temperature_value))ble_status = at_ble_notification_send(0environment_service_characs[0]char_val_handle)if(ble_status = AT_BLE_SUCCESS)printf(fail to send temperature update notification )

                                                                                      6 Add the following code in main routine to send temperature data every 10 secondswhile (1) ble_event_task()if(connected_flag == true ampamp timer_flag == truetimer_flag = falsesend_temperature_notification()

                                                                                      7 Click to save the project ltCtrl+Sgt

                                                                                      8 Compile the project by pressing the button ltF7gt9 Verify that no build error appears in Atmel Studio output window

                                                                                      Figure 5-8 Atmel Studio Output Window

                                                                                      10 Click to program the project binary on the L21 Xplained XSTK11 Open ldquoMicrochip SmartConnectrdquo Application on Android or iOS device12 Connect and pair to the peripheral (pass key 123456)13 Click NOTIFY to start the notification14 Temperature information in HEX values must be displayed in Microchip SmartConnect application

                                                                                      ATBTLC1000Setting up and Handling Custom Service

                                                                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 45

                                                                                      Figure 5-9 Notification Window

                                                                                      15 Serial terminal must display the following log outputFigure 5-10 Log Output Window

                                                                                      ATBTLC1000Setting up and Handling Custom Service

                                                                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 46

                                                                                      6 Appendix A Software Solution - Pre-Defined SvcThe following is the code implementation for handling of pre-defined service done in 4 SettingHandlingof Pre-Defined Service

                                                                                      - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehinclude device_infoh

                                                                                      volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false Services handlers dis_gatt_service_handler_t dis_service_handler

                                                                                      static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

                                                                                      void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                                                                                      Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                                                                                      Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                                                                                      static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                                                                                      Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void) Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks)

                                                                                      ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

                                                                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 47

                                                                                      ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                                                                      timer callback function static void timer_callback_fn(void) Add timer callback functionality here

                                                                                      void button_cb(void) Add button callback functionality here

                                                                                      int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                                                                                      Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                                                                                      DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks()

                                                                                      Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service) dis_init_service(ampdis_service_handler) Define the primary service in the GATT server database if((dis_primary_service_define(ampdis_service_handler)) = AT_BLE_SUCCESS) printf(Device Information Service definition failed)

                                                                                      Start Advertising process start_advertisement() while(true) ble_event_task()

                                                                                      ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

                                                                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 48

                                                                                      7 Appendix B Software Solution - Custom ServiceThe following is the code implementation for handling of pre-defined service done in 5 Setting up andHandling Custom Service

                                                                                      - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templateh

                                                                                      volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false

                                                                                      static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

                                                                                      define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0

                                                                                      define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

                                                                                      Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

                                                                                      void custom_environment_service_init(void) at_ble_uuid_t environment_service_uuid uint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUID uint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128 memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperature environment_service_characs[0]user_desc_len = 10 environment_service_characs[0]user_desc_max_len = 10 environment_service_characs[0]uuidtype = AT_BLE_UUID_128 memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16) environment_service_characs[0]properties = AT_BLE_CHAR_READ | AT_BLE_CHAR_NOTIFY environment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature value environment_service_characs[0]value_permissions = (AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuid ampenvironment_service_handlerNULL0 environment_service_characs1)=AT_BLE_SUCCESS) printf(n Assignment 41 Failed to Initialize custom environment service) else printf(n Assignment 41 Initialize custom environment service)

                                                                                      Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param) at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )param if (event_param-gtstatus == AT_BLE_SUCCESS) printf(n Assignment 41Notification Successfully sent over the air)

                                                                                      ATBTLC1000Appendix B Software Solution - Custom Service

                                                                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 49

                                                                                      else printf(n Assignment 41Sending Notification over the air failed) return AT_BLE_SUCCESS

                                                                                      static at_ble_status_t custom_char_changed_app_event(void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle -gt char_new_value[0])) timer_flag = false hw_timer_start(10) printf(n Assignment 41Characteristic changed event) return AT_BLE_SUCCESS

                                                                                      static const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handler characteristic_changed = custom_char_changed_app_event

                                                                                      Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                                                                      void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                                                                                      Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                                                                                      Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                                                                                      static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                                                                                      Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void)

                                                                                      ATBTLC1000Appendix B Software Solution - Custom Service

                                                                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 50

                                                                                      Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                                                                      timer callback function static void timer_callback_fn(void) Add timer callback functionality here timer_flag = true

                                                                                      void button_cb(void) Add button callback functionality here

                                                                                      static uint8_t Temperature_value = 25

                                                                                      Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++ if(Temperature_value gt 75) Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set( environment_service_characs[0]char_val_handle (uint8_t )ampTemperature_value sizeof(Temperature_value)) ble_status = at_ble_notification_send(0 environment_service_characs[0]char_val_handle) if(ble_status = AT_BLE_SUCCESS) printf(fail to send temperature update notification )

                                                                                      int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                                                                                      Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                                                                                      DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register Gap ATBTLC1000 Callbacks register_btlc1000_callbacks()

                                                                                      Custom service init custom_environment_service_init()

                                                                                      ATBTLC1000Appendix B Software Solution - Custom Service

                                                                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 51

                                                                                      Register Gatt server callback register_gatt_server_callbacks()

                                                                                      Start Advertising process start_advertisement() while(true) ble_event_task() if(connected_flag == true ampamp timer_flag == true) timer_flag = false send_temperature_notification()

                                                                                      ATBTLC1000Appendix B Software Solution - Custom Service

                                                                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 52

                                                                                      8 Document Revision HistoryRev B - 42018

                                                                                      Section Changes

                                                                                      Document Revised contents to match various Bluetooth Low Energy standard versions

                                                                                      Rev A - 122017

                                                                                      Section Changes

                                                                                      Document Initial release

                                                                                      ATBTLC1000Document Revision History

                                                                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 53

                                                                                      The Microchip Web Site

                                                                                      Microchip provides online support via our web site at httpwwwmicrochipcom This web site is used asa means to make files and information easily available to customers Accessible by using your favoriteInternet browser the web site contains the following information

                                                                                      bull Product Support ndash Data sheets and errata application notes and sample programs designresources userrsquos guides and hardware support documents latest software releases and archivedsoftware

                                                                                      bull General Technical Support ndash Frequently Asked Questions (FAQ) technical support requestsonline discussion groups Microchip consultant program member listing

                                                                                      bull Business of Microchip ndash Product selector and ordering guides latest Microchip press releaseslisting of seminars and events listings of Microchip sales offices distributors and factoryrepresentatives

                                                                                      Customer Change Notification Service

                                                                                      Microchiprsquos customer notification service helps keep customers current on Microchip productsSubscribers will receive e-mail notification whenever there are changes updates revisions or erratarelated to a specified product family or development tool of interest

                                                                                      To register access the Microchip web site at httpwwwmicrochipcom Under ldquoSupportrdquo click onldquoCustomer Change Notificationrdquo and follow the registration instructions

                                                                                      Customer Support

                                                                                      Users of Microchip products can receive assistance through several channels

                                                                                      bull Distributor or Representativebull Local Sales Officebull Field Application Engineer (FAE)bull Technical Support

                                                                                      Customers should contact their distributor representative or Field Application Engineer (FAE) for supportLocal sales offices are also available to help customers A listing of sales offices and locations is includedin the back of this document

                                                                                      Technical support is available through the web site at httpwwwmicrochipcomsupport

                                                                                      Microchip Devices Code Protection Feature

                                                                                      Note the following details of the code protection feature on Microchip devices

                                                                                      bull Microchip products meet the specification contained in their particular Microchip Data Sheetbull Microchip believes that its family of products is one of the most secure families of its kind on the

                                                                                      market today when used in the intended manner and under normal conditionsbull There are dishonest and possibly illegal methods used to breach the code protection feature All of

                                                                                      these methods to our knowledge require using the Microchip products in a manner outside theoperating specifications contained in Microchiprsquos Data Sheets Most likely the person doing so isengaged in theft of intellectual property

                                                                                      bull Microchip is willing to work with the customer who is concerned about the integrity of their code

                                                                                      ATBTLC1000

                                                                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 54

                                                                                      bull Neither Microchip nor any other semiconductor manufacturer can guarantee the security of theircode Code protection does not mean that we are guaranteeing the product as ldquounbreakablerdquo

                                                                                      Code protection is constantly evolving We at Microchip are committed to continuously improving thecode protection features of our products Attempts to break Microchiprsquos code protection feature may be aviolation of the Digital Millennium Copyright Act If such acts allow unauthorized access to your softwareor other copyrighted work you may have a right to sue for relief under that Act

                                                                                      Legal Notice

                                                                                      Information contained in this publication regarding device applications and the like is provided only foryour convenience and may be superseded by updates It is your responsibility to ensure that yourapplication meets with your specifications MICROCHIP MAKES NO REPRESENTATIONS ORWARRANTIES OF ANY KIND WHETHER EXPRESS OR IMPLIED WRITTEN OR ORAL STATUTORYOR OTHERWISE RELATED TO THE INFORMATION INCLUDING BUT NOT LIMITED TO ITSCONDITION QUALITY PERFORMANCE MERCHANTABILITY OR FITNESS FOR PURPOSEMicrochip disclaims all liability arising from this information and its use Use of Microchip devices in lifesupport andor safety applications is entirely at the buyerrsquos risk and the buyer agrees to defendindemnify and hold harmless Microchip from any and all damages claims suits or expenses resultingfrom such use No licenses are conveyed implicitly or otherwise under any Microchip intellectualproperty rights unless otherwise stated

                                                                                      Trademarks

                                                                                      The Microchip name and logo the Microchip logo AnyRate AVR AVR logo AVR Freaks BeaconThingsBitCloud CryptoMemory CryptoRF dsPIC FlashFlex flexPWR Heldo JukeBlox KeeLoq KeeLoq logoKleer LANCheck LINK MD maXStylus maXTouch MediaLB megaAVR MOST MOST logo MPLABOptoLyzer PIC picoPower PICSTART PIC32 logo Prochip Designer QTouch RightTouch SAM-BASpyNIC SST SST Logo SuperFlash tinyAVR UNIO and XMEGA are registered trademarks ofMicrochip Technology Incorporated in the USA and other countries

                                                                                      ClockWorks The Embedded Control Solutions Company EtherSynch Hyper Speed Control HyperLightLoad IntelliMOS mTouch Precision Edge and Quiet-Wire are registered trademarks of MicrochipTechnology Incorporated in the USA

                                                                                      Adjacent Key Suppression AKS Analog-for-the-Digital Age Any Capacitor AnyIn AnyOut BodyComchipKIT chipKIT logo CodeGuard CryptoAuthentication CryptoCompanion CryptoControllerdsPICDEM dsPICDEMnet Dynamic Average Matching DAM ECAN EtherGREEN In-Circuit SerialProgramming ICSP Inter-Chip Connectivity JitterBlocker KleerNet KleerNet logo Mindi MiWimotorBench MPASM MPF MPLAB Certified logo MPLIB MPLINK MultiTRAK NetDetach OmniscientCode Generation PICDEM PICDEMnet PICkit PICtail PureSilicon QMatrix RightTouch logo REALICE Ripple Blocker SAM-ICE Serial Quad IO SMART-IS SQI SuperSwitcher SuperSwitcher II TotalEndurance TSHARC USBCheck VariSense ViewSpan WiperLock Wireless DNA and ZENA aretrademarks of Microchip Technology Incorporated in the USA and other countries

                                                                                      SQTP is a service mark of Microchip Technology Incorporated in the USA

                                                                                      Silicon Storage Technology is a registered trademark of Microchip Technology Inc in other countries

                                                                                      GestIC is a registered trademark of Microchip Technology Germany II GmbH amp Co KG a subsidiary ofMicrochip Technology Inc in other countries

                                                                                      All other trademarks mentioned herein are property of their respective companies

                                                                                      ATBTLC1000

                                                                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 55

                                                                                      copy 2018 Microchip Technology Incorporated Printed in the USA All Rights Reserved

                                                                                      ISBN 978-1-5224-2921-0

                                                                                      Quality Management System Certified by DNV

                                                                                      ISOTS 16949Microchip received ISOTS-169492009 certification for its worldwide headquarters design and waferfabrication facilities in Chandler and Tempe Arizona Gresham Oregon and design centers in Californiaand India The Companyrsquos quality system processes and procedures are for its PICreg MCUs and dsPICreg

                                                                                      DSCs KEELOQreg code hopping devices Serial EEPROMs microperipherals nonvolatile memory andanalog products In addition Microchiprsquos quality system for the design and manufacture of developmentsystems is ISO 90012000 certified

                                                                                      ATBTLC1000

                                                                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 56

                                                                                      AMERICAS ASIAPACIFIC ASIAPACIFIC EUROPECorporate Office2355 West Chandler BlvdChandler AZ 85224-6199Tel 480-792-7200Fax 480-792-7277Technical SupporthttpwwwmicrochipcomsupportWeb AddresswwwmicrochipcomAtlantaDuluth GATel 678-957-9614Fax 678-957-1455Austin TXTel 512-257-3370BostonWestborough MATel 774-760-0087Fax 774-760-0088ChicagoItasca ILTel 630-285-0071Fax 630-285-0075DallasAddison TXTel 972-818-7423Fax 972-818-2924DetroitNovi MITel 248-848-4000Houston TXTel 281-894-5983IndianapolisNoblesville INTel 317-773-8323Fax 317-773-5453Tel 317-536-2380Los AngelesMission Viejo CATel 949-462-9523Fax 949-462-9608Tel 951-273-7800Raleigh NCTel 919-844-7510New York NYTel 631-435-6000San Jose CATel 408-735-9110Tel 408-436-4270Canada - TorontoTel 905-695-1980Fax 905-695-2078

                                                                                      Australia - SydneyTel 61-2-9868-6733China - BeijingTel 86-10-8569-7000China - ChengduTel 86-28-8665-5511China - ChongqingTel 86-23-8980-9588China - DongguanTel 86-769-8702-9880China - GuangzhouTel 86-20-8755-8029China - HangzhouTel 86-571-8792-8115China - Hong Kong SARTel 852-2943-5100China - NanjingTel 86-25-8473-2460China - QingdaoTel 86-532-8502-7355China - ShanghaiTel 86-21-3326-8000China - ShenyangTel 86-24-2334-2829China - ShenzhenTel 86-755-8864-2200China - SuzhouTel 86-186-6233-1526China - WuhanTel 86-27-5980-5300China - XianTel 86-29-8833-7252China - XiamenTel 86-592-2388138China - ZhuhaiTel 86-756-3210040

                                                                                      India - BangaloreTel 91-80-3090-4444India - New DelhiTel 91-11-4160-8631India - PuneTel 91-20-4121-0141Japan - OsakaTel 81-6-6152-7160Japan - TokyoTel 81-3-6880- 3770Korea - DaeguTel 82-53-744-4301Korea - SeoulTel 82-2-554-7200Malaysia - Kuala LumpurTel 60-3-7651-7906Malaysia - PenangTel 60-4-227-8870Philippines - ManilaTel 63-2-634-9065SingaporeTel 65-6334-8870Taiwan - Hsin ChuTel 886-3-577-8366Taiwan - KaohsiungTel 886-7-213-7830Taiwan - TaipeiTel 886-2-2508-8600Thailand - BangkokTel 66-2-694-1351Vietnam - Ho Chi MinhTel 84-28-5448-2100

                                                                                      Austria - WelsTel 43-7242-2244-39Fax 43-7242-2244-393Denmark - CopenhagenTel 45-4450-2828Fax 45-4485-2829Finland - EspooTel 358-9-4520-820France - ParisTel 33-1-69-53-63-20Fax 33-1-69-30-90-79Germany - GarchingTel 49-8931-9700Germany - HaanTel 49-2129-3766400Germany - HeilbronnTel 49-7131-67-3636Germany - KarlsruheTel 49-721-625370Germany - MunichTel 49-89-627-144-0Fax 49-89-627-144-44Germany - RosenheimTel 49-8031-354-560Israel - RarsquoananaTel 972-9-744-7705Italy - MilanTel 39-0331-742611Fax 39-0331-466781Italy - PadovaTel 39-049-7625286Netherlands - DrunenTel 31-416-690399Fax 31-416-690340Norway - TrondheimTel 47-7289-7561Poland - WarsawTel 48-22-3325737Romania - BucharestTel 40-21-407-87-50Spain - MadridTel 34-91-708-08-90Fax 34-91-708-08-91Sweden - GothenbergTel 46-31-704-60-40Sweden - StockholmTel 46-8-5090-4654UK - WokinghamTel 44-118-921-5800Fax 44-118-921-5820

                                                                                      Worldwide Sales and Service

                                                                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 57

                                                                                      • Introduction
                                                                                      • Table of Contents
                                                                                      • 1 Getting Started
                                                                                        • 11 Software Prerequisites
                                                                                          • 111 Installation Steps of Atmel Studio 7
                                                                                            • 12 Software Setup
                                                                                              • 121 Installation of Microchip SmartConnect application on a Mobile device
                                                                                                • 13 ATBTLC1000 Embedded Firmware
                                                                                                • 14 ATBTLC1000 Host Software API
                                                                                                • 15 Hardware Prerequisites
                                                                                                  • 151 SMARTtrade SAM L21 Xplained Pro
                                                                                                  • 152 ATBTLC1000ZR Xplained Pro Extension board
                                                                                                    • 16 Hardware Setup
                                                                                                      • 2 Creating the Project and Initializing
                                                                                                        • 21 Creating Project from ASF
                                                                                                        • 22 Configuring ASF for ATBTLC1000-ZR
                                                                                                        • 23 Compiling and Testing the Project
                                                                                                          • 3 Establishing Connection with Central Device
                                                                                                            • 31 Configuring and Starting the Advertisement Process
                                                                                                              • 311 Flags (AD Type 0x00)
                                                                                                              • 312 Available Service UUID (AD Types 0x02 to 0x07)
                                                                                                              • 313 Device Name (AD Types 0x08 to 0x09)
                                                                                                                • 3131 Setting the Advertisement Payload (ble_advertisement_data_set)
                                                                                                                • 3132 Starting the Advertisement Process (at_ble_adv_start)
                                                                                                                  • 314 Advertisement Process
                                                                                                                    • 3141 Starting the Advertisement Process
                                                                                                                        • 32 Managing GAP events
                                                                                                                          • 321 Handling of Connected and Disconnected GAP Events
                                                                                                                              • 4 SettingHandling of Pre-Defined Service
                                                                                                                                • 41 Adding Device Info Service Component from ASF Wizard to Project
                                                                                                                                • 42 Configuring and Loading Device Information Service
                                                                                                                                  • 421 Procedure to Configure and Load Device Info Service
                                                                                                                                      • 5 Setting up and Handling Custom Service
                                                                                                                                        • 51 Configuring and Loading the Custom Environment Service
                                                                                                                                          • 511 Procedure to Configure and Load Custom Environment Service
                                                                                                                                            • 52 Updating the Temperature Characteristic
                                                                                                                                              • 521 Setting a Characteristic Value ( at_ble_characteristic_value_set)
                                                                                                                                              • 522 Sending a Notification (at_ble_notification_send)
                                                                                                                                              • 523 Sending Temperature Information Once in Every 10 Seconds to Central
                                                                                                                                                  • 6 Appendix A Software Solution - Pre-Defined Svc
                                                                                                                                                  • 7 Appendix B Software Solution - Custom Service
                                                                                                                                                  • 8 Document Revision History
                                                                                                                                                  • The Microchip Web Site
                                                                                                                                                  • Customer Change Notification Service
                                                                                                                                                  • Customer Support
                                                                                                                                                  • Microchip Devices Code Protection Feature
                                                                                                                                                  • Legal Notice
                                                                                                                                                  • Trademarks
                                                                                                                                                  • Quality Management System Certified by DNV
                                                                                                                                                  • Worldwide Sales and Service

                                                                                        bull handle [inout] ndash Pointer to Characteristic handle to be changedbull value [in] ndash New valuebull len [in] ndash Value length in bytes

                                                                                        Return ndash Execution Status

                                                                                        522 Sending a Notification (at_ble_notification_send)Prototype ndashat_ble_status_t at_ble_notification_send(at_ble_handle_t conn_handleat_ble_handle_t attr_handle)

                                                                                        Description ndash Sends a Notification

                                                                                        Parameters ndash

                                                                                        bull conn_handle[in] ndash handle of the connection to be notifiedbull attr_handle [in] ndash handle of the attribute originating the notification

                                                                                        Return ndash Execution Status

                                                                                        523 Sending Temperature Information Once in Every 10 Seconds to Central1 Modify the following ldquotimer_callback_fnrdquo callback function from the startup_templatec

                                                                                        filestatic void timer_callback_fn(void)timer_flag = true

                                                                                        2 hw_timer_init()in main routine of startup_templatec initializes the hardware timer3 If a client (Central) enables the notifications for a server the server (Peripheral) receives an

                                                                                        AT_BLE_CHARACTERISTIC_CHANGED event callback then start the periodic 10 second timer forsending the notification Add the following code in previously definedcustom_char_changed_app_event function Callback registered for char changed eventstatic at_ble_status_t custom_char_changed_app_event (void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle-gtchar_new_value[0]))timer_flag = falsehw_timer_start(10)printf(n Assignment 41Characteristic changed event)return AT_BLE_SUCCESS

                                                                                        4 Declare the following Temperature_value global variable in startup_templatec staticuint8_t Temperature_value = 25 as static

                                                                                        5 Add the following send_temperature_notification function in startup_templatec tosend temperature every 10 seconds Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++

                                                                                        ATBTLC1000Setting up and Handling Custom Service

                                                                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 44

                                                                                        if(Temperature_value gt 75)Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set(environment_service_characs[0]char_val_handle(uint8_t )ampTemperature_valuesizeof(Temperature_value))ble_status = at_ble_notification_send(0environment_service_characs[0]char_val_handle)if(ble_status = AT_BLE_SUCCESS)printf(fail to send temperature update notification )

                                                                                        6 Add the following code in main routine to send temperature data every 10 secondswhile (1) ble_event_task()if(connected_flag == true ampamp timer_flag == truetimer_flag = falsesend_temperature_notification()

                                                                                        7 Click to save the project ltCtrl+Sgt

                                                                                        8 Compile the project by pressing the button ltF7gt9 Verify that no build error appears in Atmel Studio output window

                                                                                        Figure 5-8 Atmel Studio Output Window

                                                                                        10 Click to program the project binary on the L21 Xplained XSTK11 Open ldquoMicrochip SmartConnectrdquo Application on Android or iOS device12 Connect and pair to the peripheral (pass key 123456)13 Click NOTIFY to start the notification14 Temperature information in HEX values must be displayed in Microchip SmartConnect application

                                                                                        ATBTLC1000Setting up and Handling Custom Service

                                                                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 45

                                                                                        Figure 5-9 Notification Window

                                                                                        15 Serial terminal must display the following log outputFigure 5-10 Log Output Window

                                                                                        ATBTLC1000Setting up and Handling Custom Service

                                                                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 46

                                                                                        6 Appendix A Software Solution - Pre-Defined SvcThe following is the code implementation for handling of pre-defined service done in 4 SettingHandlingof Pre-Defined Service

                                                                                        - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehinclude device_infoh

                                                                                        volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false Services handlers dis_gatt_service_handler_t dis_service_handler

                                                                                        static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

                                                                                        void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                                                                                        Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                                                                                        Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                                                                                        static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                                                                                        Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void) Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks)

                                                                                        ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

                                                                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 47

                                                                                        ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                                                                        timer callback function static void timer_callback_fn(void) Add timer callback functionality here

                                                                                        void button_cb(void) Add button callback functionality here

                                                                                        int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                                                                                        Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                                                                                        DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks()

                                                                                        Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service) dis_init_service(ampdis_service_handler) Define the primary service in the GATT server database if((dis_primary_service_define(ampdis_service_handler)) = AT_BLE_SUCCESS) printf(Device Information Service definition failed)

                                                                                        Start Advertising process start_advertisement() while(true) ble_event_task()

                                                                                        ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

                                                                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 48

                                                                                        7 Appendix B Software Solution - Custom ServiceThe following is the code implementation for handling of pre-defined service done in 5 Setting up andHandling Custom Service

                                                                                        - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templateh

                                                                                        volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false

                                                                                        static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

                                                                                        define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0

                                                                                        define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

                                                                                        Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

                                                                                        void custom_environment_service_init(void) at_ble_uuid_t environment_service_uuid uint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUID uint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128 memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperature environment_service_characs[0]user_desc_len = 10 environment_service_characs[0]user_desc_max_len = 10 environment_service_characs[0]uuidtype = AT_BLE_UUID_128 memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16) environment_service_characs[0]properties = AT_BLE_CHAR_READ | AT_BLE_CHAR_NOTIFY environment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature value environment_service_characs[0]value_permissions = (AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuid ampenvironment_service_handlerNULL0 environment_service_characs1)=AT_BLE_SUCCESS) printf(n Assignment 41 Failed to Initialize custom environment service) else printf(n Assignment 41 Initialize custom environment service)

                                                                                        Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param) at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )param if (event_param-gtstatus == AT_BLE_SUCCESS) printf(n Assignment 41Notification Successfully sent over the air)

                                                                                        ATBTLC1000Appendix B Software Solution - Custom Service

                                                                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 49

                                                                                        else printf(n Assignment 41Sending Notification over the air failed) return AT_BLE_SUCCESS

                                                                                        static at_ble_status_t custom_char_changed_app_event(void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle -gt char_new_value[0])) timer_flag = false hw_timer_start(10) printf(n Assignment 41Characteristic changed event) return AT_BLE_SUCCESS

                                                                                        static const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handler characteristic_changed = custom_char_changed_app_event

                                                                                        Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                                                                        void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                                                                                        Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                                                                                        Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                                                                                        static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                                                                                        Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void)

                                                                                        ATBTLC1000Appendix B Software Solution - Custom Service

                                                                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 50

                                                                                        Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                                                                        timer callback function static void timer_callback_fn(void) Add timer callback functionality here timer_flag = true

                                                                                        void button_cb(void) Add button callback functionality here

                                                                                        static uint8_t Temperature_value = 25

                                                                                        Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++ if(Temperature_value gt 75) Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set( environment_service_characs[0]char_val_handle (uint8_t )ampTemperature_value sizeof(Temperature_value)) ble_status = at_ble_notification_send(0 environment_service_characs[0]char_val_handle) if(ble_status = AT_BLE_SUCCESS) printf(fail to send temperature update notification )

                                                                                        int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                                                                                        Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                                                                                        DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register Gap ATBTLC1000 Callbacks register_btlc1000_callbacks()

                                                                                        Custom service init custom_environment_service_init()

                                                                                        ATBTLC1000Appendix B Software Solution - Custom Service

                                                                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 51

                                                                                        Register Gatt server callback register_gatt_server_callbacks()

                                                                                        Start Advertising process start_advertisement() while(true) ble_event_task() if(connected_flag == true ampamp timer_flag == true) timer_flag = false send_temperature_notification()

                                                                                        ATBTLC1000Appendix B Software Solution - Custom Service

                                                                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 52

                                                                                        8 Document Revision HistoryRev B - 42018

                                                                                        Section Changes

                                                                                        Document Revised contents to match various Bluetooth Low Energy standard versions

                                                                                        Rev A - 122017

                                                                                        Section Changes

                                                                                        Document Initial release

                                                                                        ATBTLC1000Document Revision History

                                                                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 53

                                                                                        The Microchip Web Site

                                                                                        Microchip provides online support via our web site at httpwwwmicrochipcom This web site is used asa means to make files and information easily available to customers Accessible by using your favoriteInternet browser the web site contains the following information

                                                                                        bull Product Support ndash Data sheets and errata application notes and sample programs designresources userrsquos guides and hardware support documents latest software releases and archivedsoftware

                                                                                        bull General Technical Support ndash Frequently Asked Questions (FAQ) technical support requestsonline discussion groups Microchip consultant program member listing

                                                                                        bull Business of Microchip ndash Product selector and ordering guides latest Microchip press releaseslisting of seminars and events listings of Microchip sales offices distributors and factoryrepresentatives

                                                                                        Customer Change Notification Service

                                                                                        Microchiprsquos customer notification service helps keep customers current on Microchip productsSubscribers will receive e-mail notification whenever there are changes updates revisions or erratarelated to a specified product family or development tool of interest

                                                                                        To register access the Microchip web site at httpwwwmicrochipcom Under ldquoSupportrdquo click onldquoCustomer Change Notificationrdquo and follow the registration instructions

                                                                                        Customer Support

                                                                                        Users of Microchip products can receive assistance through several channels

                                                                                        bull Distributor or Representativebull Local Sales Officebull Field Application Engineer (FAE)bull Technical Support

                                                                                        Customers should contact their distributor representative or Field Application Engineer (FAE) for supportLocal sales offices are also available to help customers A listing of sales offices and locations is includedin the back of this document

                                                                                        Technical support is available through the web site at httpwwwmicrochipcomsupport

                                                                                        Microchip Devices Code Protection Feature

                                                                                        Note the following details of the code protection feature on Microchip devices

                                                                                        bull Microchip products meet the specification contained in their particular Microchip Data Sheetbull Microchip believes that its family of products is one of the most secure families of its kind on the

                                                                                        market today when used in the intended manner and under normal conditionsbull There are dishonest and possibly illegal methods used to breach the code protection feature All of

                                                                                        these methods to our knowledge require using the Microchip products in a manner outside theoperating specifications contained in Microchiprsquos Data Sheets Most likely the person doing so isengaged in theft of intellectual property

                                                                                        bull Microchip is willing to work with the customer who is concerned about the integrity of their code

                                                                                        ATBTLC1000

                                                                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 54

                                                                                        bull Neither Microchip nor any other semiconductor manufacturer can guarantee the security of theircode Code protection does not mean that we are guaranteeing the product as ldquounbreakablerdquo

                                                                                        Code protection is constantly evolving We at Microchip are committed to continuously improving thecode protection features of our products Attempts to break Microchiprsquos code protection feature may be aviolation of the Digital Millennium Copyright Act If such acts allow unauthorized access to your softwareor other copyrighted work you may have a right to sue for relief under that Act

                                                                                        Legal Notice

                                                                                        Information contained in this publication regarding device applications and the like is provided only foryour convenience and may be superseded by updates It is your responsibility to ensure that yourapplication meets with your specifications MICROCHIP MAKES NO REPRESENTATIONS ORWARRANTIES OF ANY KIND WHETHER EXPRESS OR IMPLIED WRITTEN OR ORAL STATUTORYOR OTHERWISE RELATED TO THE INFORMATION INCLUDING BUT NOT LIMITED TO ITSCONDITION QUALITY PERFORMANCE MERCHANTABILITY OR FITNESS FOR PURPOSEMicrochip disclaims all liability arising from this information and its use Use of Microchip devices in lifesupport andor safety applications is entirely at the buyerrsquos risk and the buyer agrees to defendindemnify and hold harmless Microchip from any and all damages claims suits or expenses resultingfrom such use No licenses are conveyed implicitly or otherwise under any Microchip intellectualproperty rights unless otherwise stated

                                                                                        Trademarks

                                                                                        The Microchip name and logo the Microchip logo AnyRate AVR AVR logo AVR Freaks BeaconThingsBitCloud CryptoMemory CryptoRF dsPIC FlashFlex flexPWR Heldo JukeBlox KeeLoq KeeLoq logoKleer LANCheck LINK MD maXStylus maXTouch MediaLB megaAVR MOST MOST logo MPLABOptoLyzer PIC picoPower PICSTART PIC32 logo Prochip Designer QTouch RightTouch SAM-BASpyNIC SST SST Logo SuperFlash tinyAVR UNIO and XMEGA are registered trademarks ofMicrochip Technology Incorporated in the USA and other countries

                                                                                        ClockWorks The Embedded Control Solutions Company EtherSynch Hyper Speed Control HyperLightLoad IntelliMOS mTouch Precision Edge and Quiet-Wire are registered trademarks of MicrochipTechnology Incorporated in the USA

                                                                                        Adjacent Key Suppression AKS Analog-for-the-Digital Age Any Capacitor AnyIn AnyOut BodyComchipKIT chipKIT logo CodeGuard CryptoAuthentication CryptoCompanion CryptoControllerdsPICDEM dsPICDEMnet Dynamic Average Matching DAM ECAN EtherGREEN In-Circuit SerialProgramming ICSP Inter-Chip Connectivity JitterBlocker KleerNet KleerNet logo Mindi MiWimotorBench MPASM MPF MPLAB Certified logo MPLIB MPLINK MultiTRAK NetDetach OmniscientCode Generation PICDEM PICDEMnet PICkit PICtail PureSilicon QMatrix RightTouch logo REALICE Ripple Blocker SAM-ICE Serial Quad IO SMART-IS SQI SuperSwitcher SuperSwitcher II TotalEndurance TSHARC USBCheck VariSense ViewSpan WiperLock Wireless DNA and ZENA aretrademarks of Microchip Technology Incorporated in the USA and other countries

                                                                                        SQTP is a service mark of Microchip Technology Incorporated in the USA

                                                                                        Silicon Storage Technology is a registered trademark of Microchip Technology Inc in other countries

                                                                                        GestIC is a registered trademark of Microchip Technology Germany II GmbH amp Co KG a subsidiary ofMicrochip Technology Inc in other countries

                                                                                        All other trademarks mentioned herein are property of their respective companies

                                                                                        ATBTLC1000

                                                                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 55

                                                                                        copy 2018 Microchip Technology Incorporated Printed in the USA All Rights Reserved

                                                                                        ISBN 978-1-5224-2921-0

                                                                                        Quality Management System Certified by DNV

                                                                                        ISOTS 16949Microchip received ISOTS-169492009 certification for its worldwide headquarters design and waferfabrication facilities in Chandler and Tempe Arizona Gresham Oregon and design centers in Californiaand India The Companyrsquos quality system processes and procedures are for its PICreg MCUs and dsPICreg

                                                                                        DSCs KEELOQreg code hopping devices Serial EEPROMs microperipherals nonvolatile memory andanalog products In addition Microchiprsquos quality system for the design and manufacture of developmentsystems is ISO 90012000 certified

                                                                                        ATBTLC1000

                                                                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 56

                                                                                        AMERICAS ASIAPACIFIC ASIAPACIFIC EUROPECorporate Office2355 West Chandler BlvdChandler AZ 85224-6199Tel 480-792-7200Fax 480-792-7277Technical SupporthttpwwwmicrochipcomsupportWeb AddresswwwmicrochipcomAtlantaDuluth GATel 678-957-9614Fax 678-957-1455Austin TXTel 512-257-3370BostonWestborough MATel 774-760-0087Fax 774-760-0088ChicagoItasca ILTel 630-285-0071Fax 630-285-0075DallasAddison TXTel 972-818-7423Fax 972-818-2924DetroitNovi MITel 248-848-4000Houston TXTel 281-894-5983IndianapolisNoblesville INTel 317-773-8323Fax 317-773-5453Tel 317-536-2380Los AngelesMission Viejo CATel 949-462-9523Fax 949-462-9608Tel 951-273-7800Raleigh NCTel 919-844-7510New York NYTel 631-435-6000San Jose CATel 408-735-9110Tel 408-436-4270Canada - TorontoTel 905-695-1980Fax 905-695-2078

                                                                                        Australia - SydneyTel 61-2-9868-6733China - BeijingTel 86-10-8569-7000China - ChengduTel 86-28-8665-5511China - ChongqingTel 86-23-8980-9588China - DongguanTel 86-769-8702-9880China - GuangzhouTel 86-20-8755-8029China - HangzhouTel 86-571-8792-8115China - Hong Kong SARTel 852-2943-5100China - NanjingTel 86-25-8473-2460China - QingdaoTel 86-532-8502-7355China - ShanghaiTel 86-21-3326-8000China - ShenyangTel 86-24-2334-2829China - ShenzhenTel 86-755-8864-2200China - SuzhouTel 86-186-6233-1526China - WuhanTel 86-27-5980-5300China - XianTel 86-29-8833-7252China - XiamenTel 86-592-2388138China - ZhuhaiTel 86-756-3210040

                                                                                        India - BangaloreTel 91-80-3090-4444India - New DelhiTel 91-11-4160-8631India - PuneTel 91-20-4121-0141Japan - OsakaTel 81-6-6152-7160Japan - TokyoTel 81-3-6880- 3770Korea - DaeguTel 82-53-744-4301Korea - SeoulTel 82-2-554-7200Malaysia - Kuala LumpurTel 60-3-7651-7906Malaysia - PenangTel 60-4-227-8870Philippines - ManilaTel 63-2-634-9065SingaporeTel 65-6334-8870Taiwan - Hsin ChuTel 886-3-577-8366Taiwan - KaohsiungTel 886-7-213-7830Taiwan - TaipeiTel 886-2-2508-8600Thailand - BangkokTel 66-2-694-1351Vietnam - Ho Chi MinhTel 84-28-5448-2100

                                                                                        Austria - WelsTel 43-7242-2244-39Fax 43-7242-2244-393Denmark - CopenhagenTel 45-4450-2828Fax 45-4485-2829Finland - EspooTel 358-9-4520-820France - ParisTel 33-1-69-53-63-20Fax 33-1-69-30-90-79Germany - GarchingTel 49-8931-9700Germany - HaanTel 49-2129-3766400Germany - HeilbronnTel 49-7131-67-3636Germany - KarlsruheTel 49-721-625370Germany - MunichTel 49-89-627-144-0Fax 49-89-627-144-44Germany - RosenheimTel 49-8031-354-560Israel - RarsquoananaTel 972-9-744-7705Italy - MilanTel 39-0331-742611Fax 39-0331-466781Italy - PadovaTel 39-049-7625286Netherlands - DrunenTel 31-416-690399Fax 31-416-690340Norway - TrondheimTel 47-7289-7561Poland - WarsawTel 48-22-3325737Romania - BucharestTel 40-21-407-87-50Spain - MadridTel 34-91-708-08-90Fax 34-91-708-08-91Sweden - GothenbergTel 46-31-704-60-40Sweden - StockholmTel 46-8-5090-4654UK - WokinghamTel 44-118-921-5800Fax 44-118-921-5820

                                                                                        Worldwide Sales and Service

                                                                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 57

                                                                                        • Introduction
                                                                                        • Table of Contents
                                                                                        • 1 Getting Started
                                                                                          • 11 Software Prerequisites
                                                                                            • 111 Installation Steps of Atmel Studio 7
                                                                                              • 12 Software Setup
                                                                                                • 121 Installation of Microchip SmartConnect application on a Mobile device
                                                                                                  • 13 ATBTLC1000 Embedded Firmware
                                                                                                  • 14 ATBTLC1000 Host Software API
                                                                                                  • 15 Hardware Prerequisites
                                                                                                    • 151 SMARTtrade SAM L21 Xplained Pro
                                                                                                    • 152 ATBTLC1000ZR Xplained Pro Extension board
                                                                                                      • 16 Hardware Setup
                                                                                                        • 2 Creating the Project and Initializing
                                                                                                          • 21 Creating Project from ASF
                                                                                                          • 22 Configuring ASF for ATBTLC1000-ZR
                                                                                                          • 23 Compiling and Testing the Project
                                                                                                            • 3 Establishing Connection with Central Device
                                                                                                              • 31 Configuring and Starting the Advertisement Process
                                                                                                                • 311 Flags (AD Type 0x00)
                                                                                                                • 312 Available Service UUID (AD Types 0x02 to 0x07)
                                                                                                                • 313 Device Name (AD Types 0x08 to 0x09)
                                                                                                                  • 3131 Setting the Advertisement Payload (ble_advertisement_data_set)
                                                                                                                  • 3132 Starting the Advertisement Process (at_ble_adv_start)
                                                                                                                    • 314 Advertisement Process
                                                                                                                      • 3141 Starting the Advertisement Process
                                                                                                                          • 32 Managing GAP events
                                                                                                                            • 321 Handling of Connected and Disconnected GAP Events
                                                                                                                                • 4 SettingHandling of Pre-Defined Service
                                                                                                                                  • 41 Adding Device Info Service Component from ASF Wizard to Project
                                                                                                                                  • 42 Configuring and Loading Device Information Service
                                                                                                                                    • 421 Procedure to Configure and Load Device Info Service
                                                                                                                                        • 5 Setting up and Handling Custom Service
                                                                                                                                          • 51 Configuring and Loading the Custom Environment Service
                                                                                                                                            • 511 Procedure to Configure and Load Custom Environment Service
                                                                                                                                              • 52 Updating the Temperature Characteristic
                                                                                                                                                • 521 Setting a Characteristic Value ( at_ble_characteristic_value_set)
                                                                                                                                                • 522 Sending a Notification (at_ble_notification_send)
                                                                                                                                                • 523 Sending Temperature Information Once in Every 10 Seconds to Central
                                                                                                                                                    • 6 Appendix A Software Solution - Pre-Defined Svc
                                                                                                                                                    • 7 Appendix B Software Solution - Custom Service
                                                                                                                                                    • 8 Document Revision History
                                                                                                                                                    • The Microchip Web Site
                                                                                                                                                    • Customer Change Notification Service
                                                                                                                                                    • Customer Support
                                                                                                                                                    • Microchip Devices Code Protection Feature
                                                                                                                                                    • Legal Notice
                                                                                                                                                    • Trademarks
                                                                                                                                                    • Quality Management System Certified by DNV
                                                                                                                                                    • Worldwide Sales and Service

                                                                                          if(Temperature_value gt 75)Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set(environment_service_characs[0]char_val_handle(uint8_t )ampTemperature_valuesizeof(Temperature_value))ble_status = at_ble_notification_send(0environment_service_characs[0]char_val_handle)if(ble_status = AT_BLE_SUCCESS)printf(fail to send temperature update notification )

                                                                                          6 Add the following code in main routine to send temperature data every 10 secondswhile (1) ble_event_task()if(connected_flag == true ampamp timer_flag == truetimer_flag = falsesend_temperature_notification()

                                                                                          7 Click to save the project ltCtrl+Sgt

                                                                                          8 Compile the project by pressing the button ltF7gt9 Verify that no build error appears in Atmel Studio output window

                                                                                          Figure 5-8 Atmel Studio Output Window

                                                                                          10 Click to program the project binary on the L21 Xplained XSTK11 Open ldquoMicrochip SmartConnectrdquo Application on Android or iOS device12 Connect and pair to the peripheral (pass key 123456)13 Click NOTIFY to start the notification14 Temperature information in HEX values must be displayed in Microchip SmartConnect application

                                                                                          ATBTLC1000Setting up and Handling Custom Service

                                                                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 45

                                                                                          Figure 5-9 Notification Window

                                                                                          15 Serial terminal must display the following log outputFigure 5-10 Log Output Window

                                                                                          ATBTLC1000Setting up and Handling Custom Service

                                                                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 46

                                                                                          6 Appendix A Software Solution - Pre-Defined SvcThe following is the code implementation for handling of pre-defined service done in 4 SettingHandlingof Pre-Defined Service

                                                                                          - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehinclude device_infoh

                                                                                          volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false Services handlers dis_gatt_service_handler_t dis_service_handler

                                                                                          static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

                                                                                          void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                                                                                          Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                                                                                          Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                                                                                          static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                                                                                          Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void) Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks)

                                                                                          ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

                                                                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 47

                                                                                          ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                                                                          timer callback function static void timer_callback_fn(void) Add timer callback functionality here

                                                                                          void button_cb(void) Add button callback functionality here

                                                                                          int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                                                                                          Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                                                                                          DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks()

                                                                                          Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service) dis_init_service(ampdis_service_handler) Define the primary service in the GATT server database if((dis_primary_service_define(ampdis_service_handler)) = AT_BLE_SUCCESS) printf(Device Information Service definition failed)

                                                                                          Start Advertising process start_advertisement() while(true) ble_event_task()

                                                                                          ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

                                                                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 48

                                                                                          7 Appendix B Software Solution - Custom ServiceThe following is the code implementation for handling of pre-defined service done in 5 Setting up andHandling Custom Service

                                                                                          - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templateh

                                                                                          volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false

                                                                                          static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

                                                                                          define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0

                                                                                          define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

                                                                                          Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

                                                                                          void custom_environment_service_init(void) at_ble_uuid_t environment_service_uuid uint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUID uint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128 memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperature environment_service_characs[0]user_desc_len = 10 environment_service_characs[0]user_desc_max_len = 10 environment_service_characs[0]uuidtype = AT_BLE_UUID_128 memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16) environment_service_characs[0]properties = AT_BLE_CHAR_READ | AT_BLE_CHAR_NOTIFY environment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature value environment_service_characs[0]value_permissions = (AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuid ampenvironment_service_handlerNULL0 environment_service_characs1)=AT_BLE_SUCCESS) printf(n Assignment 41 Failed to Initialize custom environment service) else printf(n Assignment 41 Initialize custom environment service)

                                                                                          Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param) at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )param if (event_param-gtstatus == AT_BLE_SUCCESS) printf(n Assignment 41Notification Successfully sent over the air)

                                                                                          ATBTLC1000Appendix B Software Solution - Custom Service

                                                                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 49

                                                                                          else printf(n Assignment 41Sending Notification over the air failed) return AT_BLE_SUCCESS

                                                                                          static at_ble_status_t custom_char_changed_app_event(void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle -gt char_new_value[0])) timer_flag = false hw_timer_start(10) printf(n Assignment 41Characteristic changed event) return AT_BLE_SUCCESS

                                                                                          static const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handler characteristic_changed = custom_char_changed_app_event

                                                                                          Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                                                                          void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                                                                                          Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                                                                                          Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                                                                                          static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                                                                                          Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void)

                                                                                          ATBTLC1000Appendix B Software Solution - Custom Service

                                                                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 50

                                                                                          Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                                                                          timer callback function static void timer_callback_fn(void) Add timer callback functionality here timer_flag = true

                                                                                          void button_cb(void) Add button callback functionality here

                                                                                          static uint8_t Temperature_value = 25

                                                                                          Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++ if(Temperature_value gt 75) Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set( environment_service_characs[0]char_val_handle (uint8_t )ampTemperature_value sizeof(Temperature_value)) ble_status = at_ble_notification_send(0 environment_service_characs[0]char_val_handle) if(ble_status = AT_BLE_SUCCESS) printf(fail to send temperature update notification )

                                                                                          int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                                                                                          Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                                                                                          DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register Gap ATBTLC1000 Callbacks register_btlc1000_callbacks()

                                                                                          Custom service init custom_environment_service_init()

                                                                                          ATBTLC1000Appendix B Software Solution - Custom Service

                                                                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 51

                                                                                          Register Gatt server callback register_gatt_server_callbacks()

                                                                                          Start Advertising process start_advertisement() while(true) ble_event_task() if(connected_flag == true ampamp timer_flag == true) timer_flag = false send_temperature_notification()

                                                                                          ATBTLC1000Appendix B Software Solution - Custom Service

                                                                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 52

                                                                                          8 Document Revision HistoryRev B - 42018

                                                                                          Section Changes

                                                                                          Document Revised contents to match various Bluetooth Low Energy standard versions

                                                                                          Rev A - 122017

                                                                                          Section Changes

                                                                                          Document Initial release

                                                                                          ATBTLC1000Document Revision History

                                                                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 53

                                                                                          The Microchip Web Site

                                                                                          Microchip provides online support via our web site at httpwwwmicrochipcom This web site is used asa means to make files and information easily available to customers Accessible by using your favoriteInternet browser the web site contains the following information

                                                                                          bull Product Support ndash Data sheets and errata application notes and sample programs designresources userrsquos guides and hardware support documents latest software releases and archivedsoftware

                                                                                          bull General Technical Support ndash Frequently Asked Questions (FAQ) technical support requestsonline discussion groups Microchip consultant program member listing

                                                                                          bull Business of Microchip ndash Product selector and ordering guides latest Microchip press releaseslisting of seminars and events listings of Microchip sales offices distributors and factoryrepresentatives

                                                                                          Customer Change Notification Service

                                                                                          Microchiprsquos customer notification service helps keep customers current on Microchip productsSubscribers will receive e-mail notification whenever there are changes updates revisions or erratarelated to a specified product family or development tool of interest

                                                                                          To register access the Microchip web site at httpwwwmicrochipcom Under ldquoSupportrdquo click onldquoCustomer Change Notificationrdquo and follow the registration instructions

                                                                                          Customer Support

                                                                                          Users of Microchip products can receive assistance through several channels

                                                                                          bull Distributor or Representativebull Local Sales Officebull Field Application Engineer (FAE)bull Technical Support

                                                                                          Customers should contact their distributor representative or Field Application Engineer (FAE) for supportLocal sales offices are also available to help customers A listing of sales offices and locations is includedin the back of this document

                                                                                          Technical support is available through the web site at httpwwwmicrochipcomsupport

                                                                                          Microchip Devices Code Protection Feature

                                                                                          Note the following details of the code protection feature on Microchip devices

                                                                                          bull Microchip products meet the specification contained in their particular Microchip Data Sheetbull Microchip believes that its family of products is one of the most secure families of its kind on the

                                                                                          market today when used in the intended manner and under normal conditionsbull There are dishonest and possibly illegal methods used to breach the code protection feature All of

                                                                                          these methods to our knowledge require using the Microchip products in a manner outside theoperating specifications contained in Microchiprsquos Data Sheets Most likely the person doing so isengaged in theft of intellectual property

                                                                                          bull Microchip is willing to work with the customer who is concerned about the integrity of their code

                                                                                          ATBTLC1000

                                                                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 54

                                                                                          bull Neither Microchip nor any other semiconductor manufacturer can guarantee the security of theircode Code protection does not mean that we are guaranteeing the product as ldquounbreakablerdquo

                                                                                          Code protection is constantly evolving We at Microchip are committed to continuously improving thecode protection features of our products Attempts to break Microchiprsquos code protection feature may be aviolation of the Digital Millennium Copyright Act If such acts allow unauthorized access to your softwareor other copyrighted work you may have a right to sue for relief under that Act

                                                                                          Legal Notice

                                                                                          Information contained in this publication regarding device applications and the like is provided only foryour convenience and may be superseded by updates It is your responsibility to ensure that yourapplication meets with your specifications MICROCHIP MAKES NO REPRESENTATIONS ORWARRANTIES OF ANY KIND WHETHER EXPRESS OR IMPLIED WRITTEN OR ORAL STATUTORYOR OTHERWISE RELATED TO THE INFORMATION INCLUDING BUT NOT LIMITED TO ITSCONDITION QUALITY PERFORMANCE MERCHANTABILITY OR FITNESS FOR PURPOSEMicrochip disclaims all liability arising from this information and its use Use of Microchip devices in lifesupport andor safety applications is entirely at the buyerrsquos risk and the buyer agrees to defendindemnify and hold harmless Microchip from any and all damages claims suits or expenses resultingfrom such use No licenses are conveyed implicitly or otherwise under any Microchip intellectualproperty rights unless otherwise stated

                                                                                          Trademarks

                                                                                          The Microchip name and logo the Microchip logo AnyRate AVR AVR logo AVR Freaks BeaconThingsBitCloud CryptoMemory CryptoRF dsPIC FlashFlex flexPWR Heldo JukeBlox KeeLoq KeeLoq logoKleer LANCheck LINK MD maXStylus maXTouch MediaLB megaAVR MOST MOST logo MPLABOptoLyzer PIC picoPower PICSTART PIC32 logo Prochip Designer QTouch RightTouch SAM-BASpyNIC SST SST Logo SuperFlash tinyAVR UNIO and XMEGA are registered trademarks ofMicrochip Technology Incorporated in the USA and other countries

                                                                                          ClockWorks The Embedded Control Solutions Company EtherSynch Hyper Speed Control HyperLightLoad IntelliMOS mTouch Precision Edge and Quiet-Wire are registered trademarks of MicrochipTechnology Incorporated in the USA

                                                                                          Adjacent Key Suppression AKS Analog-for-the-Digital Age Any Capacitor AnyIn AnyOut BodyComchipKIT chipKIT logo CodeGuard CryptoAuthentication CryptoCompanion CryptoControllerdsPICDEM dsPICDEMnet Dynamic Average Matching DAM ECAN EtherGREEN In-Circuit SerialProgramming ICSP Inter-Chip Connectivity JitterBlocker KleerNet KleerNet logo Mindi MiWimotorBench MPASM MPF MPLAB Certified logo MPLIB MPLINK MultiTRAK NetDetach OmniscientCode Generation PICDEM PICDEMnet PICkit PICtail PureSilicon QMatrix RightTouch logo REALICE Ripple Blocker SAM-ICE Serial Quad IO SMART-IS SQI SuperSwitcher SuperSwitcher II TotalEndurance TSHARC USBCheck VariSense ViewSpan WiperLock Wireless DNA and ZENA aretrademarks of Microchip Technology Incorporated in the USA and other countries

                                                                                          SQTP is a service mark of Microchip Technology Incorporated in the USA

                                                                                          Silicon Storage Technology is a registered trademark of Microchip Technology Inc in other countries

                                                                                          GestIC is a registered trademark of Microchip Technology Germany II GmbH amp Co KG a subsidiary ofMicrochip Technology Inc in other countries

                                                                                          All other trademarks mentioned herein are property of their respective companies

                                                                                          ATBTLC1000

                                                                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 55

                                                                                          copy 2018 Microchip Technology Incorporated Printed in the USA All Rights Reserved

                                                                                          ISBN 978-1-5224-2921-0

                                                                                          Quality Management System Certified by DNV

                                                                                          ISOTS 16949Microchip received ISOTS-169492009 certification for its worldwide headquarters design and waferfabrication facilities in Chandler and Tempe Arizona Gresham Oregon and design centers in Californiaand India The Companyrsquos quality system processes and procedures are for its PICreg MCUs and dsPICreg

                                                                                          DSCs KEELOQreg code hopping devices Serial EEPROMs microperipherals nonvolatile memory andanalog products In addition Microchiprsquos quality system for the design and manufacture of developmentsystems is ISO 90012000 certified

                                                                                          ATBTLC1000

                                                                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 56

                                                                                          AMERICAS ASIAPACIFIC ASIAPACIFIC EUROPECorporate Office2355 West Chandler BlvdChandler AZ 85224-6199Tel 480-792-7200Fax 480-792-7277Technical SupporthttpwwwmicrochipcomsupportWeb AddresswwwmicrochipcomAtlantaDuluth GATel 678-957-9614Fax 678-957-1455Austin TXTel 512-257-3370BostonWestborough MATel 774-760-0087Fax 774-760-0088ChicagoItasca ILTel 630-285-0071Fax 630-285-0075DallasAddison TXTel 972-818-7423Fax 972-818-2924DetroitNovi MITel 248-848-4000Houston TXTel 281-894-5983IndianapolisNoblesville INTel 317-773-8323Fax 317-773-5453Tel 317-536-2380Los AngelesMission Viejo CATel 949-462-9523Fax 949-462-9608Tel 951-273-7800Raleigh NCTel 919-844-7510New York NYTel 631-435-6000San Jose CATel 408-735-9110Tel 408-436-4270Canada - TorontoTel 905-695-1980Fax 905-695-2078

                                                                                          Australia - SydneyTel 61-2-9868-6733China - BeijingTel 86-10-8569-7000China - ChengduTel 86-28-8665-5511China - ChongqingTel 86-23-8980-9588China - DongguanTel 86-769-8702-9880China - GuangzhouTel 86-20-8755-8029China - HangzhouTel 86-571-8792-8115China - Hong Kong SARTel 852-2943-5100China - NanjingTel 86-25-8473-2460China - QingdaoTel 86-532-8502-7355China - ShanghaiTel 86-21-3326-8000China - ShenyangTel 86-24-2334-2829China - ShenzhenTel 86-755-8864-2200China - SuzhouTel 86-186-6233-1526China - WuhanTel 86-27-5980-5300China - XianTel 86-29-8833-7252China - XiamenTel 86-592-2388138China - ZhuhaiTel 86-756-3210040

                                                                                          India - BangaloreTel 91-80-3090-4444India - New DelhiTel 91-11-4160-8631India - PuneTel 91-20-4121-0141Japan - OsakaTel 81-6-6152-7160Japan - TokyoTel 81-3-6880- 3770Korea - DaeguTel 82-53-744-4301Korea - SeoulTel 82-2-554-7200Malaysia - Kuala LumpurTel 60-3-7651-7906Malaysia - PenangTel 60-4-227-8870Philippines - ManilaTel 63-2-634-9065SingaporeTel 65-6334-8870Taiwan - Hsin ChuTel 886-3-577-8366Taiwan - KaohsiungTel 886-7-213-7830Taiwan - TaipeiTel 886-2-2508-8600Thailand - BangkokTel 66-2-694-1351Vietnam - Ho Chi MinhTel 84-28-5448-2100

                                                                                          Austria - WelsTel 43-7242-2244-39Fax 43-7242-2244-393Denmark - CopenhagenTel 45-4450-2828Fax 45-4485-2829Finland - EspooTel 358-9-4520-820France - ParisTel 33-1-69-53-63-20Fax 33-1-69-30-90-79Germany - GarchingTel 49-8931-9700Germany - HaanTel 49-2129-3766400Germany - HeilbronnTel 49-7131-67-3636Germany - KarlsruheTel 49-721-625370Germany - MunichTel 49-89-627-144-0Fax 49-89-627-144-44Germany - RosenheimTel 49-8031-354-560Israel - RarsquoananaTel 972-9-744-7705Italy - MilanTel 39-0331-742611Fax 39-0331-466781Italy - PadovaTel 39-049-7625286Netherlands - DrunenTel 31-416-690399Fax 31-416-690340Norway - TrondheimTel 47-7289-7561Poland - WarsawTel 48-22-3325737Romania - BucharestTel 40-21-407-87-50Spain - MadridTel 34-91-708-08-90Fax 34-91-708-08-91Sweden - GothenbergTel 46-31-704-60-40Sweden - StockholmTel 46-8-5090-4654UK - WokinghamTel 44-118-921-5800Fax 44-118-921-5820

                                                                                          Worldwide Sales and Service

                                                                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 57

                                                                                          • Introduction
                                                                                          • Table of Contents
                                                                                          • 1 Getting Started
                                                                                            • 11 Software Prerequisites
                                                                                              • 111 Installation Steps of Atmel Studio 7
                                                                                                • 12 Software Setup
                                                                                                  • 121 Installation of Microchip SmartConnect application on a Mobile device
                                                                                                    • 13 ATBTLC1000 Embedded Firmware
                                                                                                    • 14 ATBTLC1000 Host Software API
                                                                                                    • 15 Hardware Prerequisites
                                                                                                      • 151 SMARTtrade SAM L21 Xplained Pro
                                                                                                      • 152 ATBTLC1000ZR Xplained Pro Extension board
                                                                                                        • 16 Hardware Setup
                                                                                                          • 2 Creating the Project and Initializing
                                                                                                            • 21 Creating Project from ASF
                                                                                                            • 22 Configuring ASF for ATBTLC1000-ZR
                                                                                                            • 23 Compiling and Testing the Project
                                                                                                              • 3 Establishing Connection with Central Device
                                                                                                                • 31 Configuring and Starting the Advertisement Process
                                                                                                                  • 311 Flags (AD Type 0x00)
                                                                                                                  • 312 Available Service UUID (AD Types 0x02 to 0x07)
                                                                                                                  • 313 Device Name (AD Types 0x08 to 0x09)
                                                                                                                    • 3131 Setting the Advertisement Payload (ble_advertisement_data_set)
                                                                                                                    • 3132 Starting the Advertisement Process (at_ble_adv_start)
                                                                                                                      • 314 Advertisement Process
                                                                                                                        • 3141 Starting the Advertisement Process
                                                                                                                            • 32 Managing GAP events
                                                                                                                              • 321 Handling of Connected and Disconnected GAP Events
                                                                                                                                  • 4 SettingHandling of Pre-Defined Service
                                                                                                                                    • 41 Adding Device Info Service Component from ASF Wizard to Project
                                                                                                                                    • 42 Configuring and Loading Device Information Service
                                                                                                                                      • 421 Procedure to Configure and Load Device Info Service
                                                                                                                                          • 5 Setting up and Handling Custom Service
                                                                                                                                            • 51 Configuring and Loading the Custom Environment Service
                                                                                                                                              • 511 Procedure to Configure and Load Custom Environment Service
                                                                                                                                                • 52 Updating the Temperature Characteristic
                                                                                                                                                  • 521 Setting a Characteristic Value ( at_ble_characteristic_value_set)
                                                                                                                                                  • 522 Sending a Notification (at_ble_notification_send)
                                                                                                                                                  • 523 Sending Temperature Information Once in Every 10 Seconds to Central
                                                                                                                                                      • 6 Appendix A Software Solution - Pre-Defined Svc
                                                                                                                                                      • 7 Appendix B Software Solution - Custom Service
                                                                                                                                                      • 8 Document Revision History
                                                                                                                                                      • The Microchip Web Site
                                                                                                                                                      • Customer Change Notification Service
                                                                                                                                                      • Customer Support
                                                                                                                                                      • Microchip Devices Code Protection Feature
                                                                                                                                                      • Legal Notice
                                                                                                                                                      • Trademarks
                                                                                                                                                      • Quality Management System Certified by DNV
                                                                                                                                                      • Worldwide Sales and Service

                                                                                            Figure 5-9 Notification Window

                                                                                            15 Serial terminal must display the following log outputFigure 5-10 Log Output Window

                                                                                            ATBTLC1000Setting up and Handling Custom Service

                                                                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 46

                                                                                            6 Appendix A Software Solution - Pre-Defined SvcThe following is the code implementation for handling of pre-defined service done in 4 SettingHandlingof Pre-Defined Service

                                                                                            - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehinclude device_infoh

                                                                                            volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false Services handlers dis_gatt_service_handler_t dis_service_handler

                                                                                            static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

                                                                                            void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                                                                                            Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                                                                                            Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                                                                                            static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                                                                                            Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void) Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks)

                                                                                            ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

                                                                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 47

                                                                                            ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                                                                            timer callback function static void timer_callback_fn(void) Add timer callback functionality here

                                                                                            void button_cb(void) Add button callback functionality here

                                                                                            int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                                                                                            Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                                                                                            DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks()

                                                                                            Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service) dis_init_service(ampdis_service_handler) Define the primary service in the GATT server database if((dis_primary_service_define(ampdis_service_handler)) = AT_BLE_SUCCESS) printf(Device Information Service definition failed)

                                                                                            Start Advertising process start_advertisement() while(true) ble_event_task()

                                                                                            ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

                                                                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 48

                                                                                            7 Appendix B Software Solution - Custom ServiceThe following is the code implementation for handling of pre-defined service done in 5 Setting up andHandling Custom Service

                                                                                            - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templateh

                                                                                            volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false

                                                                                            static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

                                                                                            define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0

                                                                                            define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

                                                                                            Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

                                                                                            void custom_environment_service_init(void) at_ble_uuid_t environment_service_uuid uint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUID uint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128 memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperature environment_service_characs[0]user_desc_len = 10 environment_service_characs[0]user_desc_max_len = 10 environment_service_characs[0]uuidtype = AT_BLE_UUID_128 memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16) environment_service_characs[0]properties = AT_BLE_CHAR_READ | AT_BLE_CHAR_NOTIFY environment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature value environment_service_characs[0]value_permissions = (AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuid ampenvironment_service_handlerNULL0 environment_service_characs1)=AT_BLE_SUCCESS) printf(n Assignment 41 Failed to Initialize custom environment service) else printf(n Assignment 41 Initialize custom environment service)

                                                                                            Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param) at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )param if (event_param-gtstatus == AT_BLE_SUCCESS) printf(n Assignment 41Notification Successfully sent over the air)

                                                                                            ATBTLC1000Appendix B Software Solution - Custom Service

                                                                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 49

                                                                                            else printf(n Assignment 41Sending Notification over the air failed) return AT_BLE_SUCCESS

                                                                                            static at_ble_status_t custom_char_changed_app_event(void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle -gt char_new_value[0])) timer_flag = false hw_timer_start(10) printf(n Assignment 41Characteristic changed event) return AT_BLE_SUCCESS

                                                                                            static const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handler characteristic_changed = custom_char_changed_app_event

                                                                                            Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                                                                            void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                                                                                            Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                                                                                            Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                                                                                            static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                                                                                            Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void)

                                                                                            ATBTLC1000Appendix B Software Solution - Custom Service

                                                                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 50

                                                                                            Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                                                                            timer callback function static void timer_callback_fn(void) Add timer callback functionality here timer_flag = true

                                                                                            void button_cb(void) Add button callback functionality here

                                                                                            static uint8_t Temperature_value = 25

                                                                                            Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++ if(Temperature_value gt 75) Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set( environment_service_characs[0]char_val_handle (uint8_t )ampTemperature_value sizeof(Temperature_value)) ble_status = at_ble_notification_send(0 environment_service_characs[0]char_val_handle) if(ble_status = AT_BLE_SUCCESS) printf(fail to send temperature update notification )

                                                                                            int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                                                                                            Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                                                                                            DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register Gap ATBTLC1000 Callbacks register_btlc1000_callbacks()

                                                                                            Custom service init custom_environment_service_init()

                                                                                            ATBTLC1000Appendix B Software Solution - Custom Service

                                                                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 51

                                                                                            Register Gatt server callback register_gatt_server_callbacks()

                                                                                            Start Advertising process start_advertisement() while(true) ble_event_task() if(connected_flag == true ampamp timer_flag == true) timer_flag = false send_temperature_notification()

                                                                                            ATBTLC1000Appendix B Software Solution - Custom Service

                                                                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 52

                                                                                            8 Document Revision HistoryRev B - 42018

                                                                                            Section Changes

                                                                                            Document Revised contents to match various Bluetooth Low Energy standard versions

                                                                                            Rev A - 122017

                                                                                            Section Changes

                                                                                            Document Initial release

                                                                                            ATBTLC1000Document Revision History

                                                                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 53

                                                                                            The Microchip Web Site

                                                                                            Microchip provides online support via our web site at httpwwwmicrochipcom This web site is used asa means to make files and information easily available to customers Accessible by using your favoriteInternet browser the web site contains the following information

                                                                                            bull Product Support ndash Data sheets and errata application notes and sample programs designresources userrsquos guides and hardware support documents latest software releases and archivedsoftware

                                                                                            bull General Technical Support ndash Frequently Asked Questions (FAQ) technical support requestsonline discussion groups Microchip consultant program member listing

                                                                                            bull Business of Microchip ndash Product selector and ordering guides latest Microchip press releaseslisting of seminars and events listings of Microchip sales offices distributors and factoryrepresentatives

                                                                                            Customer Change Notification Service

                                                                                            Microchiprsquos customer notification service helps keep customers current on Microchip productsSubscribers will receive e-mail notification whenever there are changes updates revisions or erratarelated to a specified product family or development tool of interest

                                                                                            To register access the Microchip web site at httpwwwmicrochipcom Under ldquoSupportrdquo click onldquoCustomer Change Notificationrdquo and follow the registration instructions

                                                                                            Customer Support

                                                                                            Users of Microchip products can receive assistance through several channels

                                                                                            bull Distributor or Representativebull Local Sales Officebull Field Application Engineer (FAE)bull Technical Support

                                                                                            Customers should contact their distributor representative or Field Application Engineer (FAE) for supportLocal sales offices are also available to help customers A listing of sales offices and locations is includedin the back of this document

                                                                                            Technical support is available through the web site at httpwwwmicrochipcomsupport

                                                                                            Microchip Devices Code Protection Feature

                                                                                            Note the following details of the code protection feature on Microchip devices

                                                                                            bull Microchip products meet the specification contained in their particular Microchip Data Sheetbull Microchip believes that its family of products is one of the most secure families of its kind on the

                                                                                            market today when used in the intended manner and under normal conditionsbull There are dishonest and possibly illegal methods used to breach the code protection feature All of

                                                                                            these methods to our knowledge require using the Microchip products in a manner outside theoperating specifications contained in Microchiprsquos Data Sheets Most likely the person doing so isengaged in theft of intellectual property

                                                                                            bull Microchip is willing to work with the customer who is concerned about the integrity of their code

                                                                                            ATBTLC1000

                                                                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 54

                                                                                            bull Neither Microchip nor any other semiconductor manufacturer can guarantee the security of theircode Code protection does not mean that we are guaranteeing the product as ldquounbreakablerdquo

                                                                                            Code protection is constantly evolving We at Microchip are committed to continuously improving thecode protection features of our products Attempts to break Microchiprsquos code protection feature may be aviolation of the Digital Millennium Copyright Act If such acts allow unauthorized access to your softwareor other copyrighted work you may have a right to sue for relief under that Act

                                                                                            Legal Notice

                                                                                            Information contained in this publication regarding device applications and the like is provided only foryour convenience and may be superseded by updates It is your responsibility to ensure that yourapplication meets with your specifications MICROCHIP MAKES NO REPRESENTATIONS ORWARRANTIES OF ANY KIND WHETHER EXPRESS OR IMPLIED WRITTEN OR ORAL STATUTORYOR OTHERWISE RELATED TO THE INFORMATION INCLUDING BUT NOT LIMITED TO ITSCONDITION QUALITY PERFORMANCE MERCHANTABILITY OR FITNESS FOR PURPOSEMicrochip disclaims all liability arising from this information and its use Use of Microchip devices in lifesupport andor safety applications is entirely at the buyerrsquos risk and the buyer agrees to defendindemnify and hold harmless Microchip from any and all damages claims suits or expenses resultingfrom such use No licenses are conveyed implicitly or otherwise under any Microchip intellectualproperty rights unless otherwise stated

                                                                                            Trademarks

                                                                                            The Microchip name and logo the Microchip logo AnyRate AVR AVR logo AVR Freaks BeaconThingsBitCloud CryptoMemory CryptoRF dsPIC FlashFlex flexPWR Heldo JukeBlox KeeLoq KeeLoq logoKleer LANCheck LINK MD maXStylus maXTouch MediaLB megaAVR MOST MOST logo MPLABOptoLyzer PIC picoPower PICSTART PIC32 logo Prochip Designer QTouch RightTouch SAM-BASpyNIC SST SST Logo SuperFlash tinyAVR UNIO and XMEGA are registered trademarks ofMicrochip Technology Incorporated in the USA and other countries

                                                                                            ClockWorks The Embedded Control Solutions Company EtherSynch Hyper Speed Control HyperLightLoad IntelliMOS mTouch Precision Edge and Quiet-Wire are registered trademarks of MicrochipTechnology Incorporated in the USA

                                                                                            Adjacent Key Suppression AKS Analog-for-the-Digital Age Any Capacitor AnyIn AnyOut BodyComchipKIT chipKIT logo CodeGuard CryptoAuthentication CryptoCompanion CryptoControllerdsPICDEM dsPICDEMnet Dynamic Average Matching DAM ECAN EtherGREEN In-Circuit SerialProgramming ICSP Inter-Chip Connectivity JitterBlocker KleerNet KleerNet logo Mindi MiWimotorBench MPASM MPF MPLAB Certified logo MPLIB MPLINK MultiTRAK NetDetach OmniscientCode Generation PICDEM PICDEMnet PICkit PICtail PureSilicon QMatrix RightTouch logo REALICE Ripple Blocker SAM-ICE Serial Quad IO SMART-IS SQI SuperSwitcher SuperSwitcher II TotalEndurance TSHARC USBCheck VariSense ViewSpan WiperLock Wireless DNA and ZENA aretrademarks of Microchip Technology Incorporated in the USA and other countries

                                                                                            SQTP is a service mark of Microchip Technology Incorporated in the USA

                                                                                            Silicon Storage Technology is a registered trademark of Microchip Technology Inc in other countries

                                                                                            GestIC is a registered trademark of Microchip Technology Germany II GmbH amp Co KG a subsidiary ofMicrochip Technology Inc in other countries

                                                                                            All other trademarks mentioned herein are property of their respective companies

                                                                                            ATBTLC1000

                                                                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 55

                                                                                            copy 2018 Microchip Technology Incorporated Printed in the USA All Rights Reserved

                                                                                            ISBN 978-1-5224-2921-0

                                                                                            Quality Management System Certified by DNV

                                                                                            ISOTS 16949Microchip received ISOTS-169492009 certification for its worldwide headquarters design and waferfabrication facilities in Chandler and Tempe Arizona Gresham Oregon and design centers in Californiaand India The Companyrsquos quality system processes and procedures are for its PICreg MCUs and dsPICreg

                                                                                            DSCs KEELOQreg code hopping devices Serial EEPROMs microperipherals nonvolatile memory andanalog products In addition Microchiprsquos quality system for the design and manufacture of developmentsystems is ISO 90012000 certified

                                                                                            ATBTLC1000

                                                                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 56

                                                                                            AMERICAS ASIAPACIFIC ASIAPACIFIC EUROPECorporate Office2355 West Chandler BlvdChandler AZ 85224-6199Tel 480-792-7200Fax 480-792-7277Technical SupporthttpwwwmicrochipcomsupportWeb AddresswwwmicrochipcomAtlantaDuluth GATel 678-957-9614Fax 678-957-1455Austin TXTel 512-257-3370BostonWestborough MATel 774-760-0087Fax 774-760-0088ChicagoItasca ILTel 630-285-0071Fax 630-285-0075DallasAddison TXTel 972-818-7423Fax 972-818-2924DetroitNovi MITel 248-848-4000Houston TXTel 281-894-5983IndianapolisNoblesville INTel 317-773-8323Fax 317-773-5453Tel 317-536-2380Los AngelesMission Viejo CATel 949-462-9523Fax 949-462-9608Tel 951-273-7800Raleigh NCTel 919-844-7510New York NYTel 631-435-6000San Jose CATel 408-735-9110Tel 408-436-4270Canada - TorontoTel 905-695-1980Fax 905-695-2078

                                                                                            Australia - SydneyTel 61-2-9868-6733China - BeijingTel 86-10-8569-7000China - ChengduTel 86-28-8665-5511China - ChongqingTel 86-23-8980-9588China - DongguanTel 86-769-8702-9880China - GuangzhouTel 86-20-8755-8029China - HangzhouTel 86-571-8792-8115China - Hong Kong SARTel 852-2943-5100China - NanjingTel 86-25-8473-2460China - QingdaoTel 86-532-8502-7355China - ShanghaiTel 86-21-3326-8000China - ShenyangTel 86-24-2334-2829China - ShenzhenTel 86-755-8864-2200China - SuzhouTel 86-186-6233-1526China - WuhanTel 86-27-5980-5300China - XianTel 86-29-8833-7252China - XiamenTel 86-592-2388138China - ZhuhaiTel 86-756-3210040

                                                                                            India - BangaloreTel 91-80-3090-4444India - New DelhiTel 91-11-4160-8631India - PuneTel 91-20-4121-0141Japan - OsakaTel 81-6-6152-7160Japan - TokyoTel 81-3-6880- 3770Korea - DaeguTel 82-53-744-4301Korea - SeoulTel 82-2-554-7200Malaysia - Kuala LumpurTel 60-3-7651-7906Malaysia - PenangTel 60-4-227-8870Philippines - ManilaTel 63-2-634-9065SingaporeTel 65-6334-8870Taiwan - Hsin ChuTel 886-3-577-8366Taiwan - KaohsiungTel 886-7-213-7830Taiwan - TaipeiTel 886-2-2508-8600Thailand - BangkokTel 66-2-694-1351Vietnam - Ho Chi MinhTel 84-28-5448-2100

                                                                                            Austria - WelsTel 43-7242-2244-39Fax 43-7242-2244-393Denmark - CopenhagenTel 45-4450-2828Fax 45-4485-2829Finland - EspooTel 358-9-4520-820France - ParisTel 33-1-69-53-63-20Fax 33-1-69-30-90-79Germany - GarchingTel 49-8931-9700Germany - HaanTel 49-2129-3766400Germany - HeilbronnTel 49-7131-67-3636Germany - KarlsruheTel 49-721-625370Germany - MunichTel 49-89-627-144-0Fax 49-89-627-144-44Germany - RosenheimTel 49-8031-354-560Israel - RarsquoananaTel 972-9-744-7705Italy - MilanTel 39-0331-742611Fax 39-0331-466781Italy - PadovaTel 39-049-7625286Netherlands - DrunenTel 31-416-690399Fax 31-416-690340Norway - TrondheimTel 47-7289-7561Poland - WarsawTel 48-22-3325737Romania - BucharestTel 40-21-407-87-50Spain - MadridTel 34-91-708-08-90Fax 34-91-708-08-91Sweden - GothenbergTel 46-31-704-60-40Sweden - StockholmTel 46-8-5090-4654UK - WokinghamTel 44-118-921-5800Fax 44-118-921-5820

                                                                                            Worldwide Sales and Service

                                                                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 57

                                                                                            • Introduction
                                                                                            • Table of Contents
                                                                                            • 1 Getting Started
                                                                                              • 11 Software Prerequisites
                                                                                                • 111 Installation Steps of Atmel Studio 7
                                                                                                  • 12 Software Setup
                                                                                                    • 121 Installation of Microchip SmartConnect application on a Mobile device
                                                                                                      • 13 ATBTLC1000 Embedded Firmware
                                                                                                      • 14 ATBTLC1000 Host Software API
                                                                                                      • 15 Hardware Prerequisites
                                                                                                        • 151 SMARTtrade SAM L21 Xplained Pro
                                                                                                        • 152 ATBTLC1000ZR Xplained Pro Extension board
                                                                                                          • 16 Hardware Setup
                                                                                                            • 2 Creating the Project and Initializing
                                                                                                              • 21 Creating Project from ASF
                                                                                                              • 22 Configuring ASF for ATBTLC1000-ZR
                                                                                                              • 23 Compiling and Testing the Project
                                                                                                                • 3 Establishing Connection with Central Device
                                                                                                                  • 31 Configuring and Starting the Advertisement Process
                                                                                                                    • 311 Flags (AD Type 0x00)
                                                                                                                    • 312 Available Service UUID (AD Types 0x02 to 0x07)
                                                                                                                    • 313 Device Name (AD Types 0x08 to 0x09)
                                                                                                                      • 3131 Setting the Advertisement Payload (ble_advertisement_data_set)
                                                                                                                      • 3132 Starting the Advertisement Process (at_ble_adv_start)
                                                                                                                        • 314 Advertisement Process
                                                                                                                          • 3141 Starting the Advertisement Process
                                                                                                                              • 32 Managing GAP events
                                                                                                                                • 321 Handling of Connected and Disconnected GAP Events
                                                                                                                                    • 4 SettingHandling of Pre-Defined Service
                                                                                                                                      • 41 Adding Device Info Service Component from ASF Wizard to Project
                                                                                                                                      • 42 Configuring and Loading Device Information Service
                                                                                                                                        • 421 Procedure to Configure and Load Device Info Service
                                                                                                                                            • 5 Setting up and Handling Custom Service
                                                                                                                                              • 51 Configuring and Loading the Custom Environment Service
                                                                                                                                                • 511 Procedure to Configure and Load Custom Environment Service
                                                                                                                                                  • 52 Updating the Temperature Characteristic
                                                                                                                                                    • 521 Setting a Characteristic Value ( at_ble_characteristic_value_set)
                                                                                                                                                    • 522 Sending a Notification (at_ble_notification_send)
                                                                                                                                                    • 523 Sending Temperature Information Once in Every 10 Seconds to Central
                                                                                                                                                        • 6 Appendix A Software Solution - Pre-Defined Svc
                                                                                                                                                        • 7 Appendix B Software Solution - Custom Service
                                                                                                                                                        • 8 Document Revision History
                                                                                                                                                        • The Microchip Web Site
                                                                                                                                                        • Customer Change Notification Service
                                                                                                                                                        • Customer Support
                                                                                                                                                        • Microchip Devices Code Protection Feature
                                                                                                                                                        • Legal Notice
                                                                                                                                                        • Trademarks
                                                                                                                                                        • Quality Management System Certified by DNV
                                                                                                                                                        • Worldwide Sales and Service

                                                                                              6 Appendix A Software Solution - Pre-Defined SvcThe following is the code implementation for handling of pre-defined service done in 4 SettingHandlingof Pre-Defined Service

                                                                                              - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templatehinclude device_infoh

                                                                                              volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false Services handlers dis_gatt_service_handler_t dis_service_handler

                                                                                              static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

                                                                                              void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                                                                                              Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                                                                                              Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                                                                                              static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                                                                                              Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void) Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks)

                                                                                              ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

                                                                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 47

                                                                                              ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                                                                              timer callback function static void timer_callback_fn(void) Add timer callback functionality here

                                                                                              void button_cb(void) Add button callback functionality here

                                                                                              int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                                                                                              Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                                                                                              DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks()

                                                                                              Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service) dis_init_service(ampdis_service_handler) Define the primary service in the GATT server database if((dis_primary_service_define(ampdis_service_handler)) = AT_BLE_SUCCESS) printf(Device Information Service definition failed)

                                                                                              Start Advertising process start_advertisement() while(true) ble_event_task()

                                                                                              ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

                                                                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 48

                                                                                              7 Appendix B Software Solution - Custom ServiceThe following is the code implementation for handling of pre-defined service done in 5 Setting up andHandling Custom Service

                                                                                              - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templateh

                                                                                              volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false

                                                                                              static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

                                                                                              define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0

                                                                                              define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

                                                                                              Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

                                                                                              void custom_environment_service_init(void) at_ble_uuid_t environment_service_uuid uint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUID uint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128 memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperature environment_service_characs[0]user_desc_len = 10 environment_service_characs[0]user_desc_max_len = 10 environment_service_characs[0]uuidtype = AT_BLE_UUID_128 memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16) environment_service_characs[0]properties = AT_BLE_CHAR_READ | AT_BLE_CHAR_NOTIFY environment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature value environment_service_characs[0]value_permissions = (AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuid ampenvironment_service_handlerNULL0 environment_service_characs1)=AT_BLE_SUCCESS) printf(n Assignment 41 Failed to Initialize custom environment service) else printf(n Assignment 41 Initialize custom environment service)

                                                                                              Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param) at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )param if (event_param-gtstatus == AT_BLE_SUCCESS) printf(n Assignment 41Notification Successfully sent over the air)

                                                                                              ATBTLC1000Appendix B Software Solution - Custom Service

                                                                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 49

                                                                                              else printf(n Assignment 41Sending Notification over the air failed) return AT_BLE_SUCCESS

                                                                                              static at_ble_status_t custom_char_changed_app_event(void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle -gt char_new_value[0])) timer_flag = false hw_timer_start(10) printf(n Assignment 41Characteristic changed event) return AT_BLE_SUCCESS

                                                                                              static const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handler characteristic_changed = custom_char_changed_app_event

                                                                                              Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                                                                              void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                                                                                              Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                                                                                              Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                                                                                              static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                                                                                              Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void)

                                                                                              ATBTLC1000Appendix B Software Solution - Custom Service

                                                                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 50

                                                                                              Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                                                                              timer callback function static void timer_callback_fn(void) Add timer callback functionality here timer_flag = true

                                                                                              void button_cb(void) Add button callback functionality here

                                                                                              static uint8_t Temperature_value = 25

                                                                                              Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++ if(Temperature_value gt 75) Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set( environment_service_characs[0]char_val_handle (uint8_t )ampTemperature_value sizeof(Temperature_value)) ble_status = at_ble_notification_send(0 environment_service_characs[0]char_val_handle) if(ble_status = AT_BLE_SUCCESS) printf(fail to send temperature update notification )

                                                                                              int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                                                                                              Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                                                                                              DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register Gap ATBTLC1000 Callbacks register_btlc1000_callbacks()

                                                                                              Custom service init custom_environment_service_init()

                                                                                              ATBTLC1000Appendix B Software Solution - Custom Service

                                                                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 51

                                                                                              Register Gatt server callback register_gatt_server_callbacks()

                                                                                              Start Advertising process start_advertisement() while(true) ble_event_task() if(connected_flag == true ampamp timer_flag == true) timer_flag = false send_temperature_notification()

                                                                                              ATBTLC1000Appendix B Software Solution - Custom Service

                                                                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 52

                                                                                              8 Document Revision HistoryRev B - 42018

                                                                                              Section Changes

                                                                                              Document Revised contents to match various Bluetooth Low Energy standard versions

                                                                                              Rev A - 122017

                                                                                              Section Changes

                                                                                              Document Initial release

                                                                                              ATBTLC1000Document Revision History

                                                                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 53

                                                                                              The Microchip Web Site

                                                                                              Microchip provides online support via our web site at httpwwwmicrochipcom This web site is used asa means to make files and information easily available to customers Accessible by using your favoriteInternet browser the web site contains the following information

                                                                                              bull Product Support ndash Data sheets and errata application notes and sample programs designresources userrsquos guides and hardware support documents latest software releases and archivedsoftware

                                                                                              bull General Technical Support ndash Frequently Asked Questions (FAQ) technical support requestsonline discussion groups Microchip consultant program member listing

                                                                                              bull Business of Microchip ndash Product selector and ordering guides latest Microchip press releaseslisting of seminars and events listings of Microchip sales offices distributors and factoryrepresentatives

                                                                                              Customer Change Notification Service

                                                                                              Microchiprsquos customer notification service helps keep customers current on Microchip productsSubscribers will receive e-mail notification whenever there are changes updates revisions or erratarelated to a specified product family or development tool of interest

                                                                                              To register access the Microchip web site at httpwwwmicrochipcom Under ldquoSupportrdquo click onldquoCustomer Change Notificationrdquo and follow the registration instructions

                                                                                              Customer Support

                                                                                              Users of Microchip products can receive assistance through several channels

                                                                                              bull Distributor or Representativebull Local Sales Officebull Field Application Engineer (FAE)bull Technical Support

                                                                                              Customers should contact their distributor representative or Field Application Engineer (FAE) for supportLocal sales offices are also available to help customers A listing of sales offices and locations is includedin the back of this document

                                                                                              Technical support is available through the web site at httpwwwmicrochipcomsupport

                                                                                              Microchip Devices Code Protection Feature

                                                                                              Note the following details of the code protection feature on Microchip devices

                                                                                              bull Microchip products meet the specification contained in their particular Microchip Data Sheetbull Microchip believes that its family of products is one of the most secure families of its kind on the

                                                                                              market today when used in the intended manner and under normal conditionsbull There are dishonest and possibly illegal methods used to breach the code protection feature All of

                                                                                              these methods to our knowledge require using the Microchip products in a manner outside theoperating specifications contained in Microchiprsquos Data Sheets Most likely the person doing so isengaged in theft of intellectual property

                                                                                              bull Microchip is willing to work with the customer who is concerned about the integrity of their code

                                                                                              ATBTLC1000

                                                                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 54

                                                                                              bull Neither Microchip nor any other semiconductor manufacturer can guarantee the security of theircode Code protection does not mean that we are guaranteeing the product as ldquounbreakablerdquo

                                                                                              Code protection is constantly evolving We at Microchip are committed to continuously improving thecode protection features of our products Attempts to break Microchiprsquos code protection feature may be aviolation of the Digital Millennium Copyright Act If such acts allow unauthorized access to your softwareor other copyrighted work you may have a right to sue for relief under that Act

                                                                                              Legal Notice

                                                                                              Information contained in this publication regarding device applications and the like is provided only foryour convenience and may be superseded by updates It is your responsibility to ensure that yourapplication meets with your specifications MICROCHIP MAKES NO REPRESENTATIONS ORWARRANTIES OF ANY KIND WHETHER EXPRESS OR IMPLIED WRITTEN OR ORAL STATUTORYOR OTHERWISE RELATED TO THE INFORMATION INCLUDING BUT NOT LIMITED TO ITSCONDITION QUALITY PERFORMANCE MERCHANTABILITY OR FITNESS FOR PURPOSEMicrochip disclaims all liability arising from this information and its use Use of Microchip devices in lifesupport andor safety applications is entirely at the buyerrsquos risk and the buyer agrees to defendindemnify and hold harmless Microchip from any and all damages claims suits or expenses resultingfrom such use No licenses are conveyed implicitly or otherwise under any Microchip intellectualproperty rights unless otherwise stated

                                                                                              Trademarks

                                                                                              The Microchip name and logo the Microchip logo AnyRate AVR AVR logo AVR Freaks BeaconThingsBitCloud CryptoMemory CryptoRF dsPIC FlashFlex flexPWR Heldo JukeBlox KeeLoq KeeLoq logoKleer LANCheck LINK MD maXStylus maXTouch MediaLB megaAVR MOST MOST logo MPLABOptoLyzer PIC picoPower PICSTART PIC32 logo Prochip Designer QTouch RightTouch SAM-BASpyNIC SST SST Logo SuperFlash tinyAVR UNIO and XMEGA are registered trademarks ofMicrochip Technology Incorporated in the USA and other countries

                                                                                              ClockWorks The Embedded Control Solutions Company EtherSynch Hyper Speed Control HyperLightLoad IntelliMOS mTouch Precision Edge and Quiet-Wire are registered trademarks of MicrochipTechnology Incorporated in the USA

                                                                                              Adjacent Key Suppression AKS Analog-for-the-Digital Age Any Capacitor AnyIn AnyOut BodyComchipKIT chipKIT logo CodeGuard CryptoAuthentication CryptoCompanion CryptoControllerdsPICDEM dsPICDEMnet Dynamic Average Matching DAM ECAN EtherGREEN In-Circuit SerialProgramming ICSP Inter-Chip Connectivity JitterBlocker KleerNet KleerNet logo Mindi MiWimotorBench MPASM MPF MPLAB Certified logo MPLIB MPLINK MultiTRAK NetDetach OmniscientCode Generation PICDEM PICDEMnet PICkit PICtail PureSilicon QMatrix RightTouch logo REALICE Ripple Blocker SAM-ICE Serial Quad IO SMART-IS SQI SuperSwitcher SuperSwitcher II TotalEndurance TSHARC USBCheck VariSense ViewSpan WiperLock Wireless DNA and ZENA aretrademarks of Microchip Technology Incorporated in the USA and other countries

                                                                                              SQTP is a service mark of Microchip Technology Incorporated in the USA

                                                                                              Silicon Storage Technology is a registered trademark of Microchip Technology Inc in other countries

                                                                                              GestIC is a registered trademark of Microchip Technology Germany II GmbH amp Co KG a subsidiary ofMicrochip Technology Inc in other countries

                                                                                              All other trademarks mentioned herein are property of their respective companies

                                                                                              ATBTLC1000

                                                                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 55

                                                                                              copy 2018 Microchip Technology Incorporated Printed in the USA All Rights Reserved

                                                                                              ISBN 978-1-5224-2921-0

                                                                                              Quality Management System Certified by DNV

                                                                                              ISOTS 16949Microchip received ISOTS-169492009 certification for its worldwide headquarters design and waferfabrication facilities in Chandler and Tempe Arizona Gresham Oregon and design centers in Californiaand India The Companyrsquos quality system processes and procedures are for its PICreg MCUs and dsPICreg

                                                                                              DSCs KEELOQreg code hopping devices Serial EEPROMs microperipherals nonvolatile memory andanalog products In addition Microchiprsquos quality system for the design and manufacture of developmentsystems is ISO 90012000 certified

                                                                                              ATBTLC1000

                                                                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 56

                                                                                              AMERICAS ASIAPACIFIC ASIAPACIFIC EUROPECorporate Office2355 West Chandler BlvdChandler AZ 85224-6199Tel 480-792-7200Fax 480-792-7277Technical SupporthttpwwwmicrochipcomsupportWeb AddresswwwmicrochipcomAtlantaDuluth GATel 678-957-9614Fax 678-957-1455Austin TXTel 512-257-3370BostonWestborough MATel 774-760-0087Fax 774-760-0088ChicagoItasca ILTel 630-285-0071Fax 630-285-0075DallasAddison TXTel 972-818-7423Fax 972-818-2924DetroitNovi MITel 248-848-4000Houston TXTel 281-894-5983IndianapolisNoblesville INTel 317-773-8323Fax 317-773-5453Tel 317-536-2380Los AngelesMission Viejo CATel 949-462-9523Fax 949-462-9608Tel 951-273-7800Raleigh NCTel 919-844-7510New York NYTel 631-435-6000San Jose CATel 408-735-9110Tel 408-436-4270Canada - TorontoTel 905-695-1980Fax 905-695-2078

                                                                                              Australia - SydneyTel 61-2-9868-6733China - BeijingTel 86-10-8569-7000China - ChengduTel 86-28-8665-5511China - ChongqingTel 86-23-8980-9588China - DongguanTel 86-769-8702-9880China - GuangzhouTel 86-20-8755-8029China - HangzhouTel 86-571-8792-8115China - Hong Kong SARTel 852-2943-5100China - NanjingTel 86-25-8473-2460China - QingdaoTel 86-532-8502-7355China - ShanghaiTel 86-21-3326-8000China - ShenyangTel 86-24-2334-2829China - ShenzhenTel 86-755-8864-2200China - SuzhouTel 86-186-6233-1526China - WuhanTel 86-27-5980-5300China - XianTel 86-29-8833-7252China - XiamenTel 86-592-2388138China - ZhuhaiTel 86-756-3210040

                                                                                              India - BangaloreTel 91-80-3090-4444India - New DelhiTel 91-11-4160-8631India - PuneTel 91-20-4121-0141Japan - OsakaTel 81-6-6152-7160Japan - TokyoTel 81-3-6880- 3770Korea - DaeguTel 82-53-744-4301Korea - SeoulTel 82-2-554-7200Malaysia - Kuala LumpurTel 60-3-7651-7906Malaysia - PenangTel 60-4-227-8870Philippines - ManilaTel 63-2-634-9065SingaporeTel 65-6334-8870Taiwan - Hsin ChuTel 886-3-577-8366Taiwan - KaohsiungTel 886-7-213-7830Taiwan - TaipeiTel 886-2-2508-8600Thailand - BangkokTel 66-2-694-1351Vietnam - Ho Chi MinhTel 84-28-5448-2100

                                                                                              Austria - WelsTel 43-7242-2244-39Fax 43-7242-2244-393Denmark - CopenhagenTel 45-4450-2828Fax 45-4485-2829Finland - EspooTel 358-9-4520-820France - ParisTel 33-1-69-53-63-20Fax 33-1-69-30-90-79Germany - GarchingTel 49-8931-9700Germany - HaanTel 49-2129-3766400Germany - HeilbronnTel 49-7131-67-3636Germany - KarlsruheTel 49-721-625370Germany - MunichTel 49-89-627-144-0Fax 49-89-627-144-44Germany - RosenheimTel 49-8031-354-560Israel - RarsquoananaTel 972-9-744-7705Italy - MilanTel 39-0331-742611Fax 39-0331-466781Italy - PadovaTel 39-049-7625286Netherlands - DrunenTel 31-416-690399Fax 31-416-690340Norway - TrondheimTel 47-7289-7561Poland - WarsawTel 48-22-3325737Romania - BucharestTel 40-21-407-87-50Spain - MadridTel 34-91-708-08-90Fax 34-91-708-08-91Sweden - GothenbergTel 46-31-704-60-40Sweden - StockholmTel 46-8-5090-4654UK - WokinghamTel 44-118-921-5800Fax 44-118-921-5820

                                                                                              Worldwide Sales and Service

                                                                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 57

                                                                                              • Introduction
                                                                                              • Table of Contents
                                                                                              • 1 Getting Started
                                                                                                • 11 Software Prerequisites
                                                                                                  • 111 Installation Steps of Atmel Studio 7
                                                                                                    • 12 Software Setup
                                                                                                      • 121 Installation of Microchip SmartConnect application on a Mobile device
                                                                                                        • 13 ATBTLC1000 Embedded Firmware
                                                                                                        • 14 ATBTLC1000 Host Software API
                                                                                                        • 15 Hardware Prerequisites
                                                                                                          • 151 SMARTtrade SAM L21 Xplained Pro
                                                                                                          • 152 ATBTLC1000ZR Xplained Pro Extension board
                                                                                                            • 16 Hardware Setup
                                                                                                              • 2 Creating the Project and Initializing
                                                                                                                • 21 Creating Project from ASF
                                                                                                                • 22 Configuring ASF for ATBTLC1000-ZR
                                                                                                                • 23 Compiling and Testing the Project
                                                                                                                  • 3 Establishing Connection with Central Device
                                                                                                                    • 31 Configuring and Starting the Advertisement Process
                                                                                                                      • 311 Flags (AD Type 0x00)
                                                                                                                      • 312 Available Service UUID (AD Types 0x02 to 0x07)
                                                                                                                      • 313 Device Name (AD Types 0x08 to 0x09)
                                                                                                                        • 3131 Setting the Advertisement Payload (ble_advertisement_data_set)
                                                                                                                        • 3132 Starting the Advertisement Process (at_ble_adv_start)
                                                                                                                          • 314 Advertisement Process
                                                                                                                            • 3141 Starting the Advertisement Process
                                                                                                                                • 32 Managing GAP events
                                                                                                                                  • 321 Handling of Connected and Disconnected GAP Events
                                                                                                                                      • 4 SettingHandling of Pre-Defined Service
                                                                                                                                        • 41 Adding Device Info Service Component from ASF Wizard to Project
                                                                                                                                        • 42 Configuring and Loading Device Information Service
                                                                                                                                          • 421 Procedure to Configure and Load Device Info Service
                                                                                                                                              • 5 Setting up and Handling Custom Service
                                                                                                                                                • 51 Configuring and Loading the Custom Environment Service
                                                                                                                                                  • 511 Procedure to Configure and Load Custom Environment Service
                                                                                                                                                    • 52 Updating the Temperature Characteristic
                                                                                                                                                      • 521 Setting a Characteristic Value ( at_ble_characteristic_value_set)
                                                                                                                                                      • 522 Sending a Notification (at_ble_notification_send)
                                                                                                                                                      • 523 Sending Temperature Information Once in Every 10 Seconds to Central
                                                                                                                                                          • 6 Appendix A Software Solution - Pre-Defined Svc
                                                                                                                                                          • 7 Appendix B Software Solution - Custom Service
                                                                                                                                                          • 8 Document Revision History
                                                                                                                                                          • The Microchip Web Site
                                                                                                                                                          • Customer Change Notification Service
                                                                                                                                                          • Customer Support
                                                                                                                                                          • Microchip Devices Code Protection Feature
                                                                                                                                                          • Legal Notice
                                                                                                                                                          • Trademarks
                                                                                                                                                          • Quality Management System Certified by DNV
                                                                                                                                                          • Worldwide Sales and Service

                                                                                                ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                                                                                timer callback function static void timer_callback_fn(void) Add timer callback functionality here

                                                                                                void button_cb(void) Add button callback functionality here

                                                                                                int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                                                                                                Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                                                                                                DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register ATBTLC1000 Callbacks register_btlc1000_callbacks()

                                                                                                Initialize Device Info service in GATT printf(n Assignment 32 Start Device Info Service) dis_init_service(ampdis_service_handler) Define the primary service in the GATT server database if((dis_primary_service_define(ampdis_service_handler)) = AT_BLE_SUCCESS) printf(Device Information Service definition failed)

                                                                                                Start Advertising process start_advertisement() while(true) ble_event_task()

                                                                                                ATBTLC1000Appendix A Software Solution - Pre-Defined Svc

                                                                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 48

                                                                                                7 Appendix B Software Solution - Custom ServiceThe following is the code implementation for handling of pre-defined service done in 5 Setting up andHandling Custom Service

                                                                                                - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templateh

                                                                                                volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false

                                                                                                static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

                                                                                                define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0

                                                                                                define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

                                                                                                Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

                                                                                                void custom_environment_service_init(void) at_ble_uuid_t environment_service_uuid uint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUID uint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128 memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperature environment_service_characs[0]user_desc_len = 10 environment_service_characs[0]user_desc_max_len = 10 environment_service_characs[0]uuidtype = AT_BLE_UUID_128 memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16) environment_service_characs[0]properties = AT_BLE_CHAR_READ | AT_BLE_CHAR_NOTIFY environment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature value environment_service_characs[0]value_permissions = (AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuid ampenvironment_service_handlerNULL0 environment_service_characs1)=AT_BLE_SUCCESS) printf(n Assignment 41 Failed to Initialize custom environment service) else printf(n Assignment 41 Initialize custom environment service)

                                                                                                Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param) at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )param if (event_param-gtstatus == AT_BLE_SUCCESS) printf(n Assignment 41Notification Successfully sent over the air)

                                                                                                ATBTLC1000Appendix B Software Solution - Custom Service

                                                                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 49

                                                                                                else printf(n Assignment 41Sending Notification over the air failed) return AT_BLE_SUCCESS

                                                                                                static at_ble_status_t custom_char_changed_app_event(void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle -gt char_new_value[0])) timer_flag = false hw_timer_start(10) printf(n Assignment 41Characteristic changed event) return AT_BLE_SUCCESS

                                                                                                static const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handler characteristic_changed = custom_char_changed_app_event

                                                                                                Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                                                                                void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                                                                                                Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                                                                                                Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                                                                                                static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                                                                                                Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void)

                                                                                                ATBTLC1000Appendix B Software Solution - Custom Service

                                                                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 50

                                                                                                Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                                                                                timer callback function static void timer_callback_fn(void) Add timer callback functionality here timer_flag = true

                                                                                                void button_cb(void) Add button callback functionality here

                                                                                                static uint8_t Temperature_value = 25

                                                                                                Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++ if(Temperature_value gt 75) Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set( environment_service_characs[0]char_val_handle (uint8_t )ampTemperature_value sizeof(Temperature_value)) ble_status = at_ble_notification_send(0 environment_service_characs[0]char_val_handle) if(ble_status = AT_BLE_SUCCESS) printf(fail to send temperature update notification )

                                                                                                int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                                                                                                Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                                                                                                DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register Gap ATBTLC1000 Callbacks register_btlc1000_callbacks()

                                                                                                Custom service init custom_environment_service_init()

                                                                                                ATBTLC1000Appendix B Software Solution - Custom Service

                                                                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 51

                                                                                                Register Gatt server callback register_gatt_server_callbacks()

                                                                                                Start Advertising process start_advertisement() while(true) ble_event_task() if(connected_flag == true ampamp timer_flag == true) timer_flag = false send_temperature_notification()

                                                                                                ATBTLC1000Appendix B Software Solution - Custom Service

                                                                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 52

                                                                                                8 Document Revision HistoryRev B - 42018

                                                                                                Section Changes

                                                                                                Document Revised contents to match various Bluetooth Low Energy standard versions

                                                                                                Rev A - 122017

                                                                                                Section Changes

                                                                                                Document Initial release

                                                                                                ATBTLC1000Document Revision History

                                                                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 53

                                                                                                The Microchip Web Site

                                                                                                Microchip provides online support via our web site at httpwwwmicrochipcom This web site is used asa means to make files and information easily available to customers Accessible by using your favoriteInternet browser the web site contains the following information

                                                                                                bull Product Support ndash Data sheets and errata application notes and sample programs designresources userrsquos guides and hardware support documents latest software releases and archivedsoftware

                                                                                                bull General Technical Support ndash Frequently Asked Questions (FAQ) technical support requestsonline discussion groups Microchip consultant program member listing

                                                                                                bull Business of Microchip ndash Product selector and ordering guides latest Microchip press releaseslisting of seminars and events listings of Microchip sales offices distributors and factoryrepresentatives

                                                                                                Customer Change Notification Service

                                                                                                Microchiprsquos customer notification service helps keep customers current on Microchip productsSubscribers will receive e-mail notification whenever there are changes updates revisions or erratarelated to a specified product family or development tool of interest

                                                                                                To register access the Microchip web site at httpwwwmicrochipcom Under ldquoSupportrdquo click onldquoCustomer Change Notificationrdquo and follow the registration instructions

                                                                                                Customer Support

                                                                                                Users of Microchip products can receive assistance through several channels

                                                                                                bull Distributor or Representativebull Local Sales Officebull Field Application Engineer (FAE)bull Technical Support

                                                                                                Customers should contact their distributor representative or Field Application Engineer (FAE) for supportLocal sales offices are also available to help customers A listing of sales offices and locations is includedin the back of this document

                                                                                                Technical support is available through the web site at httpwwwmicrochipcomsupport

                                                                                                Microchip Devices Code Protection Feature

                                                                                                Note the following details of the code protection feature on Microchip devices

                                                                                                bull Microchip products meet the specification contained in their particular Microchip Data Sheetbull Microchip believes that its family of products is one of the most secure families of its kind on the

                                                                                                market today when used in the intended manner and under normal conditionsbull There are dishonest and possibly illegal methods used to breach the code protection feature All of

                                                                                                these methods to our knowledge require using the Microchip products in a manner outside theoperating specifications contained in Microchiprsquos Data Sheets Most likely the person doing so isengaged in theft of intellectual property

                                                                                                bull Microchip is willing to work with the customer who is concerned about the integrity of their code

                                                                                                ATBTLC1000

                                                                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 54

                                                                                                bull Neither Microchip nor any other semiconductor manufacturer can guarantee the security of theircode Code protection does not mean that we are guaranteeing the product as ldquounbreakablerdquo

                                                                                                Code protection is constantly evolving We at Microchip are committed to continuously improving thecode protection features of our products Attempts to break Microchiprsquos code protection feature may be aviolation of the Digital Millennium Copyright Act If such acts allow unauthorized access to your softwareor other copyrighted work you may have a right to sue for relief under that Act

                                                                                                Legal Notice

                                                                                                Information contained in this publication regarding device applications and the like is provided only foryour convenience and may be superseded by updates It is your responsibility to ensure that yourapplication meets with your specifications MICROCHIP MAKES NO REPRESENTATIONS ORWARRANTIES OF ANY KIND WHETHER EXPRESS OR IMPLIED WRITTEN OR ORAL STATUTORYOR OTHERWISE RELATED TO THE INFORMATION INCLUDING BUT NOT LIMITED TO ITSCONDITION QUALITY PERFORMANCE MERCHANTABILITY OR FITNESS FOR PURPOSEMicrochip disclaims all liability arising from this information and its use Use of Microchip devices in lifesupport andor safety applications is entirely at the buyerrsquos risk and the buyer agrees to defendindemnify and hold harmless Microchip from any and all damages claims suits or expenses resultingfrom such use No licenses are conveyed implicitly or otherwise under any Microchip intellectualproperty rights unless otherwise stated

                                                                                                Trademarks

                                                                                                The Microchip name and logo the Microchip logo AnyRate AVR AVR logo AVR Freaks BeaconThingsBitCloud CryptoMemory CryptoRF dsPIC FlashFlex flexPWR Heldo JukeBlox KeeLoq KeeLoq logoKleer LANCheck LINK MD maXStylus maXTouch MediaLB megaAVR MOST MOST logo MPLABOptoLyzer PIC picoPower PICSTART PIC32 logo Prochip Designer QTouch RightTouch SAM-BASpyNIC SST SST Logo SuperFlash tinyAVR UNIO and XMEGA are registered trademarks ofMicrochip Technology Incorporated in the USA and other countries

                                                                                                ClockWorks The Embedded Control Solutions Company EtherSynch Hyper Speed Control HyperLightLoad IntelliMOS mTouch Precision Edge and Quiet-Wire are registered trademarks of MicrochipTechnology Incorporated in the USA

                                                                                                Adjacent Key Suppression AKS Analog-for-the-Digital Age Any Capacitor AnyIn AnyOut BodyComchipKIT chipKIT logo CodeGuard CryptoAuthentication CryptoCompanion CryptoControllerdsPICDEM dsPICDEMnet Dynamic Average Matching DAM ECAN EtherGREEN In-Circuit SerialProgramming ICSP Inter-Chip Connectivity JitterBlocker KleerNet KleerNet logo Mindi MiWimotorBench MPASM MPF MPLAB Certified logo MPLIB MPLINK MultiTRAK NetDetach OmniscientCode Generation PICDEM PICDEMnet PICkit PICtail PureSilicon QMatrix RightTouch logo REALICE Ripple Blocker SAM-ICE Serial Quad IO SMART-IS SQI SuperSwitcher SuperSwitcher II TotalEndurance TSHARC USBCheck VariSense ViewSpan WiperLock Wireless DNA and ZENA aretrademarks of Microchip Technology Incorporated in the USA and other countries

                                                                                                SQTP is a service mark of Microchip Technology Incorporated in the USA

                                                                                                Silicon Storage Technology is a registered trademark of Microchip Technology Inc in other countries

                                                                                                GestIC is a registered trademark of Microchip Technology Germany II GmbH amp Co KG a subsidiary ofMicrochip Technology Inc in other countries

                                                                                                All other trademarks mentioned herein are property of their respective companies

                                                                                                ATBTLC1000

                                                                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 55

                                                                                                copy 2018 Microchip Technology Incorporated Printed in the USA All Rights Reserved

                                                                                                ISBN 978-1-5224-2921-0

                                                                                                Quality Management System Certified by DNV

                                                                                                ISOTS 16949Microchip received ISOTS-169492009 certification for its worldwide headquarters design and waferfabrication facilities in Chandler and Tempe Arizona Gresham Oregon and design centers in Californiaand India The Companyrsquos quality system processes and procedures are for its PICreg MCUs and dsPICreg

                                                                                                DSCs KEELOQreg code hopping devices Serial EEPROMs microperipherals nonvolatile memory andanalog products In addition Microchiprsquos quality system for the design and manufacture of developmentsystems is ISO 90012000 certified

                                                                                                ATBTLC1000

                                                                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 56

                                                                                                AMERICAS ASIAPACIFIC ASIAPACIFIC EUROPECorporate Office2355 West Chandler BlvdChandler AZ 85224-6199Tel 480-792-7200Fax 480-792-7277Technical SupporthttpwwwmicrochipcomsupportWeb AddresswwwmicrochipcomAtlantaDuluth GATel 678-957-9614Fax 678-957-1455Austin TXTel 512-257-3370BostonWestborough MATel 774-760-0087Fax 774-760-0088ChicagoItasca ILTel 630-285-0071Fax 630-285-0075DallasAddison TXTel 972-818-7423Fax 972-818-2924DetroitNovi MITel 248-848-4000Houston TXTel 281-894-5983IndianapolisNoblesville INTel 317-773-8323Fax 317-773-5453Tel 317-536-2380Los AngelesMission Viejo CATel 949-462-9523Fax 949-462-9608Tel 951-273-7800Raleigh NCTel 919-844-7510New York NYTel 631-435-6000San Jose CATel 408-735-9110Tel 408-436-4270Canada - TorontoTel 905-695-1980Fax 905-695-2078

                                                                                                Australia - SydneyTel 61-2-9868-6733China - BeijingTel 86-10-8569-7000China - ChengduTel 86-28-8665-5511China - ChongqingTel 86-23-8980-9588China - DongguanTel 86-769-8702-9880China - GuangzhouTel 86-20-8755-8029China - HangzhouTel 86-571-8792-8115China - Hong Kong SARTel 852-2943-5100China - NanjingTel 86-25-8473-2460China - QingdaoTel 86-532-8502-7355China - ShanghaiTel 86-21-3326-8000China - ShenyangTel 86-24-2334-2829China - ShenzhenTel 86-755-8864-2200China - SuzhouTel 86-186-6233-1526China - WuhanTel 86-27-5980-5300China - XianTel 86-29-8833-7252China - XiamenTel 86-592-2388138China - ZhuhaiTel 86-756-3210040

                                                                                                India - BangaloreTel 91-80-3090-4444India - New DelhiTel 91-11-4160-8631India - PuneTel 91-20-4121-0141Japan - OsakaTel 81-6-6152-7160Japan - TokyoTel 81-3-6880- 3770Korea - DaeguTel 82-53-744-4301Korea - SeoulTel 82-2-554-7200Malaysia - Kuala LumpurTel 60-3-7651-7906Malaysia - PenangTel 60-4-227-8870Philippines - ManilaTel 63-2-634-9065SingaporeTel 65-6334-8870Taiwan - Hsin ChuTel 886-3-577-8366Taiwan - KaohsiungTel 886-7-213-7830Taiwan - TaipeiTel 886-2-2508-8600Thailand - BangkokTel 66-2-694-1351Vietnam - Ho Chi MinhTel 84-28-5448-2100

                                                                                                Austria - WelsTel 43-7242-2244-39Fax 43-7242-2244-393Denmark - CopenhagenTel 45-4450-2828Fax 45-4485-2829Finland - EspooTel 358-9-4520-820France - ParisTel 33-1-69-53-63-20Fax 33-1-69-30-90-79Germany - GarchingTel 49-8931-9700Germany - HaanTel 49-2129-3766400Germany - HeilbronnTel 49-7131-67-3636Germany - KarlsruheTel 49-721-625370Germany - MunichTel 49-89-627-144-0Fax 49-89-627-144-44Germany - RosenheimTel 49-8031-354-560Israel - RarsquoananaTel 972-9-744-7705Italy - MilanTel 39-0331-742611Fax 39-0331-466781Italy - PadovaTel 39-049-7625286Netherlands - DrunenTel 31-416-690399Fax 31-416-690340Norway - TrondheimTel 47-7289-7561Poland - WarsawTel 48-22-3325737Romania - BucharestTel 40-21-407-87-50Spain - MadridTel 34-91-708-08-90Fax 34-91-708-08-91Sweden - GothenbergTel 46-31-704-60-40Sweden - StockholmTel 46-8-5090-4654UK - WokinghamTel 44-118-921-5800Fax 44-118-921-5820

                                                                                                Worldwide Sales and Service

                                                                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 57

                                                                                                • Introduction
                                                                                                • Table of Contents
                                                                                                • 1 Getting Started
                                                                                                  • 11 Software Prerequisites
                                                                                                    • 111 Installation Steps of Atmel Studio 7
                                                                                                      • 12 Software Setup
                                                                                                        • 121 Installation of Microchip SmartConnect application on a Mobile device
                                                                                                          • 13 ATBTLC1000 Embedded Firmware
                                                                                                          • 14 ATBTLC1000 Host Software API
                                                                                                          • 15 Hardware Prerequisites
                                                                                                            • 151 SMARTtrade SAM L21 Xplained Pro
                                                                                                            • 152 ATBTLC1000ZR Xplained Pro Extension board
                                                                                                              • 16 Hardware Setup
                                                                                                                • 2 Creating the Project and Initializing
                                                                                                                  • 21 Creating Project from ASF
                                                                                                                  • 22 Configuring ASF for ATBTLC1000-ZR
                                                                                                                  • 23 Compiling and Testing the Project
                                                                                                                    • 3 Establishing Connection with Central Device
                                                                                                                      • 31 Configuring and Starting the Advertisement Process
                                                                                                                        • 311 Flags (AD Type 0x00)
                                                                                                                        • 312 Available Service UUID (AD Types 0x02 to 0x07)
                                                                                                                        • 313 Device Name (AD Types 0x08 to 0x09)
                                                                                                                          • 3131 Setting the Advertisement Payload (ble_advertisement_data_set)
                                                                                                                          • 3132 Starting the Advertisement Process (at_ble_adv_start)
                                                                                                                            • 314 Advertisement Process
                                                                                                                              • 3141 Starting the Advertisement Process
                                                                                                                                  • 32 Managing GAP events
                                                                                                                                    • 321 Handling of Connected and Disconnected GAP Events
                                                                                                                                        • 4 SettingHandling of Pre-Defined Service
                                                                                                                                          • 41 Adding Device Info Service Component from ASF Wizard to Project
                                                                                                                                          • 42 Configuring and Loading Device Information Service
                                                                                                                                            • 421 Procedure to Configure and Load Device Info Service
                                                                                                                                                • 5 Setting up and Handling Custom Service
                                                                                                                                                  • 51 Configuring and Loading the Custom Environment Service
                                                                                                                                                    • 511 Procedure to Configure and Load Custom Environment Service
                                                                                                                                                      • 52 Updating the Temperature Characteristic
                                                                                                                                                        • 521 Setting a Characteristic Value ( at_ble_characteristic_value_set)
                                                                                                                                                        • 522 Sending a Notification (at_ble_notification_send)
                                                                                                                                                        • 523 Sending Temperature Information Once in Every 10 Seconds to Central
                                                                                                                                                            • 6 Appendix A Software Solution - Pre-Defined Svc
                                                                                                                                                            • 7 Appendix B Software Solution - Custom Service
                                                                                                                                                            • 8 Document Revision History
                                                                                                                                                            • The Microchip Web Site
                                                                                                                                                            • Customer Change Notification Service
                                                                                                                                                            • Customer Support
                                                                                                                                                            • Microchip Devices Code Protection Feature
                                                                                                                                                            • Legal Notice
                                                                                                                                                            • Trademarks
                                                                                                                                                            • Quality Management System Certified by DNV
                                                                                                                                                            • Worldwide Sales and Service

                                                                                                  7 Appendix B Software Solution - Custom ServiceThe following is the code implementation for handling of pre-defined service done in 5 Setting up andHandling Custom Service

                                                                                                  - Includes ---------------------------------------------------------------include ltasfhgtinclude platformhinclude at_ble_apihinclude profileshinclude console_serialhinclude timer_hwhinclude conf_extinthinclude ble_managerhinclude ble_utilshinclude conf_serialdrvhinclude startup_templateh

                                                                                                  volatile at_ble_status_t ble_statusvolatile bool timer_flag = falsevolatile bool connected_flag = false

                                                                                                  static uint8_t adv_data[] = 0x08 AD2 Length = 8 (AD_TYPE + AD) 0x09 AD2 Type = Complete local Name My_SENS AD2 = ldquoMy_SENSrdquo

                                                                                                  define ENVIRONMENT_SERVICE_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xc00xba0x5a0xf0

                                                                                                  define TEMPERATURE_CHAR_UUID 0x1b0xc50xd50xa50x020x000xa60x870xe50x110x360x390xd80xba0x5a0xf0

                                                                                                  Services handlers at_ble_handle_t environment_service_handlerat_ble_characteristic_t environment_service_characs[1]

                                                                                                  void custom_environment_service_init(void) at_ble_uuid_t environment_service_uuid uint8_t serv_uuid[] = ENVIRONMENT_SERVICE_UUID uint8_t charac0_uuid[] = TEMPERATURE_CHAR_UUID Set service UUID environment_service_uuidtype = AT_BLE_UUID_128 memcpy(environment_service_uuiduuid serv_uuid16) Define temperature characteristic environment_service_characs[0]user_desc = (uint8_t )Temperature environment_service_characs[0]user_desc_len = 10 environment_service_characs[0]user_desc_max_len = 10 environment_service_characs[0]uuidtype = AT_BLE_UUID_128 memcpy(environment_service_characs[0]uuiduuidcharac0_uuid16) environment_service_characs[0]properties = AT_BLE_CHAR_READ | AT_BLE_CHAR_NOTIFY environment_service_characs[0]value_max_len = sizeof(uint8_t) length of temperature value environment_service_characs[0]value_permissions = (AT_BLE_ATTR_READABLE_NO_AUTHN_NO_AUTHR) Push service configuration in ATBTLC1000 if(at_ble_primary_service_define(ampenvironment_service_uuid ampenvironment_service_handlerNULL0 environment_service_characs1)=AT_BLE_SUCCESS) printf(n Assignment 41 Failed to Initialize custom environment service) else printf(n Assignment 41 Initialize custom environment service)

                                                                                                  Callback registered for notification confirmed eventstatic at_ble_status_t custom_notification_confirmation_handler (void param) at_ble_cmd_complete_event_t event_param = (at_ble_cmd_complete_event_t )param if (event_param-gtstatus == AT_BLE_SUCCESS) printf(n Assignment 41Notification Successfully sent over the air)

                                                                                                  ATBTLC1000Appendix B Software Solution - Custom Service

                                                                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 49

                                                                                                  else printf(n Assignment 41Sending Notification over the air failed) return AT_BLE_SUCCESS

                                                                                                  static at_ble_status_t custom_char_changed_app_event(void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle -gt char_new_value[0])) timer_flag = false hw_timer_start(10) printf(n Assignment 41Characteristic changed event) return AT_BLE_SUCCESS

                                                                                                  static const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handler characteristic_changed = custom_char_changed_app_event

                                                                                                  Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                                                                                  void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                                                                                                  Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                                                                                                  Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                                                                                                  static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                                                                                                  Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void)

                                                                                                  ATBTLC1000Appendix B Software Solution - Custom Service

                                                                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 50

                                                                                                  Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                                                                                  timer callback function static void timer_callback_fn(void) Add timer callback functionality here timer_flag = true

                                                                                                  void button_cb(void) Add button callback functionality here

                                                                                                  static uint8_t Temperature_value = 25

                                                                                                  Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++ if(Temperature_value gt 75) Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set( environment_service_characs[0]char_val_handle (uint8_t )ampTemperature_value sizeof(Temperature_value)) ble_status = at_ble_notification_send(0 environment_service_characs[0]char_val_handle) if(ble_status = AT_BLE_SUCCESS) printf(fail to send temperature update notification )

                                                                                                  int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                                                                                                  Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                                                                                                  DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register Gap ATBTLC1000 Callbacks register_btlc1000_callbacks()

                                                                                                  Custom service init custom_environment_service_init()

                                                                                                  ATBTLC1000Appendix B Software Solution - Custom Service

                                                                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 51

                                                                                                  Register Gatt server callback register_gatt_server_callbacks()

                                                                                                  Start Advertising process start_advertisement() while(true) ble_event_task() if(connected_flag == true ampamp timer_flag == true) timer_flag = false send_temperature_notification()

                                                                                                  ATBTLC1000Appendix B Software Solution - Custom Service

                                                                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 52

                                                                                                  8 Document Revision HistoryRev B - 42018

                                                                                                  Section Changes

                                                                                                  Document Revised contents to match various Bluetooth Low Energy standard versions

                                                                                                  Rev A - 122017

                                                                                                  Section Changes

                                                                                                  Document Initial release

                                                                                                  ATBTLC1000Document Revision History

                                                                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 53

                                                                                                  The Microchip Web Site

                                                                                                  Microchip provides online support via our web site at httpwwwmicrochipcom This web site is used asa means to make files and information easily available to customers Accessible by using your favoriteInternet browser the web site contains the following information

                                                                                                  bull Product Support ndash Data sheets and errata application notes and sample programs designresources userrsquos guides and hardware support documents latest software releases and archivedsoftware

                                                                                                  bull General Technical Support ndash Frequently Asked Questions (FAQ) technical support requestsonline discussion groups Microchip consultant program member listing

                                                                                                  bull Business of Microchip ndash Product selector and ordering guides latest Microchip press releaseslisting of seminars and events listings of Microchip sales offices distributors and factoryrepresentatives

                                                                                                  Customer Change Notification Service

                                                                                                  Microchiprsquos customer notification service helps keep customers current on Microchip productsSubscribers will receive e-mail notification whenever there are changes updates revisions or erratarelated to a specified product family or development tool of interest

                                                                                                  To register access the Microchip web site at httpwwwmicrochipcom Under ldquoSupportrdquo click onldquoCustomer Change Notificationrdquo and follow the registration instructions

                                                                                                  Customer Support

                                                                                                  Users of Microchip products can receive assistance through several channels

                                                                                                  bull Distributor or Representativebull Local Sales Officebull Field Application Engineer (FAE)bull Technical Support

                                                                                                  Customers should contact their distributor representative or Field Application Engineer (FAE) for supportLocal sales offices are also available to help customers A listing of sales offices and locations is includedin the back of this document

                                                                                                  Technical support is available through the web site at httpwwwmicrochipcomsupport

                                                                                                  Microchip Devices Code Protection Feature

                                                                                                  Note the following details of the code protection feature on Microchip devices

                                                                                                  bull Microchip products meet the specification contained in their particular Microchip Data Sheetbull Microchip believes that its family of products is one of the most secure families of its kind on the

                                                                                                  market today when used in the intended manner and under normal conditionsbull There are dishonest and possibly illegal methods used to breach the code protection feature All of

                                                                                                  these methods to our knowledge require using the Microchip products in a manner outside theoperating specifications contained in Microchiprsquos Data Sheets Most likely the person doing so isengaged in theft of intellectual property

                                                                                                  bull Microchip is willing to work with the customer who is concerned about the integrity of their code

                                                                                                  ATBTLC1000

                                                                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 54

                                                                                                  bull Neither Microchip nor any other semiconductor manufacturer can guarantee the security of theircode Code protection does not mean that we are guaranteeing the product as ldquounbreakablerdquo

                                                                                                  Code protection is constantly evolving We at Microchip are committed to continuously improving thecode protection features of our products Attempts to break Microchiprsquos code protection feature may be aviolation of the Digital Millennium Copyright Act If such acts allow unauthorized access to your softwareor other copyrighted work you may have a right to sue for relief under that Act

                                                                                                  Legal Notice

                                                                                                  Information contained in this publication regarding device applications and the like is provided only foryour convenience and may be superseded by updates It is your responsibility to ensure that yourapplication meets with your specifications MICROCHIP MAKES NO REPRESENTATIONS ORWARRANTIES OF ANY KIND WHETHER EXPRESS OR IMPLIED WRITTEN OR ORAL STATUTORYOR OTHERWISE RELATED TO THE INFORMATION INCLUDING BUT NOT LIMITED TO ITSCONDITION QUALITY PERFORMANCE MERCHANTABILITY OR FITNESS FOR PURPOSEMicrochip disclaims all liability arising from this information and its use Use of Microchip devices in lifesupport andor safety applications is entirely at the buyerrsquos risk and the buyer agrees to defendindemnify and hold harmless Microchip from any and all damages claims suits or expenses resultingfrom such use No licenses are conveyed implicitly or otherwise under any Microchip intellectualproperty rights unless otherwise stated

                                                                                                  Trademarks

                                                                                                  The Microchip name and logo the Microchip logo AnyRate AVR AVR logo AVR Freaks BeaconThingsBitCloud CryptoMemory CryptoRF dsPIC FlashFlex flexPWR Heldo JukeBlox KeeLoq KeeLoq logoKleer LANCheck LINK MD maXStylus maXTouch MediaLB megaAVR MOST MOST logo MPLABOptoLyzer PIC picoPower PICSTART PIC32 logo Prochip Designer QTouch RightTouch SAM-BASpyNIC SST SST Logo SuperFlash tinyAVR UNIO and XMEGA are registered trademarks ofMicrochip Technology Incorporated in the USA and other countries

                                                                                                  ClockWorks The Embedded Control Solutions Company EtherSynch Hyper Speed Control HyperLightLoad IntelliMOS mTouch Precision Edge and Quiet-Wire are registered trademarks of MicrochipTechnology Incorporated in the USA

                                                                                                  Adjacent Key Suppression AKS Analog-for-the-Digital Age Any Capacitor AnyIn AnyOut BodyComchipKIT chipKIT logo CodeGuard CryptoAuthentication CryptoCompanion CryptoControllerdsPICDEM dsPICDEMnet Dynamic Average Matching DAM ECAN EtherGREEN In-Circuit SerialProgramming ICSP Inter-Chip Connectivity JitterBlocker KleerNet KleerNet logo Mindi MiWimotorBench MPASM MPF MPLAB Certified logo MPLIB MPLINK MultiTRAK NetDetach OmniscientCode Generation PICDEM PICDEMnet PICkit PICtail PureSilicon QMatrix RightTouch logo REALICE Ripple Blocker SAM-ICE Serial Quad IO SMART-IS SQI SuperSwitcher SuperSwitcher II TotalEndurance TSHARC USBCheck VariSense ViewSpan WiperLock Wireless DNA and ZENA aretrademarks of Microchip Technology Incorporated in the USA and other countries

                                                                                                  SQTP is a service mark of Microchip Technology Incorporated in the USA

                                                                                                  Silicon Storage Technology is a registered trademark of Microchip Technology Inc in other countries

                                                                                                  GestIC is a registered trademark of Microchip Technology Germany II GmbH amp Co KG a subsidiary ofMicrochip Technology Inc in other countries

                                                                                                  All other trademarks mentioned herein are property of their respective companies

                                                                                                  ATBTLC1000

                                                                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 55

                                                                                                  copy 2018 Microchip Technology Incorporated Printed in the USA All Rights Reserved

                                                                                                  ISBN 978-1-5224-2921-0

                                                                                                  Quality Management System Certified by DNV

                                                                                                  ISOTS 16949Microchip received ISOTS-169492009 certification for its worldwide headquarters design and waferfabrication facilities in Chandler and Tempe Arizona Gresham Oregon and design centers in Californiaand India The Companyrsquos quality system processes and procedures are for its PICreg MCUs and dsPICreg

                                                                                                  DSCs KEELOQreg code hopping devices Serial EEPROMs microperipherals nonvolatile memory andanalog products In addition Microchiprsquos quality system for the design and manufacture of developmentsystems is ISO 90012000 certified

                                                                                                  ATBTLC1000

                                                                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 56

                                                                                                  AMERICAS ASIAPACIFIC ASIAPACIFIC EUROPECorporate Office2355 West Chandler BlvdChandler AZ 85224-6199Tel 480-792-7200Fax 480-792-7277Technical SupporthttpwwwmicrochipcomsupportWeb AddresswwwmicrochipcomAtlantaDuluth GATel 678-957-9614Fax 678-957-1455Austin TXTel 512-257-3370BostonWestborough MATel 774-760-0087Fax 774-760-0088ChicagoItasca ILTel 630-285-0071Fax 630-285-0075DallasAddison TXTel 972-818-7423Fax 972-818-2924DetroitNovi MITel 248-848-4000Houston TXTel 281-894-5983IndianapolisNoblesville INTel 317-773-8323Fax 317-773-5453Tel 317-536-2380Los AngelesMission Viejo CATel 949-462-9523Fax 949-462-9608Tel 951-273-7800Raleigh NCTel 919-844-7510New York NYTel 631-435-6000San Jose CATel 408-735-9110Tel 408-436-4270Canada - TorontoTel 905-695-1980Fax 905-695-2078

                                                                                                  Australia - SydneyTel 61-2-9868-6733China - BeijingTel 86-10-8569-7000China - ChengduTel 86-28-8665-5511China - ChongqingTel 86-23-8980-9588China - DongguanTel 86-769-8702-9880China - GuangzhouTel 86-20-8755-8029China - HangzhouTel 86-571-8792-8115China - Hong Kong SARTel 852-2943-5100China - NanjingTel 86-25-8473-2460China - QingdaoTel 86-532-8502-7355China - ShanghaiTel 86-21-3326-8000China - ShenyangTel 86-24-2334-2829China - ShenzhenTel 86-755-8864-2200China - SuzhouTel 86-186-6233-1526China - WuhanTel 86-27-5980-5300China - XianTel 86-29-8833-7252China - XiamenTel 86-592-2388138China - ZhuhaiTel 86-756-3210040

                                                                                                  India - BangaloreTel 91-80-3090-4444India - New DelhiTel 91-11-4160-8631India - PuneTel 91-20-4121-0141Japan - OsakaTel 81-6-6152-7160Japan - TokyoTel 81-3-6880- 3770Korea - DaeguTel 82-53-744-4301Korea - SeoulTel 82-2-554-7200Malaysia - Kuala LumpurTel 60-3-7651-7906Malaysia - PenangTel 60-4-227-8870Philippines - ManilaTel 63-2-634-9065SingaporeTel 65-6334-8870Taiwan - Hsin ChuTel 886-3-577-8366Taiwan - KaohsiungTel 886-7-213-7830Taiwan - TaipeiTel 886-2-2508-8600Thailand - BangkokTel 66-2-694-1351Vietnam - Ho Chi MinhTel 84-28-5448-2100

                                                                                                  Austria - WelsTel 43-7242-2244-39Fax 43-7242-2244-393Denmark - CopenhagenTel 45-4450-2828Fax 45-4485-2829Finland - EspooTel 358-9-4520-820France - ParisTel 33-1-69-53-63-20Fax 33-1-69-30-90-79Germany - GarchingTel 49-8931-9700Germany - HaanTel 49-2129-3766400Germany - HeilbronnTel 49-7131-67-3636Germany - KarlsruheTel 49-721-625370Germany - MunichTel 49-89-627-144-0Fax 49-89-627-144-44Germany - RosenheimTel 49-8031-354-560Israel - RarsquoananaTel 972-9-744-7705Italy - MilanTel 39-0331-742611Fax 39-0331-466781Italy - PadovaTel 39-049-7625286Netherlands - DrunenTel 31-416-690399Fax 31-416-690340Norway - TrondheimTel 47-7289-7561Poland - WarsawTel 48-22-3325737Romania - BucharestTel 40-21-407-87-50Spain - MadridTel 34-91-708-08-90Fax 34-91-708-08-91Sweden - GothenbergTel 46-31-704-60-40Sweden - StockholmTel 46-8-5090-4654UK - WokinghamTel 44-118-921-5800Fax 44-118-921-5820

                                                                                                  Worldwide Sales and Service

                                                                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 57

                                                                                                  • Introduction
                                                                                                  • Table of Contents
                                                                                                  • 1 Getting Started
                                                                                                    • 11 Software Prerequisites
                                                                                                      • 111 Installation Steps of Atmel Studio 7
                                                                                                        • 12 Software Setup
                                                                                                          • 121 Installation of Microchip SmartConnect application on a Mobile device
                                                                                                            • 13 ATBTLC1000 Embedded Firmware
                                                                                                            • 14 ATBTLC1000 Host Software API
                                                                                                            • 15 Hardware Prerequisites
                                                                                                              • 151 SMARTtrade SAM L21 Xplained Pro
                                                                                                              • 152 ATBTLC1000ZR Xplained Pro Extension board
                                                                                                                • 16 Hardware Setup
                                                                                                                  • 2 Creating the Project and Initializing
                                                                                                                    • 21 Creating Project from ASF
                                                                                                                    • 22 Configuring ASF for ATBTLC1000-ZR
                                                                                                                    • 23 Compiling and Testing the Project
                                                                                                                      • 3 Establishing Connection with Central Device
                                                                                                                        • 31 Configuring and Starting the Advertisement Process
                                                                                                                          • 311 Flags (AD Type 0x00)
                                                                                                                          • 312 Available Service UUID (AD Types 0x02 to 0x07)
                                                                                                                          • 313 Device Name (AD Types 0x08 to 0x09)
                                                                                                                            • 3131 Setting the Advertisement Payload (ble_advertisement_data_set)
                                                                                                                            • 3132 Starting the Advertisement Process (at_ble_adv_start)
                                                                                                                              • 314 Advertisement Process
                                                                                                                                • 3141 Starting the Advertisement Process
                                                                                                                                    • 32 Managing GAP events
                                                                                                                                      • 321 Handling of Connected and Disconnected GAP Events
                                                                                                                                          • 4 SettingHandling of Pre-Defined Service
                                                                                                                                            • 41 Adding Device Info Service Component from ASF Wizard to Project
                                                                                                                                            • 42 Configuring and Loading Device Information Service
                                                                                                                                              • 421 Procedure to Configure and Load Device Info Service
                                                                                                                                                  • 5 Setting up and Handling Custom Service
                                                                                                                                                    • 51 Configuring and Loading the Custom Environment Service
                                                                                                                                                      • 511 Procedure to Configure and Load Custom Environment Service
                                                                                                                                                        • 52 Updating the Temperature Characteristic
                                                                                                                                                          • 521 Setting a Characteristic Value ( at_ble_characteristic_value_set)
                                                                                                                                                          • 522 Sending a Notification (at_ble_notification_send)
                                                                                                                                                          • 523 Sending Temperature Information Once in Every 10 Seconds to Central
                                                                                                                                                              • 6 Appendix A Software Solution - Pre-Defined Svc
                                                                                                                                                              • 7 Appendix B Software Solution - Custom Service
                                                                                                                                                              • 8 Document Revision History
                                                                                                                                                              • The Microchip Web Site
                                                                                                                                                              • Customer Change Notification Service
                                                                                                                                                              • Customer Support
                                                                                                                                                              • Microchip Devices Code Protection Feature
                                                                                                                                                              • Legal Notice
                                                                                                                                                              • Trademarks
                                                                                                                                                              • Quality Management System Certified by DNV
                                                                                                                                                              • Worldwide Sales and Service

                                                                                                    else printf(n Assignment 41Sending Notification over the air failed) return AT_BLE_SUCCESS

                                                                                                    static at_ble_status_t custom_char_changed_app_event(void param)at_ble_characteristic_changed_t char_changed_param_handle = (at_ble_characteristic_changed_t )paramif((environment_service_characs[0]client_config_handle == char_changed_param_handle -gt char_handle) ampamp (char_changed_param_handle -gt char_new_value[0])) timer_flag = false hw_timer_start(10) printf(n Assignment 41Characteristic changed event) return AT_BLE_SUCCESS

                                                                                                    static const ble_gatt_server_event_cb_t app_gatt_server_handle = notification_confirmed= custom_notification_confirmation_handler characteristic_changed = custom_char_changed_app_event

                                                                                                    Register GATT callbacks at BLE manager levelvoid register_gatt_server_callbacks(void) Register GAP Callbacks printf(n Assignment 41 Register GATT Server callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GATT_SERVER_EVENT_TYPEampapp_gatt_server_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                                                                                    void start_advertisement (void) printf(n Assignment 21 Start Advertisement) Set advertisement data ble_status = at_ble_adv_data_set(adv_datasizeof(adv_data) NULL 0) Start Advertisement ble_status = at_ble_adv_start(AT_BLE_ADV_TYPE_UNDIRECTED AT_BLE_ADV_GEN_DISCOVERABLENULLAT_BLE_ADV_FP_ANY16006550) if(ble_status = AT_BLE_SUCCESS) printf(n Failed to start advertisement)

                                                                                                    Callback registered for AT_BLE_CONNECTED eventstatic at_ble_status_t ble_connected_cb (void param) printf(n Assignment 22 Application connected ) connected_flag = true ALL_UNUSED(param) return AT_BLE_SUCCESS

                                                                                                    Callback registered for AT_BLE_DISCONNECTED event static at_ble_status_t ble_disconnected_cb (void param) printf(n Assignment 22 Application disconnected ) connected_flag = false start_advertisement() ALL_UNUSED(param)return AT_BLE_SUCCESS

                                                                                                    static const ble_gap_event_cb_t app_gap_handle = connected = ble_connected_cb AT_BLE_CONNECTED disconnected = ble_disconnected_cb AT_BLE_DISCONNECTED

                                                                                                    Register GAP callbacks at BLE manager levelvoid register_btlc1000_callbacks(void)

                                                                                                    ATBTLC1000Appendix B Software Solution - Custom Service

                                                                                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 50

                                                                                                    Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                                                                                    timer callback function static void timer_callback_fn(void) Add timer callback functionality here timer_flag = true

                                                                                                    void button_cb(void) Add button callback functionality here

                                                                                                    static uint8_t Temperature_value = 25

                                                                                                    Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++ if(Temperature_value gt 75) Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set( environment_service_characs[0]char_val_handle (uint8_t )ampTemperature_value sizeof(Temperature_value)) ble_status = at_ble_notification_send(0 environment_service_characs[0]char_val_handle) if(ble_status = AT_BLE_SUCCESS) printf(fail to send temperature update notification )

                                                                                                    int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                                                                                                    Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                                                                                                    DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register Gap ATBTLC1000 Callbacks register_btlc1000_callbacks()

                                                                                                    Custom service init custom_environment_service_init()

                                                                                                    ATBTLC1000Appendix B Software Solution - Custom Service

                                                                                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 51

                                                                                                    Register Gatt server callback register_gatt_server_callbacks()

                                                                                                    Start Advertising process start_advertisement() while(true) ble_event_task() if(connected_flag == true ampamp timer_flag == true) timer_flag = false send_temperature_notification()

                                                                                                    ATBTLC1000Appendix B Software Solution - Custom Service

                                                                                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 52

                                                                                                    8 Document Revision HistoryRev B - 42018

                                                                                                    Section Changes

                                                                                                    Document Revised contents to match various Bluetooth Low Energy standard versions

                                                                                                    Rev A - 122017

                                                                                                    Section Changes

                                                                                                    Document Initial release

                                                                                                    ATBTLC1000Document Revision History

                                                                                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 53

                                                                                                    The Microchip Web Site

                                                                                                    Microchip provides online support via our web site at httpwwwmicrochipcom This web site is used asa means to make files and information easily available to customers Accessible by using your favoriteInternet browser the web site contains the following information

                                                                                                    bull Product Support ndash Data sheets and errata application notes and sample programs designresources userrsquos guides and hardware support documents latest software releases and archivedsoftware

                                                                                                    bull General Technical Support ndash Frequently Asked Questions (FAQ) technical support requestsonline discussion groups Microchip consultant program member listing

                                                                                                    bull Business of Microchip ndash Product selector and ordering guides latest Microchip press releaseslisting of seminars and events listings of Microchip sales offices distributors and factoryrepresentatives

                                                                                                    Customer Change Notification Service

                                                                                                    Microchiprsquos customer notification service helps keep customers current on Microchip productsSubscribers will receive e-mail notification whenever there are changes updates revisions or erratarelated to a specified product family or development tool of interest

                                                                                                    To register access the Microchip web site at httpwwwmicrochipcom Under ldquoSupportrdquo click onldquoCustomer Change Notificationrdquo and follow the registration instructions

                                                                                                    Customer Support

                                                                                                    Users of Microchip products can receive assistance through several channels

                                                                                                    bull Distributor or Representativebull Local Sales Officebull Field Application Engineer (FAE)bull Technical Support

                                                                                                    Customers should contact their distributor representative or Field Application Engineer (FAE) for supportLocal sales offices are also available to help customers A listing of sales offices and locations is includedin the back of this document

                                                                                                    Technical support is available through the web site at httpwwwmicrochipcomsupport

                                                                                                    Microchip Devices Code Protection Feature

                                                                                                    Note the following details of the code protection feature on Microchip devices

                                                                                                    bull Microchip products meet the specification contained in their particular Microchip Data Sheetbull Microchip believes that its family of products is one of the most secure families of its kind on the

                                                                                                    market today when used in the intended manner and under normal conditionsbull There are dishonest and possibly illegal methods used to breach the code protection feature All of

                                                                                                    these methods to our knowledge require using the Microchip products in a manner outside theoperating specifications contained in Microchiprsquos Data Sheets Most likely the person doing so isengaged in theft of intellectual property

                                                                                                    bull Microchip is willing to work with the customer who is concerned about the integrity of their code

                                                                                                    ATBTLC1000

                                                                                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 54

                                                                                                    bull Neither Microchip nor any other semiconductor manufacturer can guarantee the security of theircode Code protection does not mean that we are guaranteeing the product as ldquounbreakablerdquo

                                                                                                    Code protection is constantly evolving We at Microchip are committed to continuously improving thecode protection features of our products Attempts to break Microchiprsquos code protection feature may be aviolation of the Digital Millennium Copyright Act If such acts allow unauthorized access to your softwareor other copyrighted work you may have a right to sue for relief under that Act

                                                                                                    Legal Notice

                                                                                                    Information contained in this publication regarding device applications and the like is provided only foryour convenience and may be superseded by updates It is your responsibility to ensure that yourapplication meets with your specifications MICROCHIP MAKES NO REPRESENTATIONS ORWARRANTIES OF ANY KIND WHETHER EXPRESS OR IMPLIED WRITTEN OR ORAL STATUTORYOR OTHERWISE RELATED TO THE INFORMATION INCLUDING BUT NOT LIMITED TO ITSCONDITION QUALITY PERFORMANCE MERCHANTABILITY OR FITNESS FOR PURPOSEMicrochip disclaims all liability arising from this information and its use Use of Microchip devices in lifesupport andor safety applications is entirely at the buyerrsquos risk and the buyer agrees to defendindemnify and hold harmless Microchip from any and all damages claims suits or expenses resultingfrom such use No licenses are conveyed implicitly or otherwise under any Microchip intellectualproperty rights unless otherwise stated

                                                                                                    Trademarks

                                                                                                    The Microchip name and logo the Microchip logo AnyRate AVR AVR logo AVR Freaks BeaconThingsBitCloud CryptoMemory CryptoRF dsPIC FlashFlex flexPWR Heldo JukeBlox KeeLoq KeeLoq logoKleer LANCheck LINK MD maXStylus maXTouch MediaLB megaAVR MOST MOST logo MPLABOptoLyzer PIC picoPower PICSTART PIC32 logo Prochip Designer QTouch RightTouch SAM-BASpyNIC SST SST Logo SuperFlash tinyAVR UNIO and XMEGA are registered trademarks ofMicrochip Technology Incorporated in the USA and other countries

                                                                                                    ClockWorks The Embedded Control Solutions Company EtherSynch Hyper Speed Control HyperLightLoad IntelliMOS mTouch Precision Edge and Quiet-Wire are registered trademarks of MicrochipTechnology Incorporated in the USA

                                                                                                    Adjacent Key Suppression AKS Analog-for-the-Digital Age Any Capacitor AnyIn AnyOut BodyComchipKIT chipKIT logo CodeGuard CryptoAuthentication CryptoCompanion CryptoControllerdsPICDEM dsPICDEMnet Dynamic Average Matching DAM ECAN EtherGREEN In-Circuit SerialProgramming ICSP Inter-Chip Connectivity JitterBlocker KleerNet KleerNet logo Mindi MiWimotorBench MPASM MPF MPLAB Certified logo MPLIB MPLINK MultiTRAK NetDetach OmniscientCode Generation PICDEM PICDEMnet PICkit PICtail PureSilicon QMatrix RightTouch logo REALICE Ripple Blocker SAM-ICE Serial Quad IO SMART-IS SQI SuperSwitcher SuperSwitcher II TotalEndurance TSHARC USBCheck VariSense ViewSpan WiperLock Wireless DNA and ZENA aretrademarks of Microchip Technology Incorporated in the USA and other countries

                                                                                                    SQTP is a service mark of Microchip Technology Incorporated in the USA

                                                                                                    Silicon Storage Technology is a registered trademark of Microchip Technology Inc in other countries

                                                                                                    GestIC is a registered trademark of Microchip Technology Germany II GmbH amp Co KG a subsidiary ofMicrochip Technology Inc in other countries

                                                                                                    All other trademarks mentioned herein are property of their respective companies

                                                                                                    ATBTLC1000

                                                                                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 55

                                                                                                    copy 2018 Microchip Technology Incorporated Printed in the USA All Rights Reserved

                                                                                                    ISBN 978-1-5224-2921-0

                                                                                                    Quality Management System Certified by DNV

                                                                                                    ISOTS 16949Microchip received ISOTS-169492009 certification for its worldwide headquarters design and waferfabrication facilities in Chandler and Tempe Arizona Gresham Oregon and design centers in Californiaand India The Companyrsquos quality system processes and procedures are for its PICreg MCUs and dsPICreg

                                                                                                    DSCs KEELOQreg code hopping devices Serial EEPROMs microperipherals nonvolatile memory andanalog products In addition Microchiprsquos quality system for the design and manufacture of developmentsystems is ISO 90012000 certified

                                                                                                    ATBTLC1000

                                                                                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 56

                                                                                                    AMERICAS ASIAPACIFIC ASIAPACIFIC EUROPECorporate Office2355 West Chandler BlvdChandler AZ 85224-6199Tel 480-792-7200Fax 480-792-7277Technical SupporthttpwwwmicrochipcomsupportWeb AddresswwwmicrochipcomAtlantaDuluth GATel 678-957-9614Fax 678-957-1455Austin TXTel 512-257-3370BostonWestborough MATel 774-760-0087Fax 774-760-0088ChicagoItasca ILTel 630-285-0071Fax 630-285-0075DallasAddison TXTel 972-818-7423Fax 972-818-2924DetroitNovi MITel 248-848-4000Houston TXTel 281-894-5983IndianapolisNoblesville INTel 317-773-8323Fax 317-773-5453Tel 317-536-2380Los AngelesMission Viejo CATel 949-462-9523Fax 949-462-9608Tel 951-273-7800Raleigh NCTel 919-844-7510New York NYTel 631-435-6000San Jose CATel 408-735-9110Tel 408-436-4270Canada - TorontoTel 905-695-1980Fax 905-695-2078

                                                                                                    Australia - SydneyTel 61-2-9868-6733China - BeijingTel 86-10-8569-7000China - ChengduTel 86-28-8665-5511China - ChongqingTel 86-23-8980-9588China - DongguanTel 86-769-8702-9880China - GuangzhouTel 86-20-8755-8029China - HangzhouTel 86-571-8792-8115China - Hong Kong SARTel 852-2943-5100China - NanjingTel 86-25-8473-2460China - QingdaoTel 86-532-8502-7355China - ShanghaiTel 86-21-3326-8000China - ShenyangTel 86-24-2334-2829China - ShenzhenTel 86-755-8864-2200China - SuzhouTel 86-186-6233-1526China - WuhanTel 86-27-5980-5300China - XianTel 86-29-8833-7252China - XiamenTel 86-592-2388138China - ZhuhaiTel 86-756-3210040

                                                                                                    India - BangaloreTel 91-80-3090-4444India - New DelhiTel 91-11-4160-8631India - PuneTel 91-20-4121-0141Japan - OsakaTel 81-6-6152-7160Japan - TokyoTel 81-3-6880- 3770Korea - DaeguTel 82-53-744-4301Korea - SeoulTel 82-2-554-7200Malaysia - Kuala LumpurTel 60-3-7651-7906Malaysia - PenangTel 60-4-227-8870Philippines - ManilaTel 63-2-634-9065SingaporeTel 65-6334-8870Taiwan - Hsin ChuTel 886-3-577-8366Taiwan - KaohsiungTel 886-7-213-7830Taiwan - TaipeiTel 886-2-2508-8600Thailand - BangkokTel 66-2-694-1351Vietnam - Ho Chi MinhTel 84-28-5448-2100

                                                                                                    Austria - WelsTel 43-7242-2244-39Fax 43-7242-2244-393Denmark - CopenhagenTel 45-4450-2828Fax 45-4485-2829Finland - EspooTel 358-9-4520-820France - ParisTel 33-1-69-53-63-20Fax 33-1-69-30-90-79Germany - GarchingTel 49-8931-9700Germany - HaanTel 49-2129-3766400Germany - HeilbronnTel 49-7131-67-3636Germany - KarlsruheTel 49-721-625370Germany - MunichTel 49-89-627-144-0Fax 49-89-627-144-44Germany - RosenheimTel 49-8031-354-560Israel - RarsquoananaTel 972-9-744-7705Italy - MilanTel 39-0331-742611Fax 39-0331-466781Italy - PadovaTel 39-049-7625286Netherlands - DrunenTel 31-416-690399Fax 31-416-690340Norway - TrondheimTel 47-7289-7561Poland - WarsawTel 48-22-3325737Romania - BucharestTel 40-21-407-87-50Spain - MadridTel 34-91-708-08-90Fax 34-91-708-08-91Sweden - GothenbergTel 46-31-704-60-40Sweden - StockholmTel 46-8-5090-4654UK - WokinghamTel 44-118-921-5800Fax 44-118-921-5820

                                                                                                    Worldwide Sales and Service

                                                                                                    copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 57

                                                                                                    • Introduction
                                                                                                    • Table of Contents
                                                                                                    • 1 Getting Started
                                                                                                      • 11 Software Prerequisites
                                                                                                        • 111 Installation Steps of Atmel Studio 7
                                                                                                          • 12 Software Setup
                                                                                                            • 121 Installation of Microchip SmartConnect application on a Mobile device
                                                                                                              • 13 ATBTLC1000 Embedded Firmware
                                                                                                              • 14 ATBTLC1000 Host Software API
                                                                                                              • 15 Hardware Prerequisites
                                                                                                                • 151 SMARTtrade SAM L21 Xplained Pro
                                                                                                                • 152 ATBTLC1000ZR Xplained Pro Extension board
                                                                                                                  • 16 Hardware Setup
                                                                                                                    • 2 Creating the Project and Initializing
                                                                                                                      • 21 Creating Project from ASF
                                                                                                                      • 22 Configuring ASF for ATBTLC1000-ZR
                                                                                                                      • 23 Compiling and Testing the Project
                                                                                                                        • 3 Establishing Connection with Central Device
                                                                                                                          • 31 Configuring and Starting the Advertisement Process
                                                                                                                            • 311 Flags (AD Type 0x00)
                                                                                                                            • 312 Available Service UUID (AD Types 0x02 to 0x07)
                                                                                                                            • 313 Device Name (AD Types 0x08 to 0x09)
                                                                                                                              • 3131 Setting the Advertisement Payload (ble_advertisement_data_set)
                                                                                                                              • 3132 Starting the Advertisement Process (at_ble_adv_start)
                                                                                                                                • 314 Advertisement Process
                                                                                                                                  • 3141 Starting the Advertisement Process
                                                                                                                                      • 32 Managing GAP events
                                                                                                                                        • 321 Handling of Connected and Disconnected GAP Events
                                                                                                                                            • 4 SettingHandling of Pre-Defined Service
                                                                                                                                              • 41 Adding Device Info Service Component from ASF Wizard to Project
                                                                                                                                              • 42 Configuring and Loading Device Information Service
                                                                                                                                                • 421 Procedure to Configure and Load Device Info Service
                                                                                                                                                    • 5 Setting up and Handling Custom Service
                                                                                                                                                      • 51 Configuring and Loading the Custom Environment Service
                                                                                                                                                        • 511 Procedure to Configure and Load Custom Environment Service
                                                                                                                                                          • 52 Updating the Temperature Characteristic
                                                                                                                                                            • 521 Setting a Characteristic Value ( at_ble_characteristic_value_set)
                                                                                                                                                            • 522 Sending a Notification (at_ble_notification_send)
                                                                                                                                                            • 523 Sending Temperature Information Once in Every 10 Seconds to Central
                                                                                                                                                                • 6 Appendix A Software Solution - Pre-Defined Svc
                                                                                                                                                                • 7 Appendix B Software Solution - Custom Service
                                                                                                                                                                • 8 Document Revision History
                                                                                                                                                                • The Microchip Web Site
                                                                                                                                                                • Customer Change Notification Service
                                                                                                                                                                • Customer Support
                                                                                                                                                                • Microchip Devices Code Protection Feature
                                                                                                                                                                • Legal Notice
                                                                                                                                                                • Trademarks
                                                                                                                                                                • Quality Management System Certified by DNV
                                                                                                                                                                • Worldwide Sales and Service

                                                                                                      Register GAP Callbacks printf(n Assignment 22 Register ATBTLC1000 callbacks) ble_status = ble_mgr_events_callback_handler(REGISTER_CALL_BACK BLE_GAP_EVENT_TYPEampapp_gap_handle) if (ble_status = true) printf(nError when Registering ATBTLC1000 callbacks)

                                                                                                      timer callback function static void timer_callback_fn(void) Add timer callback functionality here timer_flag = true

                                                                                                      void button_cb(void) Add button callback functionality here

                                                                                                      static uint8_t Temperature_value = 25

                                                                                                      Register GATT callbacks at BLE manager levelvoid send_temperature_notification(void) Register GAP Callbacks printf(n Assignment 42 Send temperature update notification) Dummy temperature value Temperature_value++ if(Temperature_value gt 75) Temperature_value = 25 Update attribute data base ble_status = at_ble_characteristic_value_set( environment_service_characs[0]char_val_handle (uint8_t )ampTemperature_value sizeof(Temperature_value)) ble_status = at_ble_notification_send(0 environment_service_characs[0]char_val_handle) if(ble_status = AT_BLE_SUCCESS) printf(fail to send temperature update notification )

                                                                                                      int main(void) if SAMG55 || SAM4S Initialize the SAM system sysclk_init() board_init() elif SAM0 system_init() endif

                                                                                                      Initialize serial console serial_console_init() Hardware timer hw_timer_init() button initialization button_init() hw_timer_register_callback(timer_callback_fn)

                                                                                                      DBG_LOG(Initializing BLE Application) initialize the BLE chip and Set the Device Address ble_device_init(NULL) Register Gap ATBTLC1000 Callbacks register_btlc1000_callbacks()

                                                                                                      Custom service init custom_environment_service_init()

                                                                                                      ATBTLC1000Appendix B Software Solution - Custom Service

                                                                                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 51

                                                                                                      Register Gatt server callback register_gatt_server_callbacks()

                                                                                                      Start Advertising process start_advertisement() while(true) ble_event_task() if(connected_flag == true ampamp timer_flag == true) timer_flag = false send_temperature_notification()

                                                                                                      ATBTLC1000Appendix B Software Solution - Custom Service

                                                                                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 52

                                                                                                      8 Document Revision HistoryRev B - 42018

                                                                                                      Section Changes

                                                                                                      Document Revised contents to match various Bluetooth Low Energy standard versions

                                                                                                      Rev A - 122017

                                                                                                      Section Changes

                                                                                                      Document Initial release

                                                                                                      ATBTLC1000Document Revision History

                                                                                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 53

                                                                                                      The Microchip Web Site

                                                                                                      Microchip provides online support via our web site at httpwwwmicrochipcom This web site is used asa means to make files and information easily available to customers Accessible by using your favoriteInternet browser the web site contains the following information

                                                                                                      bull Product Support ndash Data sheets and errata application notes and sample programs designresources userrsquos guides and hardware support documents latest software releases and archivedsoftware

                                                                                                      bull General Technical Support ndash Frequently Asked Questions (FAQ) technical support requestsonline discussion groups Microchip consultant program member listing

                                                                                                      bull Business of Microchip ndash Product selector and ordering guides latest Microchip press releaseslisting of seminars and events listings of Microchip sales offices distributors and factoryrepresentatives

                                                                                                      Customer Change Notification Service

                                                                                                      Microchiprsquos customer notification service helps keep customers current on Microchip productsSubscribers will receive e-mail notification whenever there are changes updates revisions or erratarelated to a specified product family or development tool of interest

                                                                                                      To register access the Microchip web site at httpwwwmicrochipcom Under ldquoSupportrdquo click onldquoCustomer Change Notificationrdquo and follow the registration instructions

                                                                                                      Customer Support

                                                                                                      Users of Microchip products can receive assistance through several channels

                                                                                                      bull Distributor or Representativebull Local Sales Officebull Field Application Engineer (FAE)bull Technical Support

                                                                                                      Customers should contact their distributor representative or Field Application Engineer (FAE) for supportLocal sales offices are also available to help customers A listing of sales offices and locations is includedin the back of this document

                                                                                                      Technical support is available through the web site at httpwwwmicrochipcomsupport

                                                                                                      Microchip Devices Code Protection Feature

                                                                                                      Note the following details of the code protection feature on Microchip devices

                                                                                                      bull Microchip products meet the specification contained in their particular Microchip Data Sheetbull Microchip believes that its family of products is one of the most secure families of its kind on the

                                                                                                      market today when used in the intended manner and under normal conditionsbull There are dishonest and possibly illegal methods used to breach the code protection feature All of

                                                                                                      these methods to our knowledge require using the Microchip products in a manner outside theoperating specifications contained in Microchiprsquos Data Sheets Most likely the person doing so isengaged in theft of intellectual property

                                                                                                      bull Microchip is willing to work with the customer who is concerned about the integrity of their code

                                                                                                      ATBTLC1000

                                                                                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 54

                                                                                                      bull Neither Microchip nor any other semiconductor manufacturer can guarantee the security of theircode Code protection does not mean that we are guaranteeing the product as ldquounbreakablerdquo

                                                                                                      Code protection is constantly evolving We at Microchip are committed to continuously improving thecode protection features of our products Attempts to break Microchiprsquos code protection feature may be aviolation of the Digital Millennium Copyright Act If such acts allow unauthorized access to your softwareor other copyrighted work you may have a right to sue for relief under that Act

                                                                                                      Legal Notice

                                                                                                      Information contained in this publication regarding device applications and the like is provided only foryour convenience and may be superseded by updates It is your responsibility to ensure that yourapplication meets with your specifications MICROCHIP MAKES NO REPRESENTATIONS ORWARRANTIES OF ANY KIND WHETHER EXPRESS OR IMPLIED WRITTEN OR ORAL STATUTORYOR OTHERWISE RELATED TO THE INFORMATION INCLUDING BUT NOT LIMITED TO ITSCONDITION QUALITY PERFORMANCE MERCHANTABILITY OR FITNESS FOR PURPOSEMicrochip disclaims all liability arising from this information and its use Use of Microchip devices in lifesupport andor safety applications is entirely at the buyerrsquos risk and the buyer agrees to defendindemnify and hold harmless Microchip from any and all damages claims suits or expenses resultingfrom such use No licenses are conveyed implicitly or otherwise under any Microchip intellectualproperty rights unless otherwise stated

                                                                                                      Trademarks

                                                                                                      The Microchip name and logo the Microchip logo AnyRate AVR AVR logo AVR Freaks BeaconThingsBitCloud CryptoMemory CryptoRF dsPIC FlashFlex flexPWR Heldo JukeBlox KeeLoq KeeLoq logoKleer LANCheck LINK MD maXStylus maXTouch MediaLB megaAVR MOST MOST logo MPLABOptoLyzer PIC picoPower PICSTART PIC32 logo Prochip Designer QTouch RightTouch SAM-BASpyNIC SST SST Logo SuperFlash tinyAVR UNIO and XMEGA are registered trademarks ofMicrochip Technology Incorporated in the USA and other countries

                                                                                                      ClockWorks The Embedded Control Solutions Company EtherSynch Hyper Speed Control HyperLightLoad IntelliMOS mTouch Precision Edge and Quiet-Wire are registered trademarks of MicrochipTechnology Incorporated in the USA

                                                                                                      Adjacent Key Suppression AKS Analog-for-the-Digital Age Any Capacitor AnyIn AnyOut BodyComchipKIT chipKIT logo CodeGuard CryptoAuthentication CryptoCompanion CryptoControllerdsPICDEM dsPICDEMnet Dynamic Average Matching DAM ECAN EtherGREEN In-Circuit SerialProgramming ICSP Inter-Chip Connectivity JitterBlocker KleerNet KleerNet logo Mindi MiWimotorBench MPASM MPF MPLAB Certified logo MPLIB MPLINK MultiTRAK NetDetach OmniscientCode Generation PICDEM PICDEMnet PICkit PICtail PureSilicon QMatrix RightTouch logo REALICE Ripple Blocker SAM-ICE Serial Quad IO SMART-IS SQI SuperSwitcher SuperSwitcher II TotalEndurance TSHARC USBCheck VariSense ViewSpan WiperLock Wireless DNA and ZENA aretrademarks of Microchip Technology Incorporated in the USA and other countries

                                                                                                      SQTP is a service mark of Microchip Technology Incorporated in the USA

                                                                                                      Silicon Storage Technology is a registered trademark of Microchip Technology Inc in other countries

                                                                                                      GestIC is a registered trademark of Microchip Technology Germany II GmbH amp Co KG a subsidiary ofMicrochip Technology Inc in other countries

                                                                                                      All other trademarks mentioned herein are property of their respective companies

                                                                                                      ATBTLC1000

                                                                                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 55

                                                                                                      copy 2018 Microchip Technology Incorporated Printed in the USA All Rights Reserved

                                                                                                      ISBN 978-1-5224-2921-0

                                                                                                      Quality Management System Certified by DNV

                                                                                                      ISOTS 16949Microchip received ISOTS-169492009 certification for its worldwide headquarters design and waferfabrication facilities in Chandler and Tempe Arizona Gresham Oregon and design centers in Californiaand India The Companyrsquos quality system processes and procedures are for its PICreg MCUs and dsPICreg

                                                                                                      DSCs KEELOQreg code hopping devices Serial EEPROMs microperipherals nonvolatile memory andanalog products In addition Microchiprsquos quality system for the design and manufacture of developmentsystems is ISO 90012000 certified

                                                                                                      ATBTLC1000

                                                                                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 56

                                                                                                      AMERICAS ASIAPACIFIC ASIAPACIFIC EUROPECorporate Office2355 West Chandler BlvdChandler AZ 85224-6199Tel 480-792-7200Fax 480-792-7277Technical SupporthttpwwwmicrochipcomsupportWeb AddresswwwmicrochipcomAtlantaDuluth GATel 678-957-9614Fax 678-957-1455Austin TXTel 512-257-3370BostonWestborough MATel 774-760-0087Fax 774-760-0088ChicagoItasca ILTel 630-285-0071Fax 630-285-0075DallasAddison TXTel 972-818-7423Fax 972-818-2924DetroitNovi MITel 248-848-4000Houston TXTel 281-894-5983IndianapolisNoblesville INTel 317-773-8323Fax 317-773-5453Tel 317-536-2380Los AngelesMission Viejo CATel 949-462-9523Fax 949-462-9608Tel 951-273-7800Raleigh NCTel 919-844-7510New York NYTel 631-435-6000San Jose CATel 408-735-9110Tel 408-436-4270Canada - TorontoTel 905-695-1980Fax 905-695-2078

                                                                                                      Australia - SydneyTel 61-2-9868-6733China - BeijingTel 86-10-8569-7000China - ChengduTel 86-28-8665-5511China - ChongqingTel 86-23-8980-9588China - DongguanTel 86-769-8702-9880China - GuangzhouTel 86-20-8755-8029China - HangzhouTel 86-571-8792-8115China - Hong Kong SARTel 852-2943-5100China - NanjingTel 86-25-8473-2460China - QingdaoTel 86-532-8502-7355China - ShanghaiTel 86-21-3326-8000China - ShenyangTel 86-24-2334-2829China - ShenzhenTel 86-755-8864-2200China - SuzhouTel 86-186-6233-1526China - WuhanTel 86-27-5980-5300China - XianTel 86-29-8833-7252China - XiamenTel 86-592-2388138China - ZhuhaiTel 86-756-3210040

                                                                                                      India - BangaloreTel 91-80-3090-4444India - New DelhiTel 91-11-4160-8631India - PuneTel 91-20-4121-0141Japan - OsakaTel 81-6-6152-7160Japan - TokyoTel 81-3-6880- 3770Korea - DaeguTel 82-53-744-4301Korea - SeoulTel 82-2-554-7200Malaysia - Kuala LumpurTel 60-3-7651-7906Malaysia - PenangTel 60-4-227-8870Philippines - ManilaTel 63-2-634-9065SingaporeTel 65-6334-8870Taiwan - Hsin ChuTel 886-3-577-8366Taiwan - KaohsiungTel 886-7-213-7830Taiwan - TaipeiTel 886-2-2508-8600Thailand - BangkokTel 66-2-694-1351Vietnam - Ho Chi MinhTel 84-28-5448-2100

                                                                                                      Austria - WelsTel 43-7242-2244-39Fax 43-7242-2244-393Denmark - CopenhagenTel 45-4450-2828Fax 45-4485-2829Finland - EspooTel 358-9-4520-820France - ParisTel 33-1-69-53-63-20Fax 33-1-69-30-90-79Germany - GarchingTel 49-8931-9700Germany - HaanTel 49-2129-3766400Germany - HeilbronnTel 49-7131-67-3636Germany - KarlsruheTel 49-721-625370Germany - MunichTel 49-89-627-144-0Fax 49-89-627-144-44Germany - RosenheimTel 49-8031-354-560Israel - RarsquoananaTel 972-9-744-7705Italy - MilanTel 39-0331-742611Fax 39-0331-466781Italy - PadovaTel 39-049-7625286Netherlands - DrunenTel 31-416-690399Fax 31-416-690340Norway - TrondheimTel 47-7289-7561Poland - WarsawTel 48-22-3325737Romania - BucharestTel 40-21-407-87-50Spain - MadridTel 34-91-708-08-90Fax 34-91-708-08-91Sweden - GothenbergTel 46-31-704-60-40Sweden - StockholmTel 46-8-5090-4654UK - WokinghamTel 44-118-921-5800Fax 44-118-921-5820

                                                                                                      Worldwide Sales and Service

                                                                                                      copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 57

                                                                                                      • Introduction
                                                                                                      • Table of Contents
                                                                                                      • 1 Getting Started
                                                                                                        • 11 Software Prerequisites
                                                                                                          • 111 Installation Steps of Atmel Studio 7
                                                                                                            • 12 Software Setup
                                                                                                              • 121 Installation of Microchip SmartConnect application on a Mobile device
                                                                                                                • 13 ATBTLC1000 Embedded Firmware
                                                                                                                • 14 ATBTLC1000 Host Software API
                                                                                                                • 15 Hardware Prerequisites
                                                                                                                  • 151 SMARTtrade SAM L21 Xplained Pro
                                                                                                                  • 152 ATBTLC1000ZR Xplained Pro Extension board
                                                                                                                    • 16 Hardware Setup
                                                                                                                      • 2 Creating the Project and Initializing
                                                                                                                        • 21 Creating Project from ASF
                                                                                                                        • 22 Configuring ASF for ATBTLC1000-ZR
                                                                                                                        • 23 Compiling and Testing the Project
                                                                                                                          • 3 Establishing Connection with Central Device
                                                                                                                            • 31 Configuring and Starting the Advertisement Process
                                                                                                                              • 311 Flags (AD Type 0x00)
                                                                                                                              • 312 Available Service UUID (AD Types 0x02 to 0x07)
                                                                                                                              • 313 Device Name (AD Types 0x08 to 0x09)
                                                                                                                                • 3131 Setting the Advertisement Payload (ble_advertisement_data_set)
                                                                                                                                • 3132 Starting the Advertisement Process (at_ble_adv_start)
                                                                                                                                  • 314 Advertisement Process
                                                                                                                                    • 3141 Starting the Advertisement Process
                                                                                                                                        • 32 Managing GAP events
                                                                                                                                          • 321 Handling of Connected and Disconnected GAP Events
                                                                                                                                              • 4 SettingHandling of Pre-Defined Service
                                                                                                                                                • 41 Adding Device Info Service Component from ASF Wizard to Project
                                                                                                                                                • 42 Configuring and Loading Device Information Service
                                                                                                                                                  • 421 Procedure to Configure and Load Device Info Service
                                                                                                                                                      • 5 Setting up and Handling Custom Service
                                                                                                                                                        • 51 Configuring and Loading the Custom Environment Service
                                                                                                                                                          • 511 Procedure to Configure and Load Custom Environment Service
                                                                                                                                                            • 52 Updating the Temperature Characteristic
                                                                                                                                                              • 521 Setting a Characteristic Value ( at_ble_characteristic_value_set)
                                                                                                                                                              • 522 Sending a Notification (at_ble_notification_send)
                                                                                                                                                              • 523 Sending Temperature Information Once in Every 10 Seconds to Central
                                                                                                                                                                  • 6 Appendix A Software Solution - Pre-Defined Svc
                                                                                                                                                                  • 7 Appendix B Software Solution - Custom Service
                                                                                                                                                                  • 8 Document Revision History
                                                                                                                                                                  • The Microchip Web Site
                                                                                                                                                                  • Customer Change Notification Service
                                                                                                                                                                  • Customer Support
                                                                                                                                                                  • Microchip Devices Code Protection Feature
                                                                                                                                                                  • Legal Notice
                                                                                                                                                                  • Trademarks
                                                                                                                                                                  • Quality Management System Certified by DNV
                                                                                                                                                                  • Worldwide Sales and Service

                                                                                                        Register Gatt server callback register_gatt_server_callbacks()

                                                                                                        Start Advertising process start_advertisement() while(true) ble_event_task() if(connected_flag == true ampamp timer_flag == true) timer_flag = false send_temperature_notification()

                                                                                                        ATBTLC1000Appendix B Software Solution - Custom Service

                                                                                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 52

                                                                                                        8 Document Revision HistoryRev B - 42018

                                                                                                        Section Changes

                                                                                                        Document Revised contents to match various Bluetooth Low Energy standard versions

                                                                                                        Rev A - 122017

                                                                                                        Section Changes

                                                                                                        Document Initial release

                                                                                                        ATBTLC1000Document Revision History

                                                                                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 53

                                                                                                        The Microchip Web Site

                                                                                                        Microchip provides online support via our web site at httpwwwmicrochipcom This web site is used asa means to make files and information easily available to customers Accessible by using your favoriteInternet browser the web site contains the following information

                                                                                                        bull Product Support ndash Data sheets and errata application notes and sample programs designresources userrsquos guides and hardware support documents latest software releases and archivedsoftware

                                                                                                        bull General Technical Support ndash Frequently Asked Questions (FAQ) technical support requestsonline discussion groups Microchip consultant program member listing

                                                                                                        bull Business of Microchip ndash Product selector and ordering guides latest Microchip press releaseslisting of seminars and events listings of Microchip sales offices distributors and factoryrepresentatives

                                                                                                        Customer Change Notification Service

                                                                                                        Microchiprsquos customer notification service helps keep customers current on Microchip productsSubscribers will receive e-mail notification whenever there are changes updates revisions or erratarelated to a specified product family or development tool of interest

                                                                                                        To register access the Microchip web site at httpwwwmicrochipcom Under ldquoSupportrdquo click onldquoCustomer Change Notificationrdquo and follow the registration instructions

                                                                                                        Customer Support

                                                                                                        Users of Microchip products can receive assistance through several channels

                                                                                                        bull Distributor or Representativebull Local Sales Officebull Field Application Engineer (FAE)bull Technical Support

                                                                                                        Customers should contact their distributor representative or Field Application Engineer (FAE) for supportLocal sales offices are also available to help customers A listing of sales offices and locations is includedin the back of this document

                                                                                                        Technical support is available through the web site at httpwwwmicrochipcomsupport

                                                                                                        Microchip Devices Code Protection Feature

                                                                                                        Note the following details of the code protection feature on Microchip devices

                                                                                                        bull Microchip products meet the specification contained in their particular Microchip Data Sheetbull Microchip believes that its family of products is one of the most secure families of its kind on the

                                                                                                        market today when used in the intended manner and under normal conditionsbull There are dishonest and possibly illegal methods used to breach the code protection feature All of

                                                                                                        these methods to our knowledge require using the Microchip products in a manner outside theoperating specifications contained in Microchiprsquos Data Sheets Most likely the person doing so isengaged in theft of intellectual property

                                                                                                        bull Microchip is willing to work with the customer who is concerned about the integrity of their code

                                                                                                        ATBTLC1000

                                                                                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 54

                                                                                                        bull Neither Microchip nor any other semiconductor manufacturer can guarantee the security of theircode Code protection does not mean that we are guaranteeing the product as ldquounbreakablerdquo

                                                                                                        Code protection is constantly evolving We at Microchip are committed to continuously improving thecode protection features of our products Attempts to break Microchiprsquos code protection feature may be aviolation of the Digital Millennium Copyright Act If such acts allow unauthorized access to your softwareor other copyrighted work you may have a right to sue for relief under that Act

                                                                                                        Legal Notice

                                                                                                        Information contained in this publication regarding device applications and the like is provided only foryour convenience and may be superseded by updates It is your responsibility to ensure that yourapplication meets with your specifications MICROCHIP MAKES NO REPRESENTATIONS ORWARRANTIES OF ANY KIND WHETHER EXPRESS OR IMPLIED WRITTEN OR ORAL STATUTORYOR OTHERWISE RELATED TO THE INFORMATION INCLUDING BUT NOT LIMITED TO ITSCONDITION QUALITY PERFORMANCE MERCHANTABILITY OR FITNESS FOR PURPOSEMicrochip disclaims all liability arising from this information and its use Use of Microchip devices in lifesupport andor safety applications is entirely at the buyerrsquos risk and the buyer agrees to defendindemnify and hold harmless Microchip from any and all damages claims suits or expenses resultingfrom such use No licenses are conveyed implicitly or otherwise under any Microchip intellectualproperty rights unless otherwise stated

                                                                                                        Trademarks

                                                                                                        The Microchip name and logo the Microchip logo AnyRate AVR AVR logo AVR Freaks BeaconThingsBitCloud CryptoMemory CryptoRF dsPIC FlashFlex flexPWR Heldo JukeBlox KeeLoq KeeLoq logoKleer LANCheck LINK MD maXStylus maXTouch MediaLB megaAVR MOST MOST logo MPLABOptoLyzer PIC picoPower PICSTART PIC32 logo Prochip Designer QTouch RightTouch SAM-BASpyNIC SST SST Logo SuperFlash tinyAVR UNIO and XMEGA are registered trademarks ofMicrochip Technology Incorporated in the USA and other countries

                                                                                                        ClockWorks The Embedded Control Solutions Company EtherSynch Hyper Speed Control HyperLightLoad IntelliMOS mTouch Precision Edge and Quiet-Wire are registered trademarks of MicrochipTechnology Incorporated in the USA

                                                                                                        Adjacent Key Suppression AKS Analog-for-the-Digital Age Any Capacitor AnyIn AnyOut BodyComchipKIT chipKIT logo CodeGuard CryptoAuthentication CryptoCompanion CryptoControllerdsPICDEM dsPICDEMnet Dynamic Average Matching DAM ECAN EtherGREEN In-Circuit SerialProgramming ICSP Inter-Chip Connectivity JitterBlocker KleerNet KleerNet logo Mindi MiWimotorBench MPASM MPF MPLAB Certified logo MPLIB MPLINK MultiTRAK NetDetach OmniscientCode Generation PICDEM PICDEMnet PICkit PICtail PureSilicon QMatrix RightTouch logo REALICE Ripple Blocker SAM-ICE Serial Quad IO SMART-IS SQI SuperSwitcher SuperSwitcher II TotalEndurance TSHARC USBCheck VariSense ViewSpan WiperLock Wireless DNA and ZENA aretrademarks of Microchip Technology Incorporated in the USA and other countries

                                                                                                        SQTP is a service mark of Microchip Technology Incorporated in the USA

                                                                                                        Silicon Storage Technology is a registered trademark of Microchip Technology Inc in other countries

                                                                                                        GestIC is a registered trademark of Microchip Technology Germany II GmbH amp Co KG a subsidiary ofMicrochip Technology Inc in other countries

                                                                                                        All other trademarks mentioned herein are property of their respective companies

                                                                                                        ATBTLC1000

                                                                                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 55

                                                                                                        copy 2018 Microchip Technology Incorporated Printed in the USA All Rights Reserved

                                                                                                        ISBN 978-1-5224-2921-0

                                                                                                        Quality Management System Certified by DNV

                                                                                                        ISOTS 16949Microchip received ISOTS-169492009 certification for its worldwide headquarters design and waferfabrication facilities in Chandler and Tempe Arizona Gresham Oregon and design centers in Californiaand India The Companyrsquos quality system processes and procedures are for its PICreg MCUs and dsPICreg

                                                                                                        DSCs KEELOQreg code hopping devices Serial EEPROMs microperipherals nonvolatile memory andanalog products In addition Microchiprsquos quality system for the design and manufacture of developmentsystems is ISO 90012000 certified

                                                                                                        ATBTLC1000

                                                                                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 56

                                                                                                        AMERICAS ASIAPACIFIC ASIAPACIFIC EUROPECorporate Office2355 West Chandler BlvdChandler AZ 85224-6199Tel 480-792-7200Fax 480-792-7277Technical SupporthttpwwwmicrochipcomsupportWeb AddresswwwmicrochipcomAtlantaDuluth GATel 678-957-9614Fax 678-957-1455Austin TXTel 512-257-3370BostonWestborough MATel 774-760-0087Fax 774-760-0088ChicagoItasca ILTel 630-285-0071Fax 630-285-0075DallasAddison TXTel 972-818-7423Fax 972-818-2924DetroitNovi MITel 248-848-4000Houston TXTel 281-894-5983IndianapolisNoblesville INTel 317-773-8323Fax 317-773-5453Tel 317-536-2380Los AngelesMission Viejo CATel 949-462-9523Fax 949-462-9608Tel 951-273-7800Raleigh NCTel 919-844-7510New York NYTel 631-435-6000San Jose CATel 408-735-9110Tel 408-436-4270Canada - TorontoTel 905-695-1980Fax 905-695-2078

                                                                                                        Australia - SydneyTel 61-2-9868-6733China - BeijingTel 86-10-8569-7000China - ChengduTel 86-28-8665-5511China - ChongqingTel 86-23-8980-9588China - DongguanTel 86-769-8702-9880China - GuangzhouTel 86-20-8755-8029China - HangzhouTel 86-571-8792-8115China - Hong Kong SARTel 852-2943-5100China - NanjingTel 86-25-8473-2460China - QingdaoTel 86-532-8502-7355China - ShanghaiTel 86-21-3326-8000China - ShenyangTel 86-24-2334-2829China - ShenzhenTel 86-755-8864-2200China - SuzhouTel 86-186-6233-1526China - WuhanTel 86-27-5980-5300China - XianTel 86-29-8833-7252China - XiamenTel 86-592-2388138China - ZhuhaiTel 86-756-3210040

                                                                                                        India - BangaloreTel 91-80-3090-4444India - New DelhiTel 91-11-4160-8631India - PuneTel 91-20-4121-0141Japan - OsakaTel 81-6-6152-7160Japan - TokyoTel 81-3-6880- 3770Korea - DaeguTel 82-53-744-4301Korea - SeoulTel 82-2-554-7200Malaysia - Kuala LumpurTel 60-3-7651-7906Malaysia - PenangTel 60-4-227-8870Philippines - ManilaTel 63-2-634-9065SingaporeTel 65-6334-8870Taiwan - Hsin ChuTel 886-3-577-8366Taiwan - KaohsiungTel 886-7-213-7830Taiwan - TaipeiTel 886-2-2508-8600Thailand - BangkokTel 66-2-694-1351Vietnam - Ho Chi MinhTel 84-28-5448-2100

                                                                                                        Austria - WelsTel 43-7242-2244-39Fax 43-7242-2244-393Denmark - CopenhagenTel 45-4450-2828Fax 45-4485-2829Finland - EspooTel 358-9-4520-820France - ParisTel 33-1-69-53-63-20Fax 33-1-69-30-90-79Germany - GarchingTel 49-8931-9700Germany - HaanTel 49-2129-3766400Germany - HeilbronnTel 49-7131-67-3636Germany - KarlsruheTel 49-721-625370Germany - MunichTel 49-89-627-144-0Fax 49-89-627-144-44Germany - RosenheimTel 49-8031-354-560Israel - RarsquoananaTel 972-9-744-7705Italy - MilanTel 39-0331-742611Fax 39-0331-466781Italy - PadovaTel 39-049-7625286Netherlands - DrunenTel 31-416-690399Fax 31-416-690340Norway - TrondheimTel 47-7289-7561Poland - WarsawTel 48-22-3325737Romania - BucharestTel 40-21-407-87-50Spain - MadridTel 34-91-708-08-90Fax 34-91-708-08-91Sweden - GothenbergTel 46-31-704-60-40Sweden - StockholmTel 46-8-5090-4654UK - WokinghamTel 44-118-921-5800Fax 44-118-921-5820

                                                                                                        Worldwide Sales and Service

                                                                                                        copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 57

                                                                                                        • Introduction
                                                                                                        • Table of Contents
                                                                                                        • 1 Getting Started
                                                                                                          • 11 Software Prerequisites
                                                                                                            • 111 Installation Steps of Atmel Studio 7
                                                                                                              • 12 Software Setup
                                                                                                                • 121 Installation of Microchip SmartConnect application on a Mobile device
                                                                                                                  • 13 ATBTLC1000 Embedded Firmware
                                                                                                                  • 14 ATBTLC1000 Host Software API
                                                                                                                  • 15 Hardware Prerequisites
                                                                                                                    • 151 SMARTtrade SAM L21 Xplained Pro
                                                                                                                    • 152 ATBTLC1000ZR Xplained Pro Extension board
                                                                                                                      • 16 Hardware Setup
                                                                                                                        • 2 Creating the Project and Initializing
                                                                                                                          • 21 Creating Project from ASF
                                                                                                                          • 22 Configuring ASF for ATBTLC1000-ZR
                                                                                                                          • 23 Compiling and Testing the Project
                                                                                                                            • 3 Establishing Connection with Central Device
                                                                                                                              • 31 Configuring and Starting the Advertisement Process
                                                                                                                                • 311 Flags (AD Type 0x00)
                                                                                                                                • 312 Available Service UUID (AD Types 0x02 to 0x07)
                                                                                                                                • 313 Device Name (AD Types 0x08 to 0x09)
                                                                                                                                  • 3131 Setting the Advertisement Payload (ble_advertisement_data_set)
                                                                                                                                  • 3132 Starting the Advertisement Process (at_ble_adv_start)
                                                                                                                                    • 314 Advertisement Process
                                                                                                                                      • 3141 Starting the Advertisement Process
                                                                                                                                          • 32 Managing GAP events
                                                                                                                                            • 321 Handling of Connected and Disconnected GAP Events
                                                                                                                                                • 4 SettingHandling of Pre-Defined Service
                                                                                                                                                  • 41 Adding Device Info Service Component from ASF Wizard to Project
                                                                                                                                                  • 42 Configuring and Loading Device Information Service
                                                                                                                                                    • 421 Procedure to Configure and Load Device Info Service
                                                                                                                                                        • 5 Setting up and Handling Custom Service
                                                                                                                                                          • 51 Configuring and Loading the Custom Environment Service
                                                                                                                                                            • 511 Procedure to Configure and Load Custom Environment Service
                                                                                                                                                              • 52 Updating the Temperature Characteristic
                                                                                                                                                                • 521 Setting a Characteristic Value ( at_ble_characteristic_value_set)
                                                                                                                                                                • 522 Sending a Notification (at_ble_notification_send)
                                                                                                                                                                • 523 Sending Temperature Information Once in Every 10 Seconds to Central
                                                                                                                                                                    • 6 Appendix A Software Solution - Pre-Defined Svc
                                                                                                                                                                    • 7 Appendix B Software Solution - Custom Service
                                                                                                                                                                    • 8 Document Revision History
                                                                                                                                                                    • The Microchip Web Site
                                                                                                                                                                    • Customer Change Notification Service
                                                                                                                                                                    • Customer Support
                                                                                                                                                                    • Microchip Devices Code Protection Feature
                                                                                                                                                                    • Legal Notice
                                                                                                                                                                    • Trademarks
                                                                                                                                                                    • Quality Management System Certified by DNV
                                                                                                                                                                    • Worldwide Sales and Service

                                                                                                          8 Document Revision HistoryRev B - 42018

                                                                                                          Section Changes

                                                                                                          Document Revised contents to match various Bluetooth Low Energy standard versions

                                                                                                          Rev A - 122017

                                                                                                          Section Changes

                                                                                                          Document Initial release

                                                                                                          ATBTLC1000Document Revision History

                                                                                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 53

                                                                                                          The Microchip Web Site

                                                                                                          Microchip provides online support via our web site at httpwwwmicrochipcom This web site is used asa means to make files and information easily available to customers Accessible by using your favoriteInternet browser the web site contains the following information

                                                                                                          bull Product Support ndash Data sheets and errata application notes and sample programs designresources userrsquos guides and hardware support documents latest software releases and archivedsoftware

                                                                                                          bull General Technical Support ndash Frequently Asked Questions (FAQ) technical support requestsonline discussion groups Microchip consultant program member listing

                                                                                                          bull Business of Microchip ndash Product selector and ordering guides latest Microchip press releaseslisting of seminars and events listings of Microchip sales offices distributors and factoryrepresentatives

                                                                                                          Customer Change Notification Service

                                                                                                          Microchiprsquos customer notification service helps keep customers current on Microchip productsSubscribers will receive e-mail notification whenever there are changes updates revisions or erratarelated to a specified product family or development tool of interest

                                                                                                          To register access the Microchip web site at httpwwwmicrochipcom Under ldquoSupportrdquo click onldquoCustomer Change Notificationrdquo and follow the registration instructions

                                                                                                          Customer Support

                                                                                                          Users of Microchip products can receive assistance through several channels

                                                                                                          bull Distributor or Representativebull Local Sales Officebull Field Application Engineer (FAE)bull Technical Support

                                                                                                          Customers should contact their distributor representative or Field Application Engineer (FAE) for supportLocal sales offices are also available to help customers A listing of sales offices and locations is includedin the back of this document

                                                                                                          Technical support is available through the web site at httpwwwmicrochipcomsupport

                                                                                                          Microchip Devices Code Protection Feature

                                                                                                          Note the following details of the code protection feature on Microchip devices

                                                                                                          bull Microchip products meet the specification contained in their particular Microchip Data Sheetbull Microchip believes that its family of products is one of the most secure families of its kind on the

                                                                                                          market today when used in the intended manner and under normal conditionsbull There are dishonest and possibly illegal methods used to breach the code protection feature All of

                                                                                                          these methods to our knowledge require using the Microchip products in a manner outside theoperating specifications contained in Microchiprsquos Data Sheets Most likely the person doing so isengaged in theft of intellectual property

                                                                                                          bull Microchip is willing to work with the customer who is concerned about the integrity of their code

                                                                                                          ATBTLC1000

                                                                                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 54

                                                                                                          bull Neither Microchip nor any other semiconductor manufacturer can guarantee the security of theircode Code protection does not mean that we are guaranteeing the product as ldquounbreakablerdquo

                                                                                                          Code protection is constantly evolving We at Microchip are committed to continuously improving thecode protection features of our products Attempts to break Microchiprsquos code protection feature may be aviolation of the Digital Millennium Copyright Act If such acts allow unauthorized access to your softwareor other copyrighted work you may have a right to sue for relief under that Act

                                                                                                          Legal Notice

                                                                                                          Information contained in this publication regarding device applications and the like is provided only foryour convenience and may be superseded by updates It is your responsibility to ensure that yourapplication meets with your specifications MICROCHIP MAKES NO REPRESENTATIONS ORWARRANTIES OF ANY KIND WHETHER EXPRESS OR IMPLIED WRITTEN OR ORAL STATUTORYOR OTHERWISE RELATED TO THE INFORMATION INCLUDING BUT NOT LIMITED TO ITSCONDITION QUALITY PERFORMANCE MERCHANTABILITY OR FITNESS FOR PURPOSEMicrochip disclaims all liability arising from this information and its use Use of Microchip devices in lifesupport andor safety applications is entirely at the buyerrsquos risk and the buyer agrees to defendindemnify and hold harmless Microchip from any and all damages claims suits or expenses resultingfrom such use No licenses are conveyed implicitly or otherwise under any Microchip intellectualproperty rights unless otherwise stated

                                                                                                          Trademarks

                                                                                                          The Microchip name and logo the Microchip logo AnyRate AVR AVR logo AVR Freaks BeaconThingsBitCloud CryptoMemory CryptoRF dsPIC FlashFlex flexPWR Heldo JukeBlox KeeLoq KeeLoq logoKleer LANCheck LINK MD maXStylus maXTouch MediaLB megaAVR MOST MOST logo MPLABOptoLyzer PIC picoPower PICSTART PIC32 logo Prochip Designer QTouch RightTouch SAM-BASpyNIC SST SST Logo SuperFlash tinyAVR UNIO and XMEGA are registered trademarks ofMicrochip Technology Incorporated in the USA and other countries

                                                                                                          ClockWorks The Embedded Control Solutions Company EtherSynch Hyper Speed Control HyperLightLoad IntelliMOS mTouch Precision Edge and Quiet-Wire are registered trademarks of MicrochipTechnology Incorporated in the USA

                                                                                                          Adjacent Key Suppression AKS Analog-for-the-Digital Age Any Capacitor AnyIn AnyOut BodyComchipKIT chipKIT logo CodeGuard CryptoAuthentication CryptoCompanion CryptoControllerdsPICDEM dsPICDEMnet Dynamic Average Matching DAM ECAN EtherGREEN In-Circuit SerialProgramming ICSP Inter-Chip Connectivity JitterBlocker KleerNet KleerNet logo Mindi MiWimotorBench MPASM MPF MPLAB Certified logo MPLIB MPLINK MultiTRAK NetDetach OmniscientCode Generation PICDEM PICDEMnet PICkit PICtail PureSilicon QMatrix RightTouch logo REALICE Ripple Blocker SAM-ICE Serial Quad IO SMART-IS SQI SuperSwitcher SuperSwitcher II TotalEndurance TSHARC USBCheck VariSense ViewSpan WiperLock Wireless DNA and ZENA aretrademarks of Microchip Technology Incorporated in the USA and other countries

                                                                                                          SQTP is a service mark of Microchip Technology Incorporated in the USA

                                                                                                          Silicon Storage Technology is a registered trademark of Microchip Technology Inc in other countries

                                                                                                          GestIC is a registered trademark of Microchip Technology Germany II GmbH amp Co KG a subsidiary ofMicrochip Technology Inc in other countries

                                                                                                          All other trademarks mentioned herein are property of their respective companies

                                                                                                          ATBTLC1000

                                                                                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 55

                                                                                                          copy 2018 Microchip Technology Incorporated Printed in the USA All Rights Reserved

                                                                                                          ISBN 978-1-5224-2921-0

                                                                                                          Quality Management System Certified by DNV

                                                                                                          ISOTS 16949Microchip received ISOTS-169492009 certification for its worldwide headquarters design and waferfabrication facilities in Chandler and Tempe Arizona Gresham Oregon and design centers in Californiaand India The Companyrsquos quality system processes and procedures are for its PICreg MCUs and dsPICreg

                                                                                                          DSCs KEELOQreg code hopping devices Serial EEPROMs microperipherals nonvolatile memory andanalog products In addition Microchiprsquos quality system for the design and manufacture of developmentsystems is ISO 90012000 certified

                                                                                                          ATBTLC1000

                                                                                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 56

                                                                                                          AMERICAS ASIAPACIFIC ASIAPACIFIC EUROPECorporate Office2355 West Chandler BlvdChandler AZ 85224-6199Tel 480-792-7200Fax 480-792-7277Technical SupporthttpwwwmicrochipcomsupportWeb AddresswwwmicrochipcomAtlantaDuluth GATel 678-957-9614Fax 678-957-1455Austin TXTel 512-257-3370BostonWestborough MATel 774-760-0087Fax 774-760-0088ChicagoItasca ILTel 630-285-0071Fax 630-285-0075DallasAddison TXTel 972-818-7423Fax 972-818-2924DetroitNovi MITel 248-848-4000Houston TXTel 281-894-5983IndianapolisNoblesville INTel 317-773-8323Fax 317-773-5453Tel 317-536-2380Los AngelesMission Viejo CATel 949-462-9523Fax 949-462-9608Tel 951-273-7800Raleigh NCTel 919-844-7510New York NYTel 631-435-6000San Jose CATel 408-735-9110Tel 408-436-4270Canada - TorontoTel 905-695-1980Fax 905-695-2078

                                                                                                          Australia - SydneyTel 61-2-9868-6733China - BeijingTel 86-10-8569-7000China - ChengduTel 86-28-8665-5511China - ChongqingTel 86-23-8980-9588China - DongguanTel 86-769-8702-9880China - GuangzhouTel 86-20-8755-8029China - HangzhouTel 86-571-8792-8115China - Hong Kong SARTel 852-2943-5100China - NanjingTel 86-25-8473-2460China - QingdaoTel 86-532-8502-7355China - ShanghaiTel 86-21-3326-8000China - ShenyangTel 86-24-2334-2829China - ShenzhenTel 86-755-8864-2200China - SuzhouTel 86-186-6233-1526China - WuhanTel 86-27-5980-5300China - XianTel 86-29-8833-7252China - XiamenTel 86-592-2388138China - ZhuhaiTel 86-756-3210040

                                                                                                          India - BangaloreTel 91-80-3090-4444India - New DelhiTel 91-11-4160-8631India - PuneTel 91-20-4121-0141Japan - OsakaTel 81-6-6152-7160Japan - TokyoTel 81-3-6880- 3770Korea - DaeguTel 82-53-744-4301Korea - SeoulTel 82-2-554-7200Malaysia - Kuala LumpurTel 60-3-7651-7906Malaysia - PenangTel 60-4-227-8870Philippines - ManilaTel 63-2-634-9065SingaporeTel 65-6334-8870Taiwan - Hsin ChuTel 886-3-577-8366Taiwan - KaohsiungTel 886-7-213-7830Taiwan - TaipeiTel 886-2-2508-8600Thailand - BangkokTel 66-2-694-1351Vietnam - Ho Chi MinhTel 84-28-5448-2100

                                                                                                          Austria - WelsTel 43-7242-2244-39Fax 43-7242-2244-393Denmark - CopenhagenTel 45-4450-2828Fax 45-4485-2829Finland - EspooTel 358-9-4520-820France - ParisTel 33-1-69-53-63-20Fax 33-1-69-30-90-79Germany - GarchingTel 49-8931-9700Germany - HaanTel 49-2129-3766400Germany - HeilbronnTel 49-7131-67-3636Germany - KarlsruheTel 49-721-625370Germany - MunichTel 49-89-627-144-0Fax 49-89-627-144-44Germany - RosenheimTel 49-8031-354-560Israel - RarsquoananaTel 972-9-744-7705Italy - MilanTel 39-0331-742611Fax 39-0331-466781Italy - PadovaTel 39-049-7625286Netherlands - DrunenTel 31-416-690399Fax 31-416-690340Norway - TrondheimTel 47-7289-7561Poland - WarsawTel 48-22-3325737Romania - BucharestTel 40-21-407-87-50Spain - MadridTel 34-91-708-08-90Fax 34-91-708-08-91Sweden - GothenbergTel 46-31-704-60-40Sweden - StockholmTel 46-8-5090-4654UK - WokinghamTel 44-118-921-5800Fax 44-118-921-5820

                                                                                                          Worldwide Sales and Service

                                                                                                          copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 57

                                                                                                          • Introduction
                                                                                                          • Table of Contents
                                                                                                          • 1 Getting Started
                                                                                                            • 11 Software Prerequisites
                                                                                                              • 111 Installation Steps of Atmel Studio 7
                                                                                                                • 12 Software Setup
                                                                                                                  • 121 Installation of Microchip SmartConnect application on a Mobile device
                                                                                                                    • 13 ATBTLC1000 Embedded Firmware
                                                                                                                    • 14 ATBTLC1000 Host Software API
                                                                                                                    • 15 Hardware Prerequisites
                                                                                                                      • 151 SMARTtrade SAM L21 Xplained Pro
                                                                                                                      • 152 ATBTLC1000ZR Xplained Pro Extension board
                                                                                                                        • 16 Hardware Setup
                                                                                                                          • 2 Creating the Project and Initializing
                                                                                                                            • 21 Creating Project from ASF
                                                                                                                            • 22 Configuring ASF for ATBTLC1000-ZR
                                                                                                                            • 23 Compiling and Testing the Project
                                                                                                                              • 3 Establishing Connection with Central Device
                                                                                                                                • 31 Configuring and Starting the Advertisement Process
                                                                                                                                  • 311 Flags (AD Type 0x00)
                                                                                                                                  • 312 Available Service UUID (AD Types 0x02 to 0x07)
                                                                                                                                  • 313 Device Name (AD Types 0x08 to 0x09)
                                                                                                                                    • 3131 Setting the Advertisement Payload (ble_advertisement_data_set)
                                                                                                                                    • 3132 Starting the Advertisement Process (at_ble_adv_start)
                                                                                                                                      • 314 Advertisement Process
                                                                                                                                        • 3141 Starting the Advertisement Process
                                                                                                                                            • 32 Managing GAP events
                                                                                                                                              • 321 Handling of Connected and Disconnected GAP Events
                                                                                                                                                  • 4 SettingHandling of Pre-Defined Service
                                                                                                                                                    • 41 Adding Device Info Service Component from ASF Wizard to Project
                                                                                                                                                    • 42 Configuring and Loading Device Information Service
                                                                                                                                                      • 421 Procedure to Configure and Load Device Info Service
                                                                                                                                                          • 5 Setting up and Handling Custom Service
                                                                                                                                                            • 51 Configuring and Loading the Custom Environment Service
                                                                                                                                                              • 511 Procedure to Configure and Load Custom Environment Service
                                                                                                                                                                • 52 Updating the Temperature Characteristic
                                                                                                                                                                  • 521 Setting a Characteristic Value ( at_ble_characteristic_value_set)
                                                                                                                                                                  • 522 Sending a Notification (at_ble_notification_send)
                                                                                                                                                                  • 523 Sending Temperature Information Once in Every 10 Seconds to Central
                                                                                                                                                                      • 6 Appendix A Software Solution - Pre-Defined Svc
                                                                                                                                                                      • 7 Appendix B Software Solution - Custom Service
                                                                                                                                                                      • 8 Document Revision History
                                                                                                                                                                      • The Microchip Web Site
                                                                                                                                                                      • Customer Change Notification Service
                                                                                                                                                                      • Customer Support
                                                                                                                                                                      • Microchip Devices Code Protection Feature
                                                                                                                                                                      • Legal Notice
                                                                                                                                                                      • Trademarks
                                                                                                                                                                      • Quality Management System Certified by DNV
                                                                                                                                                                      • Worldwide Sales and Service

                                                                                                            The Microchip Web Site

                                                                                                            Microchip provides online support via our web site at httpwwwmicrochipcom This web site is used asa means to make files and information easily available to customers Accessible by using your favoriteInternet browser the web site contains the following information

                                                                                                            bull Product Support ndash Data sheets and errata application notes and sample programs designresources userrsquos guides and hardware support documents latest software releases and archivedsoftware

                                                                                                            bull General Technical Support ndash Frequently Asked Questions (FAQ) technical support requestsonline discussion groups Microchip consultant program member listing

                                                                                                            bull Business of Microchip ndash Product selector and ordering guides latest Microchip press releaseslisting of seminars and events listings of Microchip sales offices distributors and factoryrepresentatives

                                                                                                            Customer Change Notification Service

                                                                                                            Microchiprsquos customer notification service helps keep customers current on Microchip productsSubscribers will receive e-mail notification whenever there are changes updates revisions or erratarelated to a specified product family or development tool of interest

                                                                                                            To register access the Microchip web site at httpwwwmicrochipcom Under ldquoSupportrdquo click onldquoCustomer Change Notificationrdquo and follow the registration instructions

                                                                                                            Customer Support

                                                                                                            Users of Microchip products can receive assistance through several channels

                                                                                                            bull Distributor or Representativebull Local Sales Officebull Field Application Engineer (FAE)bull Technical Support

                                                                                                            Customers should contact their distributor representative or Field Application Engineer (FAE) for supportLocal sales offices are also available to help customers A listing of sales offices and locations is includedin the back of this document

                                                                                                            Technical support is available through the web site at httpwwwmicrochipcomsupport

                                                                                                            Microchip Devices Code Protection Feature

                                                                                                            Note the following details of the code protection feature on Microchip devices

                                                                                                            bull Microchip products meet the specification contained in their particular Microchip Data Sheetbull Microchip believes that its family of products is one of the most secure families of its kind on the

                                                                                                            market today when used in the intended manner and under normal conditionsbull There are dishonest and possibly illegal methods used to breach the code protection feature All of

                                                                                                            these methods to our knowledge require using the Microchip products in a manner outside theoperating specifications contained in Microchiprsquos Data Sheets Most likely the person doing so isengaged in theft of intellectual property

                                                                                                            bull Microchip is willing to work with the customer who is concerned about the integrity of their code

                                                                                                            ATBTLC1000

                                                                                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 54

                                                                                                            bull Neither Microchip nor any other semiconductor manufacturer can guarantee the security of theircode Code protection does not mean that we are guaranteeing the product as ldquounbreakablerdquo

                                                                                                            Code protection is constantly evolving We at Microchip are committed to continuously improving thecode protection features of our products Attempts to break Microchiprsquos code protection feature may be aviolation of the Digital Millennium Copyright Act If such acts allow unauthorized access to your softwareor other copyrighted work you may have a right to sue for relief under that Act

                                                                                                            Legal Notice

                                                                                                            Information contained in this publication regarding device applications and the like is provided only foryour convenience and may be superseded by updates It is your responsibility to ensure that yourapplication meets with your specifications MICROCHIP MAKES NO REPRESENTATIONS ORWARRANTIES OF ANY KIND WHETHER EXPRESS OR IMPLIED WRITTEN OR ORAL STATUTORYOR OTHERWISE RELATED TO THE INFORMATION INCLUDING BUT NOT LIMITED TO ITSCONDITION QUALITY PERFORMANCE MERCHANTABILITY OR FITNESS FOR PURPOSEMicrochip disclaims all liability arising from this information and its use Use of Microchip devices in lifesupport andor safety applications is entirely at the buyerrsquos risk and the buyer agrees to defendindemnify and hold harmless Microchip from any and all damages claims suits or expenses resultingfrom such use No licenses are conveyed implicitly or otherwise under any Microchip intellectualproperty rights unless otherwise stated

                                                                                                            Trademarks

                                                                                                            The Microchip name and logo the Microchip logo AnyRate AVR AVR logo AVR Freaks BeaconThingsBitCloud CryptoMemory CryptoRF dsPIC FlashFlex flexPWR Heldo JukeBlox KeeLoq KeeLoq logoKleer LANCheck LINK MD maXStylus maXTouch MediaLB megaAVR MOST MOST logo MPLABOptoLyzer PIC picoPower PICSTART PIC32 logo Prochip Designer QTouch RightTouch SAM-BASpyNIC SST SST Logo SuperFlash tinyAVR UNIO and XMEGA are registered trademarks ofMicrochip Technology Incorporated in the USA and other countries

                                                                                                            ClockWorks The Embedded Control Solutions Company EtherSynch Hyper Speed Control HyperLightLoad IntelliMOS mTouch Precision Edge and Quiet-Wire are registered trademarks of MicrochipTechnology Incorporated in the USA

                                                                                                            Adjacent Key Suppression AKS Analog-for-the-Digital Age Any Capacitor AnyIn AnyOut BodyComchipKIT chipKIT logo CodeGuard CryptoAuthentication CryptoCompanion CryptoControllerdsPICDEM dsPICDEMnet Dynamic Average Matching DAM ECAN EtherGREEN In-Circuit SerialProgramming ICSP Inter-Chip Connectivity JitterBlocker KleerNet KleerNet logo Mindi MiWimotorBench MPASM MPF MPLAB Certified logo MPLIB MPLINK MultiTRAK NetDetach OmniscientCode Generation PICDEM PICDEMnet PICkit PICtail PureSilicon QMatrix RightTouch logo REALICE Ripple Blocker SAM-ICE Serial Quad IO SMART-IS SQI SuperSwitcher SuperSwitcher II TotalEndurance TSHARC USBCheck VariSense ViewSpan WiperLock Wireless DNA and ZENA aretrademarks of Microchip Technology Incorporated in the USA and other countries

                                                                                                            SQTP is a service mark of Microchip Technology Incorporated in the USA

                                                                                                            Silicon Storage Technology is a registered trademark of Microchip Technology Inc in other countries

                                                                                                            GestIC is a registered trademark of Microchip Technology Germany II GmbH amp Co KG a subsidiary ofMicrochip Technology Inc in other countries

                                                                                                            All other trademarks mentioned herein are property of their respective companies

                                                                                                            ATBTLC1000

                                                                                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 55

                                                                                                            copy 2018 Microchip Technology Incorporated Printed in the USA All Rights Reserved

                                                                                                            ISBN 978-1-5224-2921-0

                                                                                                            Quality Management System Certified by DNV

                                                                                                            ISOTS 16949Microchip received ISOTS-169492009 certification for its worldwide headquarters design and waferfabrication facilities in Chandler and Tempe Arizona Gresham Oregon and design centers in Californiaand India The Companyrsquos quality system processes and procedures are for its PICreg MCUs and dsPICreg

                                                                                                            DSCs KEELOQreg code hopping devices Serial EEPROMs microperipherals nonvolatile memory andanalog products In addition Microchiprsquos quality system for the design and manufacture of developmentsystems is ISO 90012000 certified

                                                                                                            ATBTLC1000

                                                                                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 56

                                                                                                            AMERICAS ASIAPACIFIC ASIAPACIFIC EUROPECorporate Office2355 West Chandler BlvdChandler AZ 85224-6199Tel 480-792-7200Fax 480-792-7277Technical SupporthttpwwwmicrochipcomsupportWeb AddresswwwmicrochipcomAtlantaDuluth GATel 678-957-9614Fax 678-957-1455Austin TXTel 512-257-3370BostonWestborough MATel 774-760-0087Fax 774-760-0088ChicagoItasca ILTel 630-285-0071Fax 630-285-0075DallasAddison TXTel 972-818-7423Fax 972-818-2924DetroitNovi MITel 248-848-4000Houston TXTel 281-894-5983IndianapolisNoblesville INTel 317-773-8323Fax 317-773-5453Tel 317-536-2380Los AngelesMission Viejo CATel 949-462-9523Fax 949-462-9608Tel 951-273-7800Raleigh NCTel 919-844-7510New York NYTel 631-435-6000San Jose CATel 408-735-9110Tel 408-436-4270Canada - TorontoTel 905-695-1980Fax 905-695-2078

                                                                                                            Australia - SydneyTel 61-2-9868-6733China - BeijingTel 86-10-8569-7000China - ChengduTel 86-28-8665-5511China - ChongqingTel 86-23-8980-9588China - DongguanTel 86-769-8702-9880China - GuangzhouTel 86-20-8755-8029China - HangzhouTel 86-571-8792-8115China - Hong Kong SARTel 852-2943-5100China - NanjingTel 86-25-8473-2460China - QingdaoTel 86-532-8502-7355China - ShanghaiTel 86-21-3326-8000China - ShenyangTel 86-24-2334-2829China - ShenzhenTel 86-755-8864-2200China - SuzhouTel 86-186-6233-1526China - WuhanTel 86-27-5980-5300China - XianTel 86-29-8833-7252China - XiamenTel 86-592-2388138China - ZhuhaiTel 86-756-3210040

                                                                                                            India - BangaloreTel 91-80-3090-4444India - New DelhiTel 91-11-4160-8631India - PuneTel 91-20-4121-0141Japan - OsakaTel 81-6-6152-7160Japan - TokyoTel 81-3-6880- 3770Korea - DaeguTel 82-53-744-4301Korea - SeoulTel 82-2-554-7200Malaysia - Kuala LumpurTel 60-3-7651-7906Malaysia - PenangTel 60-4-227-8870Philippines - ManilaTel 63-2-634-9065SingaporeTel 65-6334-8870Taiwan - Hsin ChuTel 886-3-577-8366Taiwan - KaohsiungTel 886-7-213-7830Taiwan - TaipeiTel 886-2-2508-8600Thailand - BangkokTel 66-2-694-1351Vietnam - Ho Chi MinhTel 84-28-5448-2100

                                                                                                            Austria - WelsTel 43-7242-2244-39Fax 43-7242-2244-393Denmark - CopenhagenTel 45-4450-2828Fax 45-4485-2829Finland - EspooTel 358-9-4520-820France - ParisTel 33-1-69-53-63-20Fax 33-1-69-30-90-79Germany - GarchingTel 49-8931-9700Germany - HaanTel 49-2129-3766400Germany - HeilbronnTel 49-7131-67-3636Germany - KarlsruheTel 49-721-625370Germany - MunichTel 49-89-627-144-0Fax 49-89-627-144-44Germany - RosenheimTel 49-8031-354-560Israel - RarsquoananaTel 972-9-744-7705Italy - MilanTel 39-0331-742611Fax 39-0331-466781Italy - PadovaTel 39-049-7625286Netherlands - DrunenTel 31-416-690399Fax 31-416-690340Norway - TrondheimTel 47-7289-7561Poland - WarsawTel 48-22-3325737Romania - BucharestTel 40-21-407-87-50Spain - MadridTel 34-91-708-08-90Fax 34-91-708-08-91Sweden - GothenbergTel 46-31-704-60-40Sweden - StockholmTel 46-8-5090-4654UK - WokinghamTel 44-118-921-5800Fax 44-118-921-5820

                                                                                                            Worldwide Sales and Service

                                                                                                            copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 57

                                                                                                            • Introduction
                                                                                                            • Table of Contents
                                                                                                            • 1 Getting Started
                                                                                                              • 11 Software Prerequisites
                                                                                                                • 111 Installation Steps of Atmel Studio 7
                                                                                                                  • 12 Software Setup
                                                                                                                    • 121 Installation of Microchip SmartConnect application on a Mobile device
                                                                                                                      • 13 ATBTLC1000 Embedded Firmware
                                                                                                                      • 14 ATBTLC1000 Host Software API
                                                                                                                      • 15 Hardware Prerequisites
                                                                                                                        • 151 SMARTtrade SAM L21 Xplained Pro
                                                                                                                        • 152 ATBTLC1000ZR Xplained Pro Extension board
                                                                                                                          • 16 Hardware Setup
                                                                                                                            • 2 Creating the Project and Initializing
                                                                                                                              • 21 Creating Project from ASF
                                                                                                                              • 22 Configuring ASF for ATBTLC1000-ZR
                                                                                                                              • 23 Compiling and Testing the Project
                                                                                                                                • 3 Establishing Connection with Central Device
                                                                                                                                  • 31 Configuring and Starting the Advertisement Process
                                                                                                                                    • 311 Flags (AD Type 0x00)
                                                                                                                                    • 312 Available Service UUID (AD Types 0x02 to 0x07)
                                                                                                                                    • 313 Device Name (AD Types 0x08 to 0x09)
                                                                                                                                      • 3131 Setting the Advertisement Payload (ble_advertisement_data_set)
                                                                                                                                      • 3132 Starting the Advertisement Process (at_ble_adv_start)
                                                                                                                                        • 314 Advertisement Process
                                                                                                                                          • 3141 Starting the Advertisement Process
                                                                                                                                              • 32 Managing GAP events
                                                                                                                                                • 321 Handling of Connected and Disconnected GAP Events
                                                                                                                                                    • 4 SettingHandling of Pre-Defined Service
                                                                                                                                                      • 41 Adding Device Info Service Component from ASF Wizard to Project
                                                                                                                                                      • 42 Configuring and Loading Device Information Service
                                                                                                                                                        • 421 Procedure to Configure and Load Device Info Service
                                                                                                                                                            • 5 Setting up and Handling Custom Service
                                                                                                                                                              • 51 Configuring and Loading the Custom Environment Service
                                                                                                                                                                • 511 Procedure to Configure and Load Custom Environment Service
                                                                                                                                                                  • 52 Updating the Temperature Characteristic
                                                                                                                                                                    • 521 Setting a Characteristic Value ( at_ble_characteristic_value_set)
                                                                                                                                                                    • 522 Sending a Notification (at_ble_notification_send)
                                                                                                                                                                    • 523 Sending Temperature Information Once in Every 10 Seconds to Central
                                                                                                                                                                        • 6 Appendix A Software Solution - Pre-Defined Svc
                                                                                                                                                                        • 7 Appendix B Software Solution - Custom Service
                                                                                                                                                                        • 8 Document Revision History
                                                                                                                                                                        • The Microchip Web Site
                                                                                                                                                                        • Customer Change Notification Service
                                                                                                                                                                        • Customer Support
                                                                                                                                                                        • Microchip Devices Code Protection Feature
                                                                                                                                                                        • Legal Notice
                                                                                                                                                                        • Trademarks
                                                                                                                                                                        • Quality Management System Certified by DNV
                                                                                                                                                                        • Worldwide Sales and Service

                                                                                                              bull Neither Microchip nor any other semiconductor manufacturer can guarantee the security of theircode Code protection does not mean that we are guaranteeing the product as ldquounbreakablerdquo

                                                                                                              Code protection is constantly evolving We at Microchip are committed to continuously improving thecode protection features of our products Attempts to break Microchiprsquos code protection feature may be aviolation of the Digital Millennium Copyright Act If such acts allow unauthorized access to your softwareor other copyrighted work you may have a right to sue for relief under that Act

                                                                                                              Legal Notice

                                                                                                              Information contained in this publication regarding device applications and the like is provided only foryour convenience and may be superseded by updates It is your responsibility to ensure that yourapplication meets with your specifications MICROCHIP MAKES NO REPRESENTATIONS ORWARRANTIES OF ANY KIND WHETHER EXPRESS OR IMPLIED WRITTEN OR ORAL STATUTORYOR OTHERWISE RELATED TO THE INFORMATION INCLUDING BUT NOT LIMITED TO ITSCONDITION QUALITY PERFORMANCE MERCHANTABILITY OR FITNESS FOR PURPOSEMicrochip disclaims all liability arising from this information and its use Use of Microchip devices in lifesupport andor safety applications is entirely at the buyerrsquos risk and the buyer agrees to defendindemnify and hold harmless Microchip from any and all damages claims suits or expenses resultingfrom such use No licenses are conveyed implicitly or otherwise under any Microchip intellectualproperty rights unless otherwise stated

                                                                                                              Trademarks

                                                                                                              The Microchip name and logo the Microchip logo AnyRate AVR AVR logo AVR Freaks BeaconThingsBitCloud CryptoMemory CryptoRF dsPIC FlashFlex flexPWR Heldo JukeBlox KeeLoq KeeLoq logoKleer LANCheck LINK MD maXStylus maXTouch MediaLB megaAVR MOST MOST logo MPLABOptoLyzer PIC picoPower PICSTART PIC32 logo Prochip Designer QTouch RightTouch SAM-BASpyNIC SST SST Logo SuperFlash tinyAVR UNIO and XMEGA are registered trademarks ofMicrochip Technology Incorporated in the USA and other countries

                                                                                                              ClockWorks The Embedded Control Solutions Company EtherSynch Hyper Speed Control HyperLightLoad IntelliMOS mTouch Precision Edge and Quiet-Wire are registered trademarks of MicrochipTechnology Incorporated in the USA

                                                                                                              Adjacent Key Suppression AKS Analog-for-the-Digital Age Any Capacitor AnyIn AnyOut BodyComchipKIT chipKIT logo CodeGuard CryptoAuthentication CryptoCompanion CryptoControllerdsPICDEM dsPICDEMnet Dynamic Average Matching DAM ECAN EtherGREEN In-Circuit SerialProgramming ICSP Inter-Chip Connectivity JitterBlocker KleerNet KleerNet logo Mindi MiWimotorBench MPASM MPF MPLAB Certified logo MPLIB MPLINK MultiTRAK NetDetach OmniscientCode Generation PICDEM PICDEMnet PICkit PICtail PureSilicon QMatrix RightTouch logo REALICE Ripple Blocker SAM-ICE Serial Quad IO SMART-IS SQI SuperSwitcher SuperSwitcher II TotalEndurance TSHARC USBCheck VariSense ViewSpan WiperLock Wireless DNA and ZENA aretrademarks of Microchip Technology Incorporated in the USA and other countries

                                                                                                              SQTP is a service mark of Microchip Technology Incorporated in the USA

                                                                                                              Silicon Storage Technology is a registered trademark of Microchip Technology Inc in other countries

                                                                                                              GestIC is a registered trademark of Microchip Technology Germany II GmbH amp Co KG a subsidiary ofMicrochip Technology Inc in other countries

                                                                                                              All other trademarks mentioned herein are property of their respective companies

                                                                                                              ATBTLC1000

                                                                                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 55

                                                                                                              copy 2018 Microchip Technology Incorporated Printed in the USA All Rights Reserved

                                                                                                              ISBN 978-1-5224-2921-0

                                                                                                              Quality Management System Certified by DNV

                                                                                                              ISOTS 16949Microchip received ISOTS-169492009 certification for its worldwide headquarters design and waferfabrication facilities in Chandler and Tempe Arizona Gresham Oregon and design centers in Californiaand India The Companyrsquos quality system processes and procedures are for its PICreg MCUs and dsPICreg

                                                                                                              DSCs KEELOQreg code hopping devices Serial EEPROMs microperipherals nonvolatile memory andanalog products In addition Microchiprsquos quality system for the design and manufacture of developmentsystems is ISO 90012000 certified

                                                                                                              ATBTLC1000

                                                                                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 56

                                                                                                              AMERICAS ASIAPACIFIC ASIAPACIFIC EUROPECorporate Office2355 West Chandler BlvdChandler AZ 85224-6199Tel 480-792-7200Fax 480-792-7277Technical SupporthttpwwwmicrochipcomsupportWeb AddresswwwmicrochipcomAtlantaDuluth GATel 678-957-9614Fax 678-957-1455Austin TXTel 512-257-3370BostonWestborough MATel 774-760-0087Fax 774-760-0088ChicagoItasca ILTel 630-285-0071Fax 630-285-0075DallasAddison TXTel 972-818-7423Fax 972-818-2924DetroitNovi MITel 248-848-4000Houston TXTel 281-894-5983IndianapolisNoblesville INTel 317-773-8323Fax 317-773-5453Tel 317-536-2380Los AngelesMission Viejo CATel 949-462-9523Fax 949-462-9608Tel 951-273-7800Raleigh NCTel 919-844-7510New York NYTel 631-435-6000San Jose CATel 408-735-9110Tel 408-436-4270Canada - TorontoTel 905-695-1980Fax 905-695-2078

                                                                                                              Australia - SydneyTel 61-2-9868-6733China - BeijingTel 86-10-8569-7000China - ChengduTel 86-28-8665-5511China - ChongqingTel 86-23-8980-9588China - DongguanTel 86-769-8702-9880China - GuangzhouTel 86-20-8755-8029China - HangzhouTel 86-571-8792-8115China - Hong Kong SARTel 852-2943-5100China - NanjingTel 86-25-8473-2460China - QingdaoTel 86-532-8502-7355China - ShanghaiTel 86-21-3326-8000China - ShenyangTel 86-24-2334-2829China - ShenzhenTel 86-755-8864-2200China - SuzhouTel 86-186-6233-1526China - WuhanTel 86-27-5980-5300China - XianTel 86-29-8833-7252China - XiamenTel 86-592-2388138China - ZhuhaiTel 86-756-3210040

                                                                                                              India - BangaloreTel 91-80-3090-4444India - New DelhiTel 91-11-4160-8631India - PuneTel 91-20-4121-0141Japan - OsakaTel 81-6-6152-7160Japan - TokyoTel 81-3-6880- 3770Korea - DaeguTel 82-53-744-4301Korea - SeoulTel 82-2-554-7200Malaysia - Kuala LumpurTel 60-3-7651-7906Malaysia - PenangTel 60-4-227-8870Philippines - ManilaTel 63-2-634-9065SingaporeTel 65-6334-8870Taiwan - Hsin ChuTel 886-3-577-8366Taiwan - KaohsiungTel 886-7-213-7830Taiwan - TaipeiTel 886-2-2508-8600Thailand - BangkokTel 66-2-694-1351Vietnam - Ho Chi MinhTel 84-28-5448-2100

                                                                                                              Austria - WelsTel 43-7242-2244-39Fax 43-7242-2244-393Denmark - CopenhagenTel 45-4450-2828Fax 45-4485-2829Finland - EspooTel 358-9-4520-820France - ParisTel 33-1-69-53-63-20Fax 33-1-69-30-90-79Germany - GarchingTel 49-8931-9700Germany - HaanTel 49-2129-3766400Germany - HeilbronnTel 49-7131-67-3636Germany - KarlsruheTel 49-721-625370Germany - MunichTel 49-89-627-144-0Fax 49-89-627-144-44Germany - RosenheimTel 49-8031-354-560Israel - RarsquoananaTel 972-9-744-7705Italy - MilanTel 39-0331-742611Fax 39-0331-466781Italy - PadovaTel 39-049-7625286Netherlands - DrunenTel 31-416-690399Fax 31-416-690340Norway - TrondheimTel 47-7289-7561Poland - WarsawTel 48-22-3325737Romania - BucharestTel 40-21-407-87-50Spain - MadridTel 34-91-708-08-90Fax 34-91-708-08-91Sweden - GothenbergTel 46-31-704-60-40Sweden - StockholmTel 46-8-5090-4654UK - WokinghamTel 44-118-921-5800Fax 44-118-921-5820

                                                                                                              Worldwide Sales and Service

                                                                                                              copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 57

                                                                                                              • Introduction
                                                                                                              • Table of Contents
                                                                                                              • 1 Getting Started
                                                                                                                • 11 Software Prerequisites
                                                                                                                  • 111 Installation Steps of Atmel Studio 7
                                                                                                                    • 12 Software Setup
                                                                                                                      • 121 Installation of Microchip SmartConnect application on a Mobile device
                                                                                                                        • 13 ATBTLC1000 Embedded Firmware
                                                                                                                        • 14 ATBTLC1000 Host Software API
                                                                                                                        • 15 Hardware Prerequisites
                                                                                                                          • 151 SMARTtrade SAM L21 Xplained Pro
                                                                                                                          • 152 ATBTLC1000ZR Xplained Pro Extension board
                                                                                                                            • 16 Hardware Setup
                                                                                                                              • 2 Creating the Project and Initializing
                                                                                                                                • 21 Creating Project from ASF
                                                                                                                                • 22 Configuring ASF for ATBTLC1000-ZR
                                                                                                                                • 23 Compiling and Testing the Project
                                                                                                                                  • 3 Establishing Connection with Central Device
                                                                                                                                    • 31 Configuring and Starting the Advertisement Process
                                                                                                                                      • 311 Flags (AD Type 0x00)
                                                                                                                                      • 312 Available Service UUID (AD Types 0x02 to 0x07)
                                                                                                                                      • 313 Device Name (AD Types 0x08 to 0x09)
                                                                                                                                        • 3131 Setting the Advertisement Payload (ble_advertisement_data_set)
                                                                                                                                        • 3132 Starting the Advertisement Process (at_ble_adv_start)
                                                                                                                                          • 314 Advertisement Process
                                                                                                                                            • 3141 Starting the Advertisement Process
                                                                                                                                                • 32 Managing GAP events
                                                                                                                                                  • 321 Handling of Connected and Disconnected GAP Events
                                                                                                                                                      • 4 SettingHandling of Pre-Defined Service
                                                                                                                                                        • 41 Adding Device Info Service Component from ASF Wizard to Project
                                                                                                                                                        • 42 Configuring and Loading Device Information Service
                                                                                                                                                          • 421 Procedure to Configure and Load Device Info Service
                                                                                                                                                              • 5 Setting up and Handling Custom Service
                                                                                                                                                                • 51 Configuring and Loading the Custom Environment Service
                                                                                                                                                                  • 511 Procedure to Configure and Load Custom Environment Service
                                                                                                                                                                    • 52 Updating the Temperature Characteristic
                                                                                                                                                                      • 521 Setting a Characteristic Value ( at_ble_characteristic_value_set)
                                                                                                                                                                      • 522 Sending a Notification (at_ble_notification_send)
                                                                                                                                                                      • 523 Sending Temperature Information Once in Every 10 Seconds to Central
                                                                                                                                                                          • 6 Appendix A Software Solution - Pre-Defined Svc
                                                                                                                                                                          • 7 Appendix B Software Solution - Custom Service
                                                                                                                                                                          • 8 Document Revision History
                                                                                                                                                                          • The Microchip Web Site
                                                                                                                                                                          • Customer Change Notification Service
                                                                                                                                                                          • Customer Support
                                                                                                                                                                          • Microchip Devices Code Protection Feature
                                                                                                                                                                          • Legal Notice
                                                                                                                                                                          • Trademarks
                                                                                                                                                                          • Quality Management System Certified by DNV
                                                                                                                                                                          • Worldwide Sales and Service

                                                                                                                copy 2018 Microchip Technology Incorporated Printed in the USA All Rights Reserved

                                                                                                                ISBN 978-1-5224-2921-0

                                                                                                                Quality Management System Certified by DNV

                                                                                                                ISOTS 16949Microchip received ISOTS-169492009 certification for its worldwide headquarters design and waferfabrication facilities in Chandler and Tempe Arizona Gresham Oregon and design centers in Californiaand India The Companyrsquos quality system processes and procedures are for its PICreg MCUs and dsPICreg

                                                                                                                DSCs KEELOQreg code hopping devices Serial EEPROMs microperipherals nonvolatile memory andanalog products In addition Microchiprsquos quality system for the design and manufacture of developmentsystems is ISO 90012000 certified

                                                                                                                ATBTLC1000

                                                                                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 56

                                                                                                                AMERICAS ASIAPACIFIC ASIAPACIFIC EUROPECorporate Office2355 West Chandler BlvdChandler AZ 85224-6199Tel 480-792-7200Fax 480-792-7277Technical SupporthttpwwwmicrochipcomsupportWeb AddresswwwmicrochipcomAtlantaDuluth GATel 678-957-9614Fax 678-957-1455Austin TXTel 512-257-3370BostonWestborough MATel 774-760-0087Fax 774-760-0088ChicagoItasca ILTel 630-285-0071Fax 630-285-0075DallasAddison TXTel 972-818-7423Fax 972-818-2924DetroitNovi MITel 248-848-4000Houston TXTel 281-894-5983IndianapolisNoblesville INTel 317-773-8323Fax 317-773-5453Tel 317-536-2380Los AngelesMission Viejo CATel 949-462-9523Fax 949-462-9608Tel 951-273-7800Raleigh NCTel 919-844-7510New York NYTel 631-435-6000San Jose CATel 408-735-9110Tel 408-436-4270Canada - TorontoTel 905-695-1980Fax 905-695-2078

                                                                                                                Australia - SydneyTel 61-2-9868-6733China - BeijingTel 86-10-8569-7000China - ChengduTel 86-28-8665-5511China - ChongqingTel 86-23-8980-9588China - DongguanTel 86-769-8702-9880China - GuangzhouTel 86-20-8755-8029China - HangzhouTel 86-571-8792-8115China - Hong Kong SARTel 852-2943-5100China - NanjingTel 86-25-8473-2460China - QingdaoTel 86-532-8502-7355China - ShanghaiTel 86-21-3326-8000China - ShenyangTel 86-24-2334-2829China - ShenzhenTel 86-755-8864-2200China - SuzhouTel 86-186-6233-1526China - WuhanTel 86-27-5980-5300China - XianTel 86-29-8833-7252China - XiamenTel 86-592-2388138China - ZhuhaiTel 86-756-3210040

                                                                                                                India - BangaloreTel 91-80-3090-4444India - New DelhiTel 91-11-4160-8631India - PuneTel 91-20-4121-0141Japan - OsakaTel 81-6-6152-7160Japan - TokyoTel 81-3-6880- 3770Korea - DaeguTel 82-53-744-4301Korea - SeoulTel 82-2-554-7200Malaysia - Kuala LumpurTel 60-3-7651-7906Malaysia - PenangTel 60-4-227-8870Philippines - ManilaTel 63-2-634-9065SingaporeTel 65-6334-8870Taiwan - Hsin ChuTel 886-3-577-8366Taiwan - KaohsiungTel 886-7-213-7830Taiwan - TaipeiTel 886-2-2508-8600Thailand - BangkokTel 66-2-694-1351Vietnam - Ho Chi MinhTel 84-28-5448-2100

                                                                                                                Austria - WelsTel 43-7242-2244-39Fax 43-7242-2244-393Denmark - CopenhagenTel 45-4450-2828Fax 45-4485-2829Finland - EspooTel 358-9-4520-820France - ParisTel 33-1-69-53-63-20Fax 33-1-69-30-90-79Germany - GarchingTel 49-8931-9700Germany - HaanTel 49-2129-3766400Germany - HeilbronnTel 49-7131-67-3636Germany - KarlsruheTel 49-721-625370Germany - MunichTel 49-89-627-144-0Fax 49-89-627-144-44Germany - RosenheimTel 49-8031-354-560Israel - RarsquoananaTel 972-9-744-7705Italy - MilanTel 39-0331-742611Fax 39-0331-466781Italy - PadovaTel 39-049-7625286Netherlands - DrunenTel 31-416-690399Fax 31-416-690340Norway - TrondheimTel 47-7289-7561Poland - WarsawTel 48-22-3325737Romania - BucharestTel 40-21-407-87-50Spain - MadridTel 34-91-708-08-90Fax 34-91-708-08-91Sweden - GothenbergTel 46-31-704-60-40Sweden - StockholmTel 46-8-5090-4654UK - WokinghamTel 44-118-921-5800Fax 44-118-921-5820

                                                                                                                Worldwide Sales and Service

                                                                                                                copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 57

                                                                                                                • Introduction
                                                                                                                • Table of Contents
                                                                                                                • 1 Getting Started
                                                                                                                  • 11 Software Prerequisites
                                                                                                                    • 111 Installation Steps of Atmel Studio 7
                                                                                                                      • 12 Software Setup
                                                                                                                        • 121 Installation of Microchip SmartConnect application on a Mobile device
                                                                                                                          • 13 ATBTLC1000 Embedded Firmware
                                                                                                                          • 14 ATBTLC1000 Host Software API
                                                                                                                          • 15 Hardware Prerequisites
                                                                                                                            • 151 SMARTtrade SAM L21 Xplained Pro
                                                                                                                            • 152 ATBTLC1000ZR Xplained Pro Extension board
                                                                                                                              • 16 Hardware Setup
                                                                                                                                • 2 Creating the Project and Initializing
                                                                                                                                  • 21 Creating Project from ASF
                                                                                                                                  • 22 Configuring ASF for ATBTLC1000-ZR
                                                                                                                                  • 23 Compiling and Testing the Project
                                                                                                                                    • 3 Establishing Connection with Central Device
                                                                                                                                      • 31 Configuring and Starting the Advertisement Process
                                                                                                                                        • 311 Flags (AD Type 0x00)
                                                                                                                                        • 312 Available Service UUID (AD Types 0x02 to 0x07)
                                                                                                                                        • 313 Device Name (AD Types 0x08 to 0x09)
                                                                                                                                          • 3131 Setting the Advertisement Payload (ble_advertisement_data_set)
                                                                                                                                          • 3132 Starting the Advertisement Process (at_ble_adv_start)
                                                                                                                                            • 314 Advertisement Process
                                                                                                                                              • 3141 Starting the Advertisement Process
                                                                                                                                                  • 32 Managing GAP events
                                                                                                                                                    • 321 Handling of Connected and Disconnected GAP Events
                                                                                                                                                        • 4 SettingHandling of Pre-Defined Service
                                                                                                                                                          • 41 Adding Device Info Service Component from ASF Wizard to Project
                                                                                                                                                          • 42 Configuring and Loading Device Information Service
                                                                                                                                                            • 421 Procedure to Configure and Load Device Info Service
                                                                                                                                                                • 5 Setting up and Handling Custom Service
                                                                                                                                                                  • 51 Configuring and Loading the Custom Environment Service
                                                                                                                                                                    • 511 Procedure to Configure and Load Custom Environment Service
                                                                                                                                                                      • 52 Updating the Temperature Characteristic
                                                                                                                                                                        • 521 Setting a Characteristic Value ( at_ble_characteristic_value_set)
                                                                                                                                                                        • 522 Sending a Notification (at_ble_notification_send)
                                                                                                                                                                        • 523 Sending Temperature Information Once in Every 10 Seconds to Central
                                                                                                                                                                            • 6 Appendix A Software Solution - Pre-Defined Svc
                                                                                                                                                                            • 7 Appendix B Software Solution - Custom Service
                                                                                                                                                                            • 8 Document Revision History
                                                                                                                                                                            • The Microchip Web Site
                                                                                                                                                                            • Customer Change Notification Service
                                                                                                                                                                            • Customer Support
                                                                                                                                                                            • Microchip Devices Code Protection Feature
                                                                                                                                                                            • Legal Notice
                                                                                                                                                                            • Trademarks
                                                                                                                                                                            • Quality Management System Certified by DNV
                                                                                                                                                                            • Worldwide Sales and Service

                                                                                                                  AMERICAS ASIAPACIFIC ASIAPACIFIC EUROPECorporate Office2355 West Chandler BlvdChandler AZ 85224-6199Tel 480-792-7200Fax 480-792-7277Technical SupporthttpwwwmicrochipcomsupportWeb AddresswwwmicrochipcomAtlantaDuluth GATel 678-957-9614Fax 678-957-1455Austin TXTel 512-257-3370BostonWestborough MATel 774-760-0087Fax 774-760-0088ChicagoItasca ILTel 630-285-0071Fax 630-285-0075DallasAddison TXTel 972-818-7423Fax 972-818-2924DetroitNovi MITel 248-848-4000Houston TXTel 281-894-5983IndianapolisNoblesville INTel 317-773-8323Fax 317-773-5453Tel 317-536-2380Los AngelesMission Viejo CATel 949-462-9523Fax 949-462-9608Tel 951-273-7800Raleigh NCTel 919-844-7510New York NYTel 631-435-6000San Jose CATel 408-735-9110Tel 408-436-4270Canada - TorontoTel 905-695-1980Fax 905-695-2078

                                                                                                                  Australia - SydneyTel 61-2-9868-6733China - BeijingTel 86-10-8569-7000China - ChengduTel 86-28-8665-5511China - ChongqingTel 86-23-8980-9588China - DongguanTel 86-769-8702-9880China - GuangzhouTel 86-20-8755-8029China - HangzhouTel 86-571-8792-8115China - Hong Kong SARTel 852-2943-5100China - NanjingTel 86-25-8473-2460China - QingdaoTel 86-532-8502-7355China - ShanghaiTel 86-21-3326-8000China - ShenyangTel 86-24-2334-2829China - ShenzhenTel 86-755-8864-2200China - SuzhouTel 86-186-6233-1526China - WuhanTel 86-27-5980-5300China - XianTel 86-29-8833-7252China - XiamenTel 86-592-2388138China - ZhuhaiTel 86-756-3210040

                                                                                                                  India - BangaloreTel 91-80-3090-4444India - New DelhiTel 91-11-4160-8631India - PuneTel 91-20-4121-0141Japan - OsakaTel 81-6-6152-7160Japan - TokyoTel 81-3-6880- 3770Korea - DaeguTel 82-53-744-4301Korea - SeoulTel 82-2-554-7200Malaysia - Kuala LumpurTel 60-3-7651-7906Malaysia - PenangTel 60-4-227-8870Philippines - ManilaTel 63-2-634-9065SingaporeTel 65-6334-8870Taiwan - Hsin ChuTel 886-3-577-8366Taiwan - KaohsiungTel 886-7-213-7830Taiwan - TaipeiTel 886-2-2508-8600Thailand - BangkokTel 66-2-694-1351Vietnam - Ho Chi MinhTel 84-28-5448-2100

                                                                                                                  Austria - WelsTel 43-7242-2244-39Fax 43-7242-2244-393Denmark - CopenhagenTel 45-4450-2828Fax 45-4485-2829Finland - EspooTel 358-9-4520-820France - ParisTel 33-1-69-53-63-20Fax 33-1-69-30-90-79Germany - GarchingTel 49-8931-9700Germany - HaanTel 49-2129-3766400Germany - HeilbronnTel 49-7131-67-3636Germany - KarlsruheTel 49-721-625370Germany - MunichTel 49-89-627-144-0Fax 49-89-627-144-44Germany - RosenheimTel 49-8031-354-560Israel - RarsquoananaTel 972-9-744-7705Italy - MilanTel 39-0331-742611Fax 39-0331-466781Italy - PadovaTel 39-049-7625286Netherlands - DrunenTel 31-416-690399Fax 31-416-690340Norway - TrondheimTel 47-7289-7561Poland - WarsawTel 48-22-3325737Romania - BucharestTel 40-21-407-87-50Spain - MadridTel 34-91-708-08-90Fax 34-91-708-08-91Sweden - GothenbergTel 46-31-704-60-40Sweden - StockholmTel 46-8-5090-4654UK - WokinghamTel 44-118-921-5800Fax 44-118-921-5820

                                                                                                                  Worldwide Sales and Service

                                                                                                                  copy 2018 Microchip Technology Inc Training Manual DS00002599B-page 57

                                                                                                                  • Introduction
                                                                                                                  • Table of Contents
                                                                                                                  • 1 Getting Started
                                                                                                                    • 11 Software Prerequisites
                                                                                                                      • 111 Installation Steps of Atmel Studio 7
                                                                                                                        • 12 Software Setup
                                                                                                                          • 121 Installation of Microchip SmartConnect application on a Mobile device
                                                                                                                            • 13 ATBTLC1000 Embedded Firmware
                                                                                                                            • 14 ATBTLC1000 Host Software API
                                                                                                                            • 15 Hardware Prerequisites
                                                                                                                              • 151 SMARTtrade SAM L21 Xplained Pro
                                                                                                                              • 152 ATBTLC1000ZR Xplained Pro Extension board
                                                                                                                                • 16 Hardware Setup
                                                                                                                                  • 2 Creating the Project and Initializing
                                                                                                                                    • 21 Creating Project from ASF
                                                                                                                                    • 22 Configuring ASF for ATBTLC1000-ZR
                                                                                                                                    • 23 Compiling and Testing the Project
                                                                                                                                      • 3 Establishing Connection with Central Device
                                                                                                                                        • 31 Configuring and Starting the Advertisement Process
                                                                                                                                          • 311 Flags (AD Type 0x00)
                                                                                                                                          • 312 Available Service UUID (AD Types 0x02 to 0x07)
                                                                                                                                          • 313 Device Name (AD Types 0x08 to 0x09)
                                                                                                                                            • 3131 Setting the Advertisement Payload (ble_advertisement_data_set)
                                                                                                                                            • 3132 Starting the Advertisement Process (at_ble_adv_start)
                                                                                                                                              • 314 Advertisement Process
                                                                                                                                                • 3141 Starting the Advertisement Process
                                                                                                                                                    • 32 Managing GAP events
                                                                                                                                                      • 321 Handling of Connected and Disconnected GAP Events
                                                                                                                                                          • 4 SettingHandling of Pre-Defined Service
                                                                                                                                                            • 41 Adding Device Info Service Component from ASF Wizard to Project
                                                                                                                                                            • 42 Configuring and Loading Device Information Service
                                                                                                                                                              • 421 Procedure to Configure and Load Device Info Service
                                                                                                                                                                  • 5 Setting up and Handling Custom Service
                                                                                                                                                                    • 51 Configuring and Loading the Custom Environment Service
                                                                                                                                                                      • 511 Procedure to Configure and Load Custom Environment Service
                                                                                                                                                                        • 52 Updating the Temperature Characteristic
                                                                                                                                                                          • 521 Setting a Characteristic Value ( at_ble_characteristic_value_set)
                                                                                                                                                                          • 522 Sending a Notification (at_ble_notification_send)
                                                                                                                                                                          • 523 Sending Temperature Information Once in Every 10 Seconds to Central
                                                                                                                                                                              • 6 Appendix A Software Solution - Pre-Defined Svc
                                                                                                                                                                              • 7 Appendix B Software Solution - Custom Service
                                                                                                                                                                              • 8 Document Revision History
                                                                                                                                                                              • The Microchip Web Site
                                                                                                                                                                              • Customer Change Notification Service
                                                                                                                                                                              • Customer Support
                                                                                                                                                                              • Microchip Devices Code Protection Feature
                                                                                                                                                                              • Legal Notice
                                                                                                                                                                              • Trademarks
                                                                                                                                                                              • Quality Management System Certified by DNV
                                                                                                                                                                              • Worldwide Sales and Service

                                                                                                                    top related